<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/RA2013/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Domlloriv</id>
	<title>Razonamiento automático (2013-14) - Contribuciones del usuario [es]</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/RA2013/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Domlloriv"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php/Especial:Contribuciones/Domlloriv"/>
	<updated>2026-07-17T18:21:40Z</updated>
	<subtitle>Contribuciones del usuario</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=649</id>
		<title>Relación 12</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_12&amp;diff=649"/>
		<updated>2014-03-10T17:56:22Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R12: Representación de fórmulas proposicionales mediante&lt;br /&gt;
  polinomios *}&lt;br /&gt;
&lt;br /&gt;
theory R12&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El objetivo de esta relación es definir un procedimiento para&lt;br /&gt;
  transformar fórmulas proposicionales (construidas con ⊤, ∧ y ⊕) en&lt;br /&gt;
  polinomios de la forma&lt;br /&gt;
     (p₁ ∧ … ∧ pₙ) ⊕ … ⊕ (q₁ ∧ … ∧ qₘ)&lt;br /&gt;
  y demostrar que, para cualquier interpretación I, el valor de las&lt;br /&gt;
  fórmulas coincide con la de su correspondiente polinomio. *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Las fórmulas proposicionales pueden definirse mediante&lt;br /&gt;
  las siguientes reglas:&lt;br /&gt;
  · ⊤ es una fórmula proposicional&lt;br /&gt;
  · Las variables proposicionales p_1, p_2, … son fórmulas&lt;br /&gt;
    proposicionales,&lt;br /&gt;
  · Si F y G son fórmulas proposicionales, entonces (F ∧ G) y (F ⊕ G)&lt;br /&gt;
    también lo son. &lt;br /&gt;
  donde ⊤ es una fórmula que siempre es verdadera, ∧ es la conjunción y&lt;br /&gt;
  ⊕ es la disyunción exclusiva. &lt;br /&gt;
&lt;br /&gt;
  Definir el tipo de datos form para representar las fórmulas&lt;br /&gt;
  proposicionales usando &lt;br /&gt;
  · T en lugar de ⊤,&lt;br /&gt;
  · (Var i) en lugar de p_i,&lt;br /&gt;
  · (And F G) en lugar de (F ∧ G) y&lt;br /&gt;
  · (Xor F G) en lugar de (F ⊕ G).&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
datatype form = T | Var nat | And form form | Xor form form&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Los siguientes ejemplos de fórmulas&lt;br /&gt;
     form1 = p0 ⊕ ⊤&lt;br /&gt;
     form2 = (p0 ⊕ p1) ⊕ (p0 ∧ p1)&lt;br /&gt;
  es usará en lo que sigue.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation form1 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form1 ≡ Xor (Var 0) T&amp;quot;&lt;br /&gt;
abbreviation form2 :: &amp;quot;form&amp;quot; where&lt;br /&gt;
  &amp;quot;form2 ≡ Xor (Xor (Var 0) (Var 1)) (And (Var 0) (Var 1))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     xor :: bool ⇒ bool ⇒ bool&lt;br /&gt;
  tal que (xor p q) es el valor de la disyunción exclusiva de p y q. Por&lt;br /&gt;
  ejemplo,&lt;br /&gt;
     xor False True = True&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 irealetei pabflomar jaisalmen zoiruicha maresccas4 marescpla domlloriv&amp;quot;&lt;br /&gt;
-- &amp;quot;jaisalmen: http://es.wikipedia.org/wiki/Disyunci%C3%B3n_exclusiva&amp;quot;&lt;br /&gt;
-- &amp;quot;jaisalmen: de la definicion de xor: p xor q  =  (   p∧¬  q) or (¬ p ∧ q)&amp;quot;&lt;br /&gt;
definition xor :: &amp;quot;bool ⇒ bool ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;xor x y ≡ (x∧¬y)∨(¬x∧y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Una interpretación es una aplicación de los naturales en&lt;br /&gt;
  los booleanos. Definir las siguientes interpretaciones&lt;br /&gt;
          | p0 | p1 | p2 | p3 | ...&lt;br /&gt;
     int1 | F  | F  | F  | F  | ...&lt;br /&gt;
     int2 | F  | V  | F  | F  | ...&lt;br /&gt;
     int3 | V  | F  | F  | F  | ...&lt;br /&gt;
     int3 | V  | V  | F  | F  | ...&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
abbreviation int1 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int1 x ≡ False&amp;quot;&lt;br /&gt;
abbreviation int2 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int2 ≡ int1 (1 := True)&amp;quot;&lt;br /&gt;
abbreviation int3 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int3 ≡ int1 (0 := True)&amp;quot;&lt;br /&gt;
abbreviation int4 :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;int4 ≡ int1 (0 := True, 1 := True)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Dada una interpretación I, el valor de de una fórmula F&lt;br /&gt;
  repecto de I, I(F), se define por&lt;br /&gt;
  · T, si F es ⊤;&lt;br /&gt;
  · I(n), si F es p_n;&lt;br /&gt;
  · I(G) ∧ I(H), si F es (G ∧ H);&lt;br /&gt;
  · I(G) ⊕ I(H), si F es (G ⊕ H).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     valorF :: (nat ⇒ bool) ⇒ form ⇒ bool&lt;br /&gt;
  tal que (valorF i f) es el valor de la fórmula f respecto de la&lt;br /&gt;
  interpretación i. Por ejemplo, &lt;br /&gt;
     valorF int1 form1 = True&lt;br /&gt;
     valorF int3 form1 = False&lt;br /&gt;
     valorF int1 form2 = False&lt;br /&gt;
     valorF int2 form2 = True&lt;br /&gt;
     valorF int3 form2 = True&lt;br /&gt;
     valorF int4 form2 = True&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 irealetei maresccas4 marescpla jaisalmen zoiruicha domlloriv&amp;quot;&lt;br /&gt;
fun valorF :: &amp;quot;(nat ⇒ bool) ⇒ form ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorF i T = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Var n) = i n&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (And G H) = ((valorF i G) ∧ (valorF i H))&amp;quot;&lt;br /&gt;
| &amp;quot;valorF i (Xor G H) = xor (valorF i G) (valorF i H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un monomio es una lista de números naturales y se puede&lt;br /&gt;
  interpretar como la conjunción de variables proposionales cuyos&lt;br /&gt;
  índices son los números de la lista. Por ejemplo, el monomio [0,2,1]&lt;br /&gt;
  se interpreta como la fórmula (p0 ∧ p2 ∧ p1).  &lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formM :: nat list ⇒ form&lt;br /&gt;
  tal que (formM m) es la fórmula correspondiente al monomio. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     formM [0,2,1] = And (Var 0) (And (Var 2) (And (Var 1) T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 irealetei maresccas4 marescpla jaisalmen zoiruicha domlloriv&amp;quot;&lt;br /&gt;
fun formM :: &amp;quot;nat list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formM [] = T&amp;quot;&lt;br /&gt;
| &amp;quot;formM (x#xs) = And (Var x) (formM xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;formM [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir, por recursión, la función&lt;br /&gt;
     valorM :: (nat ⇒ bool) ⇒ nat list ⇒ bool&lt;br /&gt;
  tal que (valorM i m) es el valor de la fórmula representada por el&lt;br /&gt;
  monomio m en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorM int1 [0,2,1]                            = False&lt;br /&gt;
     valorM (int1(0:=True,1:=True,2:=True)) [0,2,1] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo monomio m, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i m = valorF i (formM m)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 irealetei maresccas4 marescpla&amp;quot;&lt;br /&gt;
fun valorM :: &amp;quot;(nat ⇒ bool) ⇒ nat list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorM i [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;valorM i (x#xs) = ((valorF i (Var x)) ∧ (valorM i xs))&amp;quot; --&amp;quot;Aquí he quitado algún paréntesis, pero la solución es, en esencia, la misma.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;valorM int1 [0,2,1]&amp;quot;&lt;br /&gt;
value &amp;quot;valorM (int1(0:=True,1:=True,2:=True)) [0,2,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 irealetei domlloriv&amp;quot;&lt;br /&gt;
lemma correccion_valorM:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot;&lt;br /&gt;
by (induct m) auto&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma correccion_valorM2:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot; (is &amp;quot;?P i m&amp;quot;)&lt;br /&gt;
proof (induct m)&lt;br /&gt;
  show &amp;quot;?P i []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a m&lt;br /&gt;
  assume HI: &amp;quot;?P i m&amp;quot;&lt;br /&gt;
  then show &amp;quot;?P i (a#m)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4 marescpla&amp;quot;&lt;br /&gt;
lemma correccion_valorM_detalle:&lt;br /&gt;
  &amp;quot;valorM i m = valorF i (formM m)&amp;quot;&lt;br /&gt;
proof (induct m)&lt;br /&gt;
  show &amp;quot;valorM i [] = valorF i (formM [])&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
  fix a m&lt;br /&gt;
  assume HI:&amp;quot;valorM i m = valorF i (formM m)&amp;quot;&lt;br /&gt;
  have &amp;quot;valorM i (a # m) = (valorF i (Var a) ∧ valorM i m)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (valorF i (Var a) ∧ valorF i (formM m))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = valorF i (formM (a # m))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;valorM i (a # m) = valorF i (formM (a # m))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Un polinomio es una lista de monomios y se puede&lt;br /&gt;
  interpretar como la disyunción exclusiva de los monomios. Por ejemplo, &lt;br /&gt;
  el polinomio [[0,2,1],[1,3]] se interpreta como la fórmula&lt;br /&gt;
  (p0 ∧ p2 ∧ p1) ⊕ (p1 ∧ p3).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     formP :: nat list list ⇒ form&lt;br /&gt;
  tal que (formP p) es la fórmula correspondiente al polinomio p. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     formP [[1,2],[3]]&lt;br /&gt;
     = Xor (And (Var 1) (And (Var 2) T)) (Xor (And (Var 3) T) (Xor T T))&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 irealetei maresccas4 marescpla domlloriv&amp;quot;&lt;br /&gt;
fun formP :: &amp;quot;nat list list ⇒ form&amp;quot; where&lt;br /&gt;
  &amp;quot;formP [] = Xor T T&amp;quot;&lt;br /&gt;
| &amp;quot;formP (x#xs) = Xor (formM x) (formP xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;formP [[1,2],[3]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     valorP :: (nat ⇒ bool) ⇒ nat list list ⇒ bool&lt;br /&gt;
  tal que (valorP i p) es el valor de la fórmula representada por el&lt;br /&gt;
  polinomio p en la interpretación i. Por ejemplo, &lt;br /&gt;
     valorP (int1(1:=True,3:=True)) [[0,2,1],[1,3]] = True&lt;br /&gt;
  Demostrar que, para toda interpretación i y todo polinomio p, se tiene&lt;br /&gt;
  que &lt;br /&gt;
     valorM i p = valorF i (formP p)&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 irealetei&amp;quot;&lt;br /&gt;
fun valorP :: &amp;quot;(nat ⇒ bool) ⇒ nat list list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorP i [] = xor True True&amp;quot;&lt;br /&gt;
| &amp;quot;valorP i (x#xs) = xor (valorM i x) (valorP i xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;valorP (int1(1:=True,3:=True)) [[0,2,1],[1,3]]&amp;quot;&lt;br /&gt;
lemma correccion_valorP:&lt;br /&gt;
  &amp;quot;valorP i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
by (induct p) (auto simp add:correccion_valorM)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma correccion_valorP_detalle:&lt;br /&gt;
  &amp;quot;valorP i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
proof (induct p)&lt;br /&gt;
  show &amp;quot;valorP i [] = valorF i (formP [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a p&lt;br /&gt;
  assume HI:&amp;quot;valorP i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
  have &amp;quot;valorP i (a # p) =  xor (valorM i a) (valorP i p)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorF i (formM a)) (valorP i p) &amp;quot; by (simp add:correccion_valorM)&lt;br /&gt;
  also have &amp;quot;... = xor (valorF i (formM a)) (valorF i (formP p))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = valorF i (formP (a # p))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot; valorP i (a # p) = valorF i (formP (a # p))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
fun valorP4 :: &amp;quot;(nat ⇒ bool) ⇒ nat list list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valorP4 i [] = False&amp;quot;&lt;br /&gt;
| &amp;quot;valorP4 i (x#xs) = xor (valorM i x) (valorP4 i xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;valorP4 (int1(1:=True,3:=True)) [[0,2,1],[1,3]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma correccion_valorP4:&lt;br /&gt;
  &amp;quot;valorP4 i p = valorF i (formP p)&amp;quot;&lt;br /&gt;
proof (induct p)&lt;br /&gt;
  show &amp;quot;valorP4 i [] = valorF i (formP [])&amp;quot; by (simp add:xor_def)&lt;br /&gt;
next&lt;br /&gt;
  fix x xs&lt;br /&gt;
  assume HI: &amp;quot;valorP4 i xs = valorF i (formP xs)&amp;quot;&lt;br /&gt;
  have &amp;quot;valorP4 i (x#xs) = xor (valorM i x) (valorP4 i xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorM i x) (valorF i (formP xs))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = valorF i (Xor (formM x) (formP xs))&amp;quot; by (simp add: correccion_valorM)&lt;br /&gt;
  also have &amp;quot;... = valorF i (formP (x#xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;valorP4 i (x#xs) = valorF i (formP (x#xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     productoM :: nat list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (productoM m p) es el producto del monomio p por el polinomio&lt;br /&gt;
  p. Por  ejemplo, &lt;br /&gt;
     productoM [1,3] [[1,2,4],[7],[4,1]] &lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun productoM :: &amp;quot;nat list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;productoM m [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;productoM m (x#xs) = [m@x] @ (productoM m xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4&amp;quot;&lt;br /&gt;
fun productoM2 :: &amp;quot;nat list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;productoM2 m [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;productoM2 m (a#ns) = (m@a)#(productoM2 m ns)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;productoM [1,3] [[1,2,4],[7],[4,1]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos monomios es la conjunción de sus valores.&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma valorM_conc: &lt;br /&gt;
  &amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;  (is &amp;quot;?P i xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P i [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P i xs ys&amp;quot;&lt;br /&gt;
  then show &amp;quot;?P i (a#xs) ys&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4&amp;quot;&lt;br /&gt;
lemma valorM_conc_auto: &lt;br /&gt;
  &amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma valorM_conc_detalle:&lt;br /&gt;
  &amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;valorM i ([] @ ys) = (valorM i [] ∧ valorM i ys)&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
  fix a xs &lt;br /&gt;
  assume HI:&amp;quot;valorM i (xs @ ys) = (valorM i xs ∧ valorM i ys)&amp;quot;&lt;br /&gt;
  have &amp;quot;valorM i ((a # xs) @ ys) = (valorF i (Var a) ∧ valorM i (xs @ ys))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (valorF i (Var a) ∧ (valorM i xs ∧ valorM i ys))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (valorM i (a # xs) ∧ valorM i ys)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;valorM i ((a # xs) @ ys) = (valorM i (a # xs) ∧ valorM i ys)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de un monomio por un polinomio es la conjunción de sus&lt;br /&gt;
  valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma xor_compl: &amp;quot;xor (a ∧ p) (a ∧ q) = (a ∧ (xor p q))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;xor (a ∧ p) (a ∧ q) = (((a ∧ p) ∧ ¬(a ∧ q)) ∨ (¬(a ∧ p) ∧ (a ∧ q)))&amp;quot; by (simp add:xor_def)&lt;br /&gt;
  also have &amp;quot;... = (a ∧ ((p ∧ ¬q) ∨ (¬p ∧ q)))&amp;quot; by auto&lt;br /&gt;
  also have &amp;quot;... = (a ∧ (xor p q))&amp;quot; by (simp add:xor_def)&lt;br /&gt;
  finally show &amp;quot;xor (a ∧ p) (a ∧ q) = (a ∧ (xor p q))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;No me hacía falta definir el xor_neg, anterior, que es como matar moscas a cañonazos&amp;quot;&lt;br /&gt;
lemma correccion_productoM: &lt;br /&gt;
  &amp;quot;valorP i (productoM m p) = (valorM i m ∧ valorP i p)&amp;quot;&lt;br /&gt;
proof (induct p)&lt;br /&gt;
  have &amp;quot;valorP i (productoM m []) = valorP i []&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (valorM i m ∧ valorP i [])&amp;quot; by (simp add:xor_def)&lt;br /&gt;
  then show &amp;quot;valorP i (productoM m []) = (valorM i m ∧ valorP i [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a p&lt;br /&gt;
  assume HI:&amp;quot;valorP i (productoM m p) = (valorM i m ∧ valorP i p)&amp;quot;&lt;br /&gt;
  have &amp;quot;valorP i (productoM m (a # p)) = valorP i ((m@a)#(productoM m p))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorM i (m@a)) (valorP i (productoM m p))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorM i (m@a)) (valorM i m ∧ valorP i p)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorM i m ∧ valorM i a) (valorM i m ∧ valorP i p)&amp;quot; by (simp add:valorM_conc)&lt;br /&gt;
  also have &amp;quot;... = (valorM i m ∧ xor (valorM i a) (valorP i p))&amp;quot; by (simp add:xor_compl)&lt;br /&gt;
  also have &amp;quot;... = (valorM i m ∧ valorP i (a # p))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;valorP i (productoM m (a # p)) = (valorM i m ∧ valorP i (a # p))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
lemma correccion_productoM_auto: &lt;br /&gt;
  &amp;quot;valorP i (productoM m p) = (valorM i m ∧ valorP i p)&amp;quot;&lt;br /&gt;
by (induct p) (auto simp add:xor_def valorM_conc xor_compl)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma lema1: &amp;quot;xor (a ∧ b) (a ∧ c) = (a ∧ (xor b c))&amp;quot;&lt;br /&gt;
proof (cases a)&lt;br /&gt;
  assume H: &amp;quot;a&amp;quot;&lt;br /&gt;
  then show &amp;quot;xor (a ∧ b) (a ∧ c) = (a ∧ (xor b c))&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  assume H: &amp;quot;¬a&amp;quot;&lt;br /&gt;
  then show &amp;quot;xor (a ∧ b) (a ∧ c) = (a ∧ (xor b c))&amp;quot; by (simp add: xor_def)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma correccion_productoM: &lt;br /&gt;
  &amp;quot;valorP4 i (productoM m p) = (valorM i m ∧ valorP4 i p)&amp;quot;&lt;br /&gt;
proof (induct p)&lt;br /&gt;
  show &amp;quot;valorP4 i (productoM m []) = (valorM i m ∧ valorP4 i [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix p px&lt;br /&gt;
  assume HI: &amp;quot;valorP4 i (productoM m px) = (valorM i m ∧ valorP4 i px)&amp;quot;&lt;br /&gt;
  have &amp;quot;valorP4 i (productoM m (p#px)) = valorP4 i ((m@p) # productoM m px)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorF i (formM (m@p))) (valorP4 i (productoM m px))&amp;quot; by (simp add: correccion_valorM)&lt;br /&gt;
  also have &amp;quot;... = xor (valorF i (formM (m@p))) (valorM i m ∧ valorP4 i px)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorM i (m @ p)) (valorM i m ∧ valorP4 i px)&amp;quot; by (simp add: correccion_valorM)&lt;br /&gt;
  also have &amp;quot;... = xor (valorM i m ∧ valorM i p) (valorM i m ∧ valorP4 i px)&amp;quot; by (simp add: valorM_conc)&lt;br /&gt;
  also have &amp;quot;... = (valorM i m ∧ (xor (valorM i p) (valorP4 i px)))&amp;quot; by (simp add: lema1)&lt;br /&gt;
  also have &amp;quot;... = (valorM i m ∧ valorP4 i (p#px))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;valorP4 i (productoM m (p#px)) = (valorM i m ∧ valorP4 i (p#px))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Definir la función&lt;br /&gt;
     producto :: nat list list ⇒ nat list list ⇒ nat list list&lt;br /&gt;
  tal que (producto p q) es el producto de los polinomios p y q. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     producto [[1,3],[2]] [[1,2,4],[7],[4,1]]&lt;br /&gt;
     = [[1,3,1,2,4],[1,3,7],[1,3,4,1],[2,1,2,4],[2,7],[2,4,1]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei: tenía una de más que no valía para nada, se me queda igual que maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun producto :: &amp;quot;nat list list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;producto [] q = []&amp;quot;&lt;br /&gt;
| &amp;quot;producto (a1 # p) (q) = (productoM a1 q)@(producto p q)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;producto [[1,3],[2]] [[1,2,4],[7],[4,1]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
fun producto4 :: &amp;quot;nat list list ⇒ nat list list ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;producto [] q = []&amp;quot;&lt;br /&gt;
| &amp;quot;producto (m#p) q = (productoM m q) @ (producto p q)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de la concatenación de dos polinomios es la disyunción exclusiva de &lt;br /&gt;
  sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Si me da tiempo, intentaré probar este lema. Irealetei: lo estoy intentando pero me he quedado en: &amp;#039;((a ∧ (¬b ∨ c) ∧ (b∨¬c))  ∨ (¬a ∧ ((b∧¬c) ∨ (¬b∧c ))))&amp;#039; y me va a petar el cerebro...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma lema2: &amp;quot;xor a (xor b c) = xor (xor a b) c&amp;quot;&lt;br /&gt;
by (auto simp add: xor_def)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Me ha dado tiempo. De forma análoga al lema1&amp;quot;&lt;br /&gt;
lemma lema2_simp: &amp;quot;xor a (xor b c) = xor (xor a b) c&amp;quot;&lt;br /&gt;
proof (cases a)&lt;br /&gt;
  assume &amp;quot;a&amp;quot;&lt;br /&gt;
  show &amp;quot;xor a (xor b c) = xor (xor a b) c&amp;quot;&lt;br /&gt;
  proof (cases b)&lt;br /&gt;
    assume &amp;quot;b&amp;quot;&lt;br /&gt;
    then show &amp;quot;xor a (xor b c) = xor (xor a b) c&amp;quot; using `a` by (simp add: xor_def)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬b&amp;quot;&lt;br /&gt;
    then show &amp;quot;xor a (xor b c) = xor (xor a b) c&amp;quot; by (simp add: xor_def)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;¬a&amp;quot;&lt;br /&gt;
  show &amp;quot;xor a (xor b c) = xor (xor a b) c&amp;quot;&lt;br /&gt;
  proof (cases b)&lt;br /&gt;
    assume &amp;quot;b&amp;quot;&lt;br /&gt;
    then show &amp;quot;xor a (xor b c) = xor (xor a b) c&amp;quot; using `¬a`by (simp add: xor_def)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬b&amp;quot;&lt;br /&gt;
    then show &amp;quot;xor a (xor b c) = xor (xor a b) c&amp;quot; by (simp add: xor_def)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma valorP_conc: &lt;br /&gt;
  &amp;quot;valorP4 i (xs @ ys) = (xor (valorP4 i xs) (valorP4 i ys))&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;valorP4 i ([] @ ys) = (xor (valorP4 i []) (valorP4 i ys))&amp;quot; by (simp add: xor_def)&lt;br /&gt;
next&lt;br /&gt;
  fix x xs&lt;br /&gt;
  assume HI: &amp;quot;valorP4 i (xs @ ys) = (xor (valorP4 i xs) (valorP4 i ys))&amp;quot;&lt;br /&gt;
  have &amp;quot;valorP4 i ((x#xs) @ ys) = valorP4 i (x # (xs@ys))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorM i x) (valorP4 i (xs@ys))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorM i x) (xor (valorP4 i xs) (valorP4 i ys))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = xor (xor (valorM i x) (valorP4 i xs)) (valorP4 i ys)&amp;quot; by (simp add: lema2)&lt;br /&gt;
  also have &amp;quot;... = xor (valorP4 i (x#xs)) (valorP4 i ys)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;valorP4 i ((x#xs) @ ys) = (xor (valorP4 i (x#xs)) (valorP4 i ys))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  del producto de dos polinomios es la conjunción de sus valores. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Es fácil ver que este lema es análogo al demostrado lema1&amp;quot;&lt;br /&gt;
lemma lema3: &amp;quot;xor (a ∧ c) (b ∧ c) = ((xor a b) ∧ c)&amp;quot;&lt;br /&gt;
by (auto simp add: xor_def)&lt;br /&gt;
&lt;br /&gt;
lemma correccion_producto: &lt;br /&gt;
  &amp;quot;valorP4 i (producto4 p q) = (valorP4 i p ∧ valorP4 i q)&amp;quot;&lt;br /&gt;
proof (induct p)&lt;br /&gt;
  show &amp;quot;valorP4 i (producto4 [] q) = (valorP4 i [] ∧ valorP4 i q)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix m p&lt;br /&gt;
  assume HI: &amp;quot;valorP4 i (producto4 p q) = (valorP4 i p ∧ valorP4 i q)&amp;quot;&lt;br /&gt;
  have &amp;quot;valorP4 i (producto4 (m#p) q) = valorP4 i ((productoM m q) @ (producto4 p q))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (xor (valorP4 i (productoM m q)) (valorP4 i (producto4 p q)))&amp;quot; by (simp add: valorP_conc)&lt;br /&gt;
  also have &amp;quot;... = (xor (valorP4 i (productoM m q)) (valorP4 i p ∧ valorP4 i q))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (xor (valorM i m ∧ valorP4 i q) (valorP4 i p ∧ valorP4 i q))&amp;quot; by (simp add: correccion_productoM)&lt;br /&gt;
  also have &amp;quot;... = ((xor (valorM i m) (valorP4 i p)) ∧ valorP4 i q)&amp;quot; by (simp add: lema3)&lt;br /&gt;
  also have &amp;quot;... = (valorP4 i (m#p) ∧ valorP4 i q)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;valorP4 i (producto4 (m#p) q) = (valorP4 i (m#p) ∧ valorP4 i q)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Definir la función&lt;br /&gt;
     polinomio :: form ⇒ nat list list&lt;br /&gt;
  tal que (polinomio f) es el polinomio que representa la fórmula f. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     polinomio (Xor (Var 1) (Var 2))               = [[1],[2]]&lt;br /&gt;
     polinomio (And (Var 1) (Var 2))               = [[1,2]]&lt;br /&gt;
     polinomio (Xor (Var 1) T)                     = [[1],[]]&lt;br /&gt;
     polinomio (And (Var 1) T)                     = [[1]]]&lt;br /&gt;
     polinomio (And (Xor (Var 1) (Var 2)) (Var 3)) = [[1,3],[2,3]]&lt;br /&gt;
     polinomio (Xor (And (Var 1) (Var 2)) (Var 3)) = [[1,2],[3]]&lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun polinomio :: &amp;quot;form ⇒ nat list list&amp;quot; where&lt;br /&gt;
  &amp;quot;polinomio T = [[]]&amp;quot;&lt;br /&gt;
| &amp;quot;polinomio (Var a) = [[a]]&amp;quot;&lt;br /&gt;
| &amp;quot;polinomio (And G H) = producto4 (polinomio G) (polinomio H)&amp;quot;&lt;br /&gt;
| &amp;quot;polinomio (Xor G H) = (polinomio G) @ (polinomio H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;polinomio (Xor (Var 1) (Var 2))&amp;quot;&lt;br /&gt;
value &amp;quot;polinomio (And (Var 1) (Var 2))&amp;quot;&lt;br /&gt;
value &amp;quot;polinomio (Xor (Var 1) T)&amp;quot;&lt;br /&gt;
value &amp;quot;polinomio (And (Var 1) T)&amp;quot;&lt;br /&gt;
value &amp;quot;polinomio (And (Xor (Var 1) (Var 2)) (Var 3))&amp;quot;&lt;br /&gt;
value &amp;quot;polinomio (Xor (And (Var 1) (Var 2)) (Var 3))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar que, en cualquier interpretación i, el valor &lt;br /&gt;
  de f es igual que el de su polinomio. &lt;br /&gt;
  --------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
theorem correccion_polinomio: &lt;br /&gt;
  &amp;quot;valorF i f = valorP4 i (polinomio f)&amp;quot;&lt;br /&gt;
proof (induct f)&lt;br /&gt;
  show &amp;quot;valorF i T = valorP4 i (polinomio T)&amp;quot; by (simp add: xor_def)&lt;br /&gt;
next&lt;br /&gt;
  fix a&lt;br /&gt;
  show &amp;quot;valorF i (Var a) = valorP4 i (polinomio (Var a))&amp;quot; by (simp add: xor_def)&lt;br /&gt;
next&lt;br /&gt;
  fix G H&lt;br /&gt;
  assume H1: &amp;quot;valorF i G = valorP4 i (polinomio G)&amp;quot;&lt;br /&gt;
  assume H2: &amp;quot;valorF i H = valorP4 i (polinomio H)&amp;quot;&lt;br /&gt;
  have &amp;quot;valorF i (And G H) = (valorF i G ∧ valorF i H)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = ((valorP4 i (polinomio G)) ∧ (valorP4 i (polinomio H)))&amp;quot; using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = valorP4 i (producto4 (polinomio G) (polinomio H))&amp;quot; by (simp add: correccion_producto)&lt;br /&gt;
  also have &amp;quot;... = valorP4 i (polinomio (And G H))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;valorF i (And G H) = valorP4 i (polinomio (And G H))&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix G H&lt;br /&gt;
  assume H1: &amp;quot;valorF i G = valorP4 i (polinomio G)&amp;quot;&lt;br /&gt;
  assume H2: &amp;quot;valorF i H = valorP4 i (polinomio H)&amp;quot;&lt;br /&gt;
  have &amp;quot;valorF i (Xor G H) = xor (valorF i G) (valorF i H)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = xor (valorP4 i (polinomio G)) (valorP4 i (polinomio H))&amp;quot; using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = valorP4 i ((polinomio G) @ (polinomio H))&amp;quot; by (simp add: valorP_conc)&lt;br /&gt;
  also have &amp;quot;... = valorP4 i (polinomio (Xor G H))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;valorF i (Xor G H) = valorP4 i (polinomio (Xor G H))&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_11&amp;diff=618</id>
		<title>Relación 11</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_11&amp;diff=618"/>
		<updated>2014-03-08T21:00:57Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R11: Deducción natural de primer orden *}&lt;br /&gt;
&lt;br /&gt;
theory R11&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Demostrar o refutar los siguientes lemas usando sólo las reglas&lt;br /&gt;
  básicas de deducción natural de la lógica proposicional, de los&lt;br /&gt;
  cuantificadores y de la igualdad: &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;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &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;
  · allI:       ⟦∀x. P x; P x ⟹ R⟧ ⟹ R&lt;br /&gt;
  · allE:       (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
  · exI:        P x ⟹ ∃x. P x&lt;br /&gt;
  · exE:        ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&lt;br /&gt;
&lt;br /&gt;
  · refl:       t = t&lt;br /&gt;
  · subst:      ⟦s = t; P s⟧ ⟹ P t&lt;br /&gt;
  · trans:      ⟦r = s; s = t⟧ ⟹ r = t&lt;br /&gt;
  · sym:        s = t ⟹ t = s&lt;br /&gt;
  · not_sym:    t ≠ s ⟹ s ≠ t&lt;br /&gt;
  · ssubst:     ⟦t = s; P s⟧ ⟹ P t&lt;br /&gt;
  · box_equals: ⟦a = b; a = c; b = d⟧ ⟹ a: = d&lt;br /&gt;
  · arg_cong:   x = y ⟹ f x = f y&lt;br /&gt;
  · fun_cong:   f = g ⟹ f x = g x&lt;br /&gt;
  · cong:       ⟦f = g; x = y⟧ ⟹ f x = g y&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI, mt y not_ex que demostramos a continuación.&lt;br /&gt;
  *}&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;
lemma no_ex: &amp;quot;¬(∃x. P(x)) ⟹ ∀x. ¬P(x)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
       P a ⟶ (∃x. Q x) ⊢ ∃x. P a ⟶ Q x &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot; (* Una! nos ha salido Una!!! *)&lt;br /&gt;
lemma ej_1_auto:&lt;br /&gt;
  assumes &amp;quot; P a ⟶ (∃x. Q x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej_1:&lt;br /&gt;
  fixes P Q :: &amp;quot;&amp;#039;b ⇒ bool&amp;quot; &lt;br /&gt;
  assumes 0:&amp;quot;P a ⟶ (∃x. Q x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬(P a) ∨ P a&amp;quot; by (rule excluded_middle)&lt;br /&gt;
  then show &amp;quot;∃x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
      {assume 2:&amp;quot;(P a)&amp;quot;&lt;br /&gt;
        have 4: &amp;quot;∃x. Q x&amp;quot; using 0 2 ..&lt;br /&gt;
        obtain b where &amp;quot;Q b&amp;quot; using 4 by (rule exE)&lt;br /&gt;
        then have &amp;quot;P a ⟶ Q b&amp;quot; ..&lt;br /&gt;
        then show &amp;quot;∃x. P a ⟶ Q x&amp;quot; by (rule exI)}&lt;br /&gt;
      next &lt;br /&gt;
       {assume 2:&amp;quot;¬(P a)&amp;quot;&lt;br /&gt;
        {assume &amp;quot;¬(∃x. P a ⟶ Q x)&amp;quot;&lt;br /&gt;
         then have 3: &amp;quot;∀x. ¬(P a ⟶ Q x)&amp;quot; by (rule no_ex)&lt;br /&gt;
         fix b&lt;br /&gt;
         have &amp;quot;¬(P a ⟶ Q b)&amp;quot; using 3 ..&lt;br /&gt;
         then have &amp;quot;P a ∧ ¬Q b&amp;quot; by (rule Meson.not_impD)&lt;br /&gt;
         then have 4:&amp;quot;P a&amp;quot; ..&lt;br /&gt;
         have &amp;quot;False&amp;quot; using 2 4 ..}&lt;br /&gt;
        then show &amp;quot; ∃x. P a ⟶ Q x&amp;quot; by (rule ccontr)}&lt;br /&gt;
       qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
       {∀x y z. R x y ∧ R y z ⟶ R x z, &lt;br /&gt;
        ∀x. ¬(R x x)}&lt;br /&gt;
       ⊢ ∀x y. R x y ⟶ ¬(R y x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei maresccas4 pabflomar&amp;quot; (* Dos *)&lt;br /&gt;
&lt;br /&gt;
lemma ej_2:&lt;br /&gt;
  assumes &amp;quot;∀x. ∀y. ∀z. R x y ∧ R y z ⟶ R x z&amp;quot;&lt;br /&gt;
          &amp;quot;∀x. ¬(R x x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. ∀y. R x y ⟶ ¬(R y x)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {fix a&lt;br /&gt;
  {fix b&lt;br /&gt;
  {assume 1:&amp;quot;R a b&amp;quot;&lt;br /&gt;
  have  &amp;quot;¬(R b a)&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬¬(R b a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;R b a&amp;quot; by (rule notnotD)&lt;br /&gt;
    with 1 have 3:&amp;quot;R a b ∧ R b a&amp;quot; ..&lt;br /&gt;
    have &amp;quot;∀y z. R a y ∧ R y z ⟶ R a z&amp;quot; using assms(1) ..&lt;br /&gt;
    then have &amp;quot;∀z. R a b ∧ R b z ⟶ R a z&amp;quot; ..&lt;br /&gt;
    then have &amp;quot;R a b ∧ R b a ⟶ R a a&amp;quot; ..&lt;br /&gt;
    then have &amp;quot;R a a&amp;quot; using 3 ..&lt;br /&gt;
    have &amp;quot;¬(R a a)&amp;quot; using assms(2) ..&lt;br /&gt;
    then show False using `R a a`..&lt;br /&gt;
  qed}&lt;br /&gt;
  then have 4:&amp;quot;R a b ⟶ ¬(R b a)&amp;quot; ..}&lt;br /&gt;
  then have &amp;quot;∀y. R a y ⟶ ¬ R y a&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;∀x y. R x y ⟶ ¬ R y x&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar o refutar&lt;br /&gt;
       (∀x. ∃y. P x y) ⟶ (∃y. ∀x. P x y)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;irealetei maresccas4 domlloriv pabflomar&amp;quot;&lt;br /&gt;
lemma ej_3_auto:&lt;br /&gt;
  assumes &amp;quot;∀x. ∃y. P x y&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃y. ∀x. P x y&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
(*Contra ejemplo&lt;br /&gt;
P = (λx. undefined)(a⇣1 := {a⇣2}, a⇣2 := {a⇣1})&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar&lt;br /&gt;
       (∃y. ∀x. P x y) ⟶ (∀x. ∃y. P x y)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei maresccas4 domlloriv&amp;quot;&lt;br /&gt;
lemma ej_4_auto:&lt;br /&gt;
  assumes &amp;quot;∃y. ∀x. P x y&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. ∃y. P x y&amp;quot; &lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej_4:&lt;br /&gt;
  assumes 1:&amp;quot;∃y. ∀x. P x y&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. ∃y. P x y&amp;quot; &lt;br /&gt;
proof -&lt;br /&gt;
  {fix a&lt;br /&gt;
  obtain b where 2:&amp;quot;∀x. P x b&amp;quot; using 1 ..&lt;br /&gt;
  have &amp;quot;P a b&amp;quot; using 2 ..&lt;br /&gt;
  then have &amp;quot;∃y. P a y&amp;quot;  ..}&lt;br /&gt;
  then show &amp;quot;∀x. ∃y. P x y&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ej_4_bis:&amp;quot;(∃y. ∀x. P x y) ⟶ (∀x. ∃y. P x y)&amp;quot; &lt;br /&gt;
proof &lt;br /&gt;
  assume 1:&amp;quot;∃y. ∀x. P x y&amp;quot;&lt;br /&gt;
  {fix a&lt;br /&gt;
  obtain b where 2:&amp;quot;∀x. P x b&amp;quot; using 1 ..&lt;br /&gt;
  have &amp;quot;P a b&amp;quot; using 2 ..&lt;br /&gt;
  then have &amp;quot;∃y. P a y&amp;quot;  ..}&lt;br /&gt;
  then show &amp;quot;∀x. ∃y. P x y&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar&lt;br /&gt;
     {∀x. P a x x, &lt;br /&gt;
      ∀x y z. P x y z ⟶ P (f x) y (f z)⟧&lt;br /&gt;
     ⊢ ∃z. P (f a) z (f (f a))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma ej_5:&lt;br /&gt;
  assumes &amp;quot;∀x. P a x x&amp;quot;&lt;br /&gt;
          &amp;quot;∀x y z. P x y z ⟶ P (f x) y (f z)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃z. P (f a) z (f (f a))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;P a (f a) (f a)&amp;quot; using assms(1) ..&lt;br /&gt;
  have &amp;quot;∀y z. P a y z ⟶ P (f a) y (f z)&amp;quot; using assms(2) ..&lt;br /&gt;
  then have &amp;quot;∀z. P a (f a) z ⟶ P (f a) (f a) (f z)&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;P a (f a) (f a) ⟶ P (f a) (f a) (f (f a))&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;P (f a) (f a) (f (f a))&amp;quot; using `P a (f a) (f a)` ..&lt;br /&gt;
  then show &amp;quot;∃z. P (f a) z (f (f a))&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej_5_auto:&lt;br /&gt;
  assumes &amp;quot;∀x. P a x x&amp;quot;&lt;br /&gt;
  assumes &amp;quot;∀x y z. P x y z ⟶ P (f x) y (f z)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃z. P (f a) z (f (f a))&amp;quot;&lt;br /&gt;
using assms by meson&lt;br /&gt;
&lt;br /&gt;
lemma ej_5:&lt;br /&gt;
  assumes 1:&amp;quot;∀x. P a x x&amp;quot;&lt;br /&gt;
  assumes 2:&amp;quot;∀x y z. P x y z ⟶ P (f x) y (f z)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃z. P (f a) z (f (f a))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 3:&amp;quot;P a (f a) (f a)&amp;quot; using 1 ..&lt;br /&gt;
  have  &amp;quot;∀y z. P a y z ⟶ P (f a) y (f z)&amp;quot; using 2 ..&lt;br /&gt;
  then have  &amp;quot;∀z. P a (f a) z ⟶ P (f a) (f a) (f z)&amp;quot;  ..&lt;br /&gt;
  then have  4:&amp;quot; P a (f a) (f a) ⟶ P (f a) (f a) (f (f a))&amp;quot; ..&lt;br /&gt;
  have 5:&amp;quot;P (f a) (f a) (f (f a))&amp;quot; using 4 3 by (rule mp)&lt;br /&gt;
  then show &amp;quot;∃z. P (f a) z (f (f a))&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar o refutar&lt;br /&gt;
     {∀y. Q a y, &lt;br /&gt;
      ∀x y. Q x y ⟶ Q (s x) (s y)} &lt;br /&gt;
     ⊢ ∃z. Qa z ∧ Q z (s (s a))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma ej_6:&lt;br /&gt;
  assumes &amp;quot;∀y. Q a y&amp;quot;&lt;br /&gt;
          &amp;quot;∀x y. Q x y ⟶ Q (s x) (s y)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃z. Q a z ∧ Q z (s (s a))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;Q a (s a)&amp;quot; using assms(1) ..&lt;br /&gt;
  have &amp;quot;∀y. Q a y ⟶ Q (s a) (s y)&amp;quot; using assms(2) ..&lt;br /&gt;
  then have &amp;quot;Q a (s a) ⟶ Q (s a) (s (s a))&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;Q (s a) (s (s a))&amp;quot; using `Q a (s a)` ..&lt;br /&gt;
  with  `Q a (s a)` have &amp;quot;Q a (s a) ∧ Q (s a) (s (s a))&amp;quot;  by (rule conjI)&lt;br /&gt;
  then show &amp;quot;∃z. Q a z ∧ Q z (s (s a))&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej_6_auto:&lt;br /&gt;
  assumes &amp;quot;∀y. Q a y&amp;quot;&lt;br /&gt;
  assumes &amp;quot;∀x y. Q x y ⟶ Q (s x) (s y)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃z. Q a z ∧ Q z (s (s a))&amp;quot;&lt;br /&gt;
using assms by meson&lt;br /&gt;
&lt;br /&gt;
lemma ej_6:&lt;br /&gt;
  assumes 1:&amp;quot;∀y. Q a y&amp;quot;&lt;br /&gt;
  assumes 2:&amp;quot;∀x y. Q x y ⟶ Q (s x) (s y)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃z. Q a z ∧ Q z (s (s a))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  have 3:&amp;quot;Q a (s a)&amp;quot; using 1 ..&lt;br /&gt;
  have &amp;quot;∀y. Q a y ⟶ Q (s a) (s y)&amp;quot; using 2 ..&lt;br /&gt;
  then have &amp;quot;Q a (s a) ⟶ Q (s a) (s (s a))&amp;quot; ..&lt;br /&gt;
  then have 4:&amp;quot;Q (s a) (s (s a))&amp;quot; using 3  by (rule mp)&lt;br /&gt;
  show &amp;quot;Q a (s a) ∧ Q (s a) (s (s a))&amp;quot; using 3 4 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. (En APLI2 el ejercicio 13 de LP) Formalizar, y demostrar&lt;br /&gt;
  la corrección, del siguiente argumento &lt;br /&gt;
     Si la válvula está abierta o la monitorización está preparada,&lt;br /&gt;
     entonces se envía una señal de reconocimiento y un mensaje de&lt;br /&gt;
     funcionamiento al controlador del ordenador. Si se envía un mensaje &lt;br /&gt;
     de funcionamiento al controlador del ordenador o el sistema está en &lt;br /&gt;
     estado normal, entonces se aceptan las órdenes del operador. Por lo&lt;br /&gt;
     tanto, si la válvula está abierta, entonces se aceptan las órdenes&lt;br /&gt;
     del operador. &lt;br /&gt;
  Usar A : La válvula está abierta.&lt;br /&gt;
       P : La monitorización está preparada.&lt;br /&gt;
       R : Envía una señal de reconocimiento.&lt;br /&gt;
       F : Envía un mensaje de funcionamiento.&lt;br /&gt;
       N : El sistema está en estado normal.&lt;br /&gt;
       Or : Se aceptan órdenes del operador.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej7_pfm:&lt;br /&gt;
  assumes 1: &amp;quot;A ∨ P ⟶ R ∧ F&amp;quot; and&lt;br /&gt;
          2: &amp;quot;(F ∨ N) ⟶ Or&amp;quot;&lt;br /&gt;
 shows &amp;quot;A ⟶ Or&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 3: &amp;quot;A&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;A ∨ P&amp;quot; using 3 by (rule disjI1)&lt;br /&gt;
    have 5: &amp;quot;R ∧ F&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
    have 6: &amp;quot;F&amp;quot; using 5 by (rule conjunct2)&lt;br /&gt;
    have 7: &amp;quot;F ∨ N&amp;quot; using 6 by (rule disjI1)&lt;br /&gt;
    have 8: &amp;quot;Or&amp;quot; using 2 7 by (rule mp)}&lt;br /&gt;
  then show &amp;quot;A ⟶ Or&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej_7_auto:&lt;br /&gt;
  assumes &amp;quot;A ∨ P ⟶ R ∧ F&amp;quot;&lt;br /&gt;
  assumes &amp;quot;F ∨ N ⟶ Or&amp;quot;&lt;br /&gt;
  shows &amp;quot;A ⟶ Or&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej_7:&lt;br /&gt;
  assumes 1:&amp;quot;A ∨ P ⟶ R ∧ F&amp;quot;&lt;br /&gt;
  assumes 2:&amp;quot;F ∨ N ⟶ Or&amp;quot;&lt;br /&gt;
  shows &amp;quot;A ⟶ Or&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
    assume &amp;quot;A&amp;quot;&lt;br /&gt;
    then have 3:&amp;quot;A ∨ P&amp;quot; ..&lt;br /&gt;
    have &amp;quot;R ∧ F&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    then have &amp;quot;F&amp;quot; ..&lt;br /&gt;
    then have 4:&amp;quot;F ∨ N&amp;quot; ..&lt;br /&gt;
    show &amp;quot;Or&amp;quot; using 2 4 by (rule mp)&lt;br /&gt;
qed &lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. (En APLI2 el ejercicio 5 de LP) Formalizar, y demostrar&lt;br /&gt;
  la corrección, del siguiente argumento &lt;br /&gt;
     En cierto experimento, cuando hemos empleado un fármaco A, el&lt;br /&gt;
     paciente ha mejorado considerablemente en el caso, y sólo en el&lt;br /&gt;
     caso, en que no se haya empleado también un fármaco B. Además, o se&lt;br /&gt;
     ha empleado el fármaco A o se ha empleado el fármaco B. En&lt;br /&gt;
     consecuencia, podemos afirmar que si no hemos empleado el fármaco&lt;br /&gt;
     B, el paciente ha mejorado considerablemente. &lt;br /&gt;
  Usar A: Hemos empleado el fármaco A.&lt;br /&gt;
       B: Hemos empleado el fármaco B.&lt;br /&gt;
       M: El paciente ha mejorado notablemente.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot; &lt;br /&gt;
&lt;br /&gt;
lemma ej8_pfm:&lt;br /&gt;
  assumes  &amp;quot;A ⟶ (M ⟷ ¬B)&amp;quot; &lt;br /&gt;
          &amp;quot;A ∨ B&amp;quot;&lt;br /&gt;
 shows &amp;quot;¬B ⟶ M&amp;quot;&lt;br /&gt;
&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  show &amp;quot;A ∨ B&amp;quot; using assms(2) by simp&lt;br /&gt;
  next&lt;br /&gt;
  { assume &amp;quot;A&amp;quot;&lt;br /&gt;
    with assms(1) have &amp;quot;M ⟷ ¬B&amp;quot;  by (rule mp)&lt;br /&gt;
    then show &amp;quot;¬B ⟶ M&amp;quot; using assms by simp}&lt;br /&gt;
  next&lt;br /&gt;
  { assume 1:&amp;quot;B&amp;quot;&lt;br /&gt;
    {assume 2:&amp;quot;¬B&amp;quot;&lt;br /&gt;
      then have &amp;quot;M&amp;quot; using 1 by (rule notE)}&lt;br /&gt;
      then show &amp;quot;¬B ⟶ M&amp;quot; by (rule impI)&lt;br /&gt;
 }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei domlloriv&amp;quot;&lt;br /&gt;
lemma ej_8:&lt;br /&gt;
  assumes &amp;quot;(A ⟶ M) ⟷ ¬B&amp;quot;&lt;br /&gt;
          &amp;quot;A ∨ B&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬B ⟶ M&amp;quot;&lt;br /&gt;
using assms(2)&lt;br /&gt;
proof&lt;br /&gt;
  { assume &amp;quot;A&amp;quot;&lt;br /&gt;
    { assume &amp;quot;¬B&amp;quot;&lt;br /&gt;
      have &amp;quot;¬B ⟶ (A ⟶ M)&amp;quot; using assms(1) ..&lt;br /&gt;
      then have &amp;quot;A ⟶ M&amp;quot; using `¬B` ..&lt;br /&gt;
      then have &amp;quot;M&amp;quot; using `A` .. }&lt;br /&gt;
    then show &amp;quot;¬B ⟶ M&amp;quot; ..&lt;br /&gt;
  }&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;B&amp;quot;&lt;br /&gt;
    { assume &amp;quot;¬B&amp;quot;&lt;br /&gt;
      then have False using `B` ..&lt;br /&gt;
      then have &amp;quot;M&amp;quot; .. }&lt;br /&gt;
    then show &amp;quot;¬B ⟶ M&amp;quot; ..&lt;br /&gt;
  }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. (En APLI2 el ejercicio 13 de LPO) Formalizar, y decidir&lt;br /&gt;
  la corrección, del siguiente argumento &lt;br /&gt;
     Toda persona pobre tiene un padre rico. Por tanto, existe una&lt;br /&gt;
     persona rica que tiene un abuelo rico.&lt;br /&gt;
  Usar R(x) para x es rico&lt;br /&gt;
       p(x) para el padre de x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;julrobrel &amp;quot;&lt;br /&gt;
lemma apli2_ej13_lpo:&lt;br /&gt;
    assumes &amp;quot;∀ x. ¬R(x) ⟶ R(p(x))&amp;quot;&lt;br /&gt;
      shows &amp;quot;∃ x. R(x) ∧ R(p(p(x)))&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma apli2_ej13_lpo_d:&lt;br /&gt;
    assumes 0:&amp;quot;∀ x. ¬R(x) ⟶ R(p(x))&amp;quot;&lt;br /&gt;
      shows &amp;quot;∃ x. R(x) ∧ R(p(p(x)))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej_9_auto:&lt;br /&gt;
  assumes &amp;quot;∀x. ¬R(x)⟶R(p(x))&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃y. R(y) ⟶ R(p(p(y)))&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma ej_9:&lt;br /&gt;
  assumes &amp;quot;∀x. ¬R x ⟶ R (p x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. R x ∧ R(p (p x))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬(∃x. ¬R(p x)) ∨ (∃x. ¬R(p x))&amp;quot; by (rule excluded_middle)&lt;br /&gt;
  then show &amp;quot;∃x. R x ∧ R(p (p x))&amp;quot;&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬(∃x. ¬R(p x))&amp;quot;&lt;br /&gt;
    then have 1:&amp;quot;∀x. ¬¬R(p x)&amp;quot; by (rule no_ex)&lt;br /&gt;
    {fix a&lt;br /&gt;
      have &amp;quot;¬¬R(p a)&amp;quot; using 1 ..&lt;br /&gt;
      then have &amp;quot;R(p a)&amp;quot; by (rule notnotD)}&lt;br /&gt;
    then have 2:&amp;quot;∀x. R(p x)&amp;quot; ..&lt;br /&gt;
    {fix a&lt;br /&gt;
      have 3:&amp;quot;R(p a)&amp;quot; using 2 ..&lt;br /&gt;
      have 4:&amp;quot;R(p (p (p a)))&amp;quot; using 2 ..&lt;br /&gt;
      have &amp;quot;R(p a) ∧ R(p (p (p a)))&amp;quot; using 3 4 ..}&lt;br /&gt;
    then show &amp;quot;∃x. R x ∧ R(p (p x))&amp;quot; ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;∃x. ¬R(p x)&amp;quot;&lt;br /&gt;
    obtain a where 1:&amp;quot;¬R(p a)&amp;quot; using `∃x. ¬R(p x)` ..&lt;br /&gt;
    have &amp;quot;¬R(p a) ⟶ R(p (p a))&amp;quot; using assms ..&lt;br /&gt;
    then have 2:&amp;quot;R(p (p a))&amp;quot; using 1 ..&lt;br /&gt;
    have &amp;quot;¬R a ⟶ R(p a)&amp;quot; using assms ..&lt;br /&gt;
    then have &amp;quot;¬¬R a&amp;quot; using 1 by (rule mt)&lt;br /&gt;
    then have 3:&amp;quot;R a&amp;quot; by (rule notnotD)&lt;br /&gt;
    then have  &amp;quot;R a ∧ R(p (p a))&amp;quot; using 2 by (rule conjI)&lt;br /&gt;
    then show &amp;quot;∃x. R x ∧ R(p (p x))&amp;quot; ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. (En APLI2 el ejercicio 10 de LPO) Formalizar, y decidir&lt;br /&gt;
  la corrección, del siguiente argumento &lt;br /&gt;
     Los aficionados al fútbol aplauden a cualquier futbolista&lt;br /&gt;
     extranjero. Juanito no aplaude a futbolistas extranjeros. Por&lt;br /&gt;
     tanto, si hay algún futbolista extranjero nacionalizado español,&lt;br /&gt;
     Juanito no es aficionado al fútbol.&lt;br /&gt;
  Usar Af(x)   para x es aficicionado al fútbol&lt;br /&gt;
       Ap(x,y) para x aplaude a y&lt;br /&gt;
       E(x)    para x es un futbolista extranjero&lt;br /&gt;
       N(x)    para x es un futbolista nacionalizado español&lt;br /&gt;
       j       para Juanito&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej10_lpo:&lt;br /&gt;
    assumes &amp;quot;∀ x. Af(x) ⟶ (∀ y. E(y) ⟶ Ap(x,y))&amp;quot;&lt;br /&gt;
            &amp;quot;∀ y. E(y) ⟶ ¬ Ap(j,y)&amp;quot;&lt;br /&gt;
      shows &amp;quot;∃ y. E(y) ∧ N(y) ⟶ ¬Af(j)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma apli2_ej10_lpo_d:&lt;br /&gt;
    assumes 0:&amp;quot;∀ x. Af(x) ⟶ (∀ y. E(y) ⟶ Ap(x,y))&amp;quot;&lt;br /&gt;
        and 1:&amp;quot;∀ y. E(y) ⟶ ¬ Ap(j,y)&amp;quot;&lt;br /&gt;
      shows &amp;quot;∃ y. E(y) ∧ N(y) ⟶ ¬Af(j)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej_10_auto:&lt;br /&gt;
  assumes &amp;quot;∀x y. Af(x) ∧ E(y) ⟶ Ap(x, y)&amp;quot;&lt;br /&gt;
  assumes &amp;quot;∀y. E(y) ⟶ ¬Ap(j,y)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃y. N(y) ∧ E(y) ⟶ ¬Af(j)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma ej_10:&lt;br /&gt;
  assumes &amp;quot;∀x y. (Af(x) ∧ E(y)) ⟶ Ap(x, y)&amp;quot;&lt;br /&gt;
          &amp;quot; ∀x. E(x) ⟶ ¬Ap(j, x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. E(x) ∧ N(x) ⟶ ¬Af(j)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { fix a&lt;br /&gt;
    { assume 1:&amp;quot;E(a) ∧ N(a)&amp;quot;&lt;br /&gt;
      have &amp;quot;¬Af(j)&amp;quot;&lt;br /&gt;
      proof&lt;br /&gt;
        assume &amp;quot;Af(j)&amp;quot;&lt;br /&gt;
        have &amp;quot;E(a)&amp;quot; using 1 ..&lt;br /&gt;
        have 2:&amp;quot;Af(j) ∧ E(a)&amp;quot; using `Af(j)` `E(a)` ..&lt;br /&gt;
        have &amp;quot;∀x. Af(j) ∧ E(x) ⟶ Ap(j, x)&amp;quot; using assms(1) ..&lt;br /&gt;
        then have &amp;quot;Af(j) ∧ E(a) ⟶ Ap(j, a)&amp;quot; ..&lt;br /&gt;
        then have a:&amp;quot;Ap(j, a)&amp;quot; using 2 ..&lt;br /&gt;
        have &amp;quot;E(a) ⟶ ¬Ap(j, a)&amp;quot; using assms(2) ..&lt;br /&gt;
        then have &amp;quot;¬Ap(j, a)&amp;quot; using `E(a)` ..&lt;br /&gt;
        then show &amp;quot;False&amp;quot; using a ..&lt;br /&gt;
      qed}&lt;br /&gt;
    then have &amp;quot;E(a) ∧ N(a) ⟶ ¬Af(j)&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;∃x. E(x) ∧ N(x) ⟶ ¬Af(j)&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
-- pabflomar --&lt;br /&gt;
&lt;br /&gt;
lemma ej10_pfm:&lt;br /&gt;
  assumes &amp;quot;∀x y. Af(x) ∧ E(y) ⟶ Ap(x,y)&amp;quot;&lt;br /&gt;
          &amp;quot;∀x. E(x) ⟶ ¬Ap(j,x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. E(x) ∧ N(x)  ⟶ ¬Af(j)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     Ningún socio del club está en deuda con el tesorero del club. Si&lt;br /&gt;
     un socio del club no paga su cuota está en deuda con el tesorero&lt;br /&gt;
     del club. Por tanto, si el tesorero del club es socio del club,&lt;br /&gt;
     entonces paga su cuota. &lt;br /&gt;
  Usar P(x) para x es socio del club&lt;br /&gt;
       Q(x) para x paga su cuota&lt;br /&gt;
       R(x) para x está en deuda con el tesorero&lt;br /&gt;
       a    para el tesorero del club&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo:&lt;br /&gt;
  assumes &amp;quot;¬ (∃ x. P(x) ∧ R(x))&amp;quot;&lt;br /&gt;
          &amp;quot;∀ x. P(x) ∧ ¬ Q(x) ⟶ R(x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;P(a) ⟶ Q(a)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d:&lt;br /&gt;
  assumes 0:&amp;quot;¬ (∃ x. P(x) ∧ R(x))&amp;quot;&lt;br /&gt;
      and 1:&amp;quot;∀ x. P(x) ∧ ¬ Q(x) ⟶ R(x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;P(a) ⟶ Q(a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel: cuatro sencillos lemas, aunque no faciles de demostrar, y al final el principal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel: es el modus tollens(mt)&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d_aux1:&lt;br /&gt;
  assumes 0:&amp;quot;p ∧ ¬q ⟶ r&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬r⟶¬p ∨ q&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma modus_tollens:&lt;br /&gt;
  assumes 1:&amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
      and 2:&amp;quot;¬q&amp;quot;&lt;br /&gt;
    shows   &amp;quot;¬p&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;False&amp;quot; using 2 4 by (rule notE)}&lt;br /&gt;
  thus &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma modus_tollens2:&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 -&lt;br /&gt;
  {assume 2:&amp;quot;¬q&amp;quot;&lt;br /&gt;
  have 3:&amp;quot;¬p&amp;quot; using 1 2 by (rule modus_tollens)}&lt;br /&gt;
  thus 4:&amp;quot;¬q ⟶ ¬p&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma apli2_ej24_lpo_d_aux1_detalle:&lt;br /&gt;
  assumes 0:&amp;quot;p ∧ ¬q ⟶ r&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬r⟶¬p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1:&amp;quot;(p ∧ ¬q) ⟶ r&amp;quot; using 0 .&lt;br /&gt;
  have 2:&amp;quot;¬r ⟶ ¬(p ∧ ¬q)&amp;quot; using 1 by (rule modus_tollens2)&lt;br /&gt;
  thus 3:&amp;quot;¬r ⟶ ¬p ∨ q&amp;quot; using 2 by auto (* cada vez estan saliendo mas demostraciones. Aqui hay que demostrar ¬(p ∧ ¬q) = ¬p ∨ q *)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d_aux2:&lt;br /&gt;
  assumes 0:&amp;quot;¬(p ∧ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ ¬r&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel: este lema debe de tener un nombre...&amp;quot;&lt;br /&gt;
--&amp;quot;julrobrel: ya he encontrado como se llama: Hypothetical Syllogism (HS)&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d_aux3:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d_aux3_detalle:&lt;br /&gt;
  assumes 0:&amp;quot;(p ⟶ q) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1:&amp;quot;p⟶q&amp;quot; using 0 by (rule conjunct1)&lt;br /&gt;
  have 2:&amp;quot;q⟶r&amp;quot; using 0 by (rule conjunct2)&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 6:&amp;quot;p⟶r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d_aux4:&lt;br /&gt;
  assumes 0:&amp;quot;p⟶(¬p ∨ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d:&lt;br /&gt;
  assumes 0:&amp;quot;¬ (∃ x. P(x) ∧ R(x))&amp;quot;&lt;br /&gt;
      and 1:&amp;quot;∀ x. P(x) ∧ ¬ Q(x) ⟶ R(x)&amp;quot;&lt;br /&gt;
    shows   &amp;quot;P(a)⟶Q(a)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2:&amp;quot;∀ x. ¬(P(x) ∧ R(x))&amp;quot; using 0 by (rule no_ex)&lt;br /&gt;
  fix a&lt;br /&gt;
  have 3:&amp;quot;¬(P(a) ∧ R(a))&amp;quot; using 2 ..&lt;br /&gt;
  have 4:&amp;quot;P(a) ∧ ¬ Q(a) ⟶ R(a)&amp;quot; using 1 ..&lt;br /&gt;
  have 5:&amp;quot;¬R(a) ⟶ ¬ P(a) ∨ Q(a)&amp;quot; using 4 by (rule apli2_ej24_lpo_d_aux1)&lt;br /&gt;
  have 6:&amp;quot;P(a)⟶¬R(a)&amp;quot; using 3 by (rule apli2_ej24_lpo_d_aux2)&lt;br /&gt;
  have 7:&amp;quot;(P(a)⟶¬R(a)) ∧ (¬R(a) ⟶ ¬P(a) ∨ Q(a))&amp;quot; using 6 5 by (rule conjI)&lt;br /&gt;
  have 8:&amp;quot;P(a)⟶(¬P(a) ∨ Q(a))&amp;quot; using 7 by (rule apli2_ej24_lpo_d_aux3)&lt;br /&gt;
  have 9:&amp;quot;P(a)⟶Q(a)&amp;quot; using 8 by (rule apli2_ej24_lpo_d_aux4)&lt;br /&gt;
  show &amp;quot;P(a)⟶Q(a)&amp;quot; using 9 .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej_11_auto:&lt;br /&gt;
  assumes &amp;quot;∀x. P(x) ⟶ ¬R(x)&amp;quot;&lt;br /&gt;
  assumes &amp;quot;∀y. P(y) ∧ ¬Q(y) ⟶ R(y)&amp;quot;&lt;br /&gt;
  shows &amp;quot;P(a) ⟶ Q(a)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma ej_11:&lt;br /&gt;
  assumes &amp;quot;∀x. P(x) ⟶ ¬R(x)&amp;quot;&lt;br /&gt;
          &amp;quot;∀x. (P(x) ∧ ¬Q(x)) ⟶ R(x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;P(a) ⟶ Q(a)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume &amp;quot;P(a)&amp;quot;&lt;br /&gt;
  have &amp;quot;Q(a)&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬Q(a)&amp;quot;&lt;br /&gt;
    have 1:&amp;quot;P(a) ∧ ¬Q(a)&amp;quot; using `P(a)` `¬Q(a)` ..&lt;br /&gt;
    have &amp;quot;P(a) ∧ ¬Q(a) ⟶ R(a)&amp;quot; using assms(2) ..&lt;br /&gt;
    then have a:&amp;quot;R(a)&amp;quot; using 1 ..&lt;br /&gt;
    have &amp;quot;P(a) ⟶ ¬R(a)&amp;quot; using assms(1) ..&lt;br /&gt;
    then have &amp;quot;¬R(a)&amp;quot; using `P(a)` ..&lt;br /&gt;
    then show &amp;quot;False&amp;quot; using a ..&lt;br /&gt;
  qed}&lt;br /&gt;
  then show &amp;quot;P(a) ⟶ Q(a)&amp;quot; ..&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=617</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=617"/>
		<updated>2014-03-08T17:56:20Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R10: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R10&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 lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Los ejercicios son los de la asignatura de &amp;quot;Lógica informática&amp;quot; que se&lt;br /&gt;
  encuentran en http://goo.gl/yrPLn&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;
  · excluded_middle: ¬P ∨ 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;
&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ∨ q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 01:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
      and 2: &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
     {assume &amp;quot;p&amp;quot;  &lt;br /&gt;
        then show &amp;quot;p&amp;quot;.}&lt;br /&gt;
     next&lt;br /&gt;
     {assume &amp;quot;q&amp;quot;&lt;br /&gt;
        with 2 show &amp;quot;p&amp;quot; by (rule notE)}&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4 domlloriv&amp;quot;&lt;br /&gt;
lemma Ejercicio_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;
  using assms(1)&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  then show &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  with `¬q` show &amp;quot;p&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav, julrobrel&amp;quot;&lt;br /&gt;
 lemma ej1_juaruipav:&lt;br /&gt;
 assumes 1:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
     and 2: &amp;quot;¬q&amp;quot;&lt;br /&gt;
 shows &amp;quot;p&amp;quot;&lt;br /&gt;
 using 1&lt;br /&gt;
 proof&lt;br /&gt;
  assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
  then show &amp;quot;p&amp;quot; .&lt;br /&gt;
 next&lt;br /&gt;
  assume 4:&amp;quot;q&amp;quot;&lt;br /&gt;
  show &amp;quot;p&amp;quot; using 2 4 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei, julrobrel&amp;quot;&lt;br /&gt;
lemma ej1_auto:&lt;br /&gt;
  assumes 1:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  assumes 2:&amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej1:&lt;br /&gt;
  assumes 1:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  assumes 2:&amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
  note 1&lt;br /&gt;
  moreover&lt;br /&gt;
  {assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p&amp;quot; .}&lt;br /&gt;
  moreover&lt;br /&gt;
  {assume 3:&amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using 2 3 ..}&lt;br /&gt;
 ultimately show &amp;quot;p&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 lemma 02:&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;
   then have 1: &amp;quot;(¬p ∨ ¬q)&amp;quot; by (rule notnotD)&lt;br /&gt;
   show &amp;quot;False&amp;quot;&lt;br /&gt;
     using 1&lt;br /&gt;
     proof (rule disjE)&lt;br /&gt;
        {assume I: &amp;quot;¬p&amp;quot;&lt;br /&gt;
         have &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
         with I show &amp;quot;False&amp;quot;..}&lt;br /&gt;
        {assume II: &amp;quot;¬q&amp;quot;&lt;br /&gt;
          have &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      with II show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
     qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4 domlloriv&amp;quot;&lt;br /&gt;
lemma Ejercicio_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 &lt;br /&gt;
  assume 1: &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using assms ..&lt;br /&gt;
    with `¬p` show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using assms ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej2_juaruipav:&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 &lt;br /&gt;
  assume 2: &amp;quot;¬ p ∨ ¬ q&amp;quot;&lt;br /&gt;
  show &amp;quot;False&amp;quot;&lt;br /&gt;
  using 2&lt;br /&gt;
  proof&lt;br /&gt;
    assume 3: &amp;quot;¬q&amp;quot;&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 3 4 by (rule notE) &lt;br /&gt;
 next&lt;br /&gt;
    assume 5: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
    show &amp;quot;False&amp;quot; using 5 6 by (rule notE) &lt;br /&gt;
   qed&lt;br /&gt;
 qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei, julrobrel&amp;quot;&lt;br /&gt;
lemma ej2_auto:&lt;br /&gt;
  assumes 1:&amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  shows  &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej2:&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&lt;br /&gt;
  assume &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  moreover&lt;br /&gt;
  {assume 2:&amp;quot;¬p&amp;quot; &lt;br /&gt;
    have 3:&amp;quot;p&amp;quot; using 1 ..&lt;br /&gt;
    have &amp;quot;False&amp;quot; using 2 3 ..}&lt;br /&gt;
  moreover&lt;br /&gt;
  {assume 2:&amp;quot;¬q&amp;quot; &lt;br /&gt;
    have 3:&amp;quot;q&amp;quot; using 1 ..&lt;br /&gt;
    have &amp;quot;False&amp;quot; using 2 3 ..}&lt;br /&gt;
ultimately show &amp;quot;False&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&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&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus  &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 pabflomar domlloriv&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&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&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with  assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
  with `¬p` show &amp;quot;¬p ∧ ¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
  lemma 03:&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&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;
      then have &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
      then have &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
      with 1 show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
    qed &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;
      then have &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
      then have &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
      with 1 show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej3_juaruipav:&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 &lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p∨q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
  have 4: &amp;quot;False&amp;quot; using 1 3 by (rule notE)}&lt;br /&gt;
  then show &amp;quot;¬p&amp;quot;  ..&lt;br /&gt;
next&lt;br /&gt;
  {assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
  have 6: &amp;quot;p∨q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
  have 7: &amp;quot;False&amp;quot; using 1 6 by (rule notE)}&lt;br /&gt;
  then show &amp;quot;¬q&amp;quot;  ..&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei, julrobrel&amp;quot;&lt;br /&gt;
lemma ej3_auto:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej3:&lt;br /&gt;
  assumes 0:&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&amp;quot;&lt;br /&gt;
    then have 2:&amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    have &amp;quot;False&amp;quot; using 0 2 ..}&lt;br /&gt;
  then show &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
  next&lt;br /&gt;
 {assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have 2:&amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    have &amp;quot;False&amp;quot; using 0 2 ..}&lt;br /&gt;
  then show &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &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;
 show False&lt;br /&gt;
 using `p ∨ q`&lt;br /&gt;
 proof&lt;br /&gt;
   assume &amp;quot;p&amp;quot;&lt;br /&gt;
   have &amp;quot;¬p&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `p` ..&lt;br /&gt;
 next&lt;br /&gt;
   assume &amp;quot;q&amp;quot;&lt;br /&gt;
   have &amp;quot;¬q&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `q` ..&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
lemma Ejercicio_4:&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;
  show False&lt;br /&gt;
  using `p ∨ q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬p&amp;quot; using assms ..&lt;br /&gt;
    then show False using `p` ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q&amp;quot; using assms ..&lt;br /&gt;
    then show False using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
  lemma 04:&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;
      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 &amp;quot;¬¬(p ∨ q)&amp;quot;&lt;br /&gt;
       then have 4:&amp;quot;(p ∨ q)&amp;quot; by (rule notnotD)&lt;br /&gt;
       then show False&lt;br /&gt;
         proof (rule disjE)&lt;br /&gt;
           note 4&lt;br /&gt;
           {assume &amp;quot;p&amp;quot;&lt;br /&gt;
             with 2 show False ..}&lt;br /&gt;
           {assume &amp;quot;q&amp;quot;&lt;br /&gt;
             with 3 show False ..}&lt;br /&gt;
         qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej4_pfm:&lt;br /&gt;
  assumes 0:&amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 1:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 1&lt;br /&gt;
  proof &lt;br /&gt;
    assume 1:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬p&amp;quot; using 0 by (rule conjunct1)&lt;br /&gt;
    then show False using `p` ..&lt;br /&gt;
    next&lt;br /&gt;
    assume 1:&amp;quot;q&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬q&amp;quot; using 0 by (rule conjunct2)&lt;br /&gt;
    then show False using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav, julrobrel&amp;quot;&lt;br /&gt;
lemma ej4_juaruipav:&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 &lt;br /&gt;
  assume 2: &amp;quot; p ∨ q&amp;quot;&lt;br /&gt;
  show &amp;quot;False&amp;quot;&lt;br /&gt;
  using 2&lt;br /&gt;
  proof&lt;br /&gt;
     assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
     have 4:&amp;quot;¬p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
     show &amp;quot;False&amp;quot; using 4 3 by (rule notE) &lt;br /&gt;
  next &lt;br /&gt;
     assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
     have 6:&amp;quot;¬q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
     show &amp;quot;False&amp;quot; using 6 5 by (rule notE)&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej4_auto:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows  &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej4:&lt;br /&gt;
  assumes 0:&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 1:&amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬p&amp;quot; using 0 ..&lt;br /&gt;
    then have  &amp;quot;False&amp;quot; using 1 ..}&lt;br /&gt;
  moreover&lt;br /&gt;
  {assume 1:&amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q&amp;quot; using 0 ..&lt;br /&gt;
    then have  &amp;quot;False&amp;quot; using 1 ..}&lt;br /&gt;
ultimately show &amp;quot;False&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv, julrobrel&amp;quot;&lt;br /&gt;
lemma&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;
  show False&lt;br /&gt;
  using `¬p ∨ ¬q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬p`show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 05:&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 &amp;quot;¬¬(p ∧ q)&amp;quot;&lt;br /&gt;
       then have 4:&amp;quot;(p ∧ q)&amp;quot; by (rule notnotD)&lt;br /&gt;
       have p using 4 by (rule conjunct1)&lt;br /&gt;
       have q using 4 by (rule conjunct2)&lt;br /&gt;
       show False&lt;br /&gt;
       using 1&lt;br /&gt;
       proof (rule disjE)&lt;br /&gt;
          {assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
            then show False using `p` ..}&lt;br /&gt;
          {assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
            then show False using `q`..}&lt;br /&gt;
       qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
lemma ej5_pfm:&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;
  show False&lt;br /&gt;
  using `¬p ∨ ¬q`&lt;br /&gt;
  proof &lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using `p ∧ q` by (rule conjunct1)&lt;br /&gt;
    with `¬p` show False by (rule notE)&lt;br /&gt;
    next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using `p ∧ q` by (rule conjunct2)&lt;br /&gt;
    with `¬q` show False by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej5_juaruipav:&lt;br /&gt;
 assumes 1:&amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
 shows &amp;quot; ¬(p ∧ q)&amp;quot;&lt;br /&gt;
 using 1&lt;br /&gt;
 proof &lt;br /&gt;
    assume 2: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    show &amp;quot;¬ (p ∧ q)&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume 3: &amp;quot; p ∧ q&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;p&amp;quot; using 3 by (rule conjunct1)&lt;br /&gt;
      show &amp;quot;False &amp;quot; using 2 4 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
next&lt;br /&gt;
    assume 5: &amp;quot;¬q&amp;quot;&lt;br /&gt;
    show &amp;quot;¬ (p ∧ q)&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume 6: &amp;quot; p ∧ q&amp;quot;&lt;br /&gt;
      have 7:&amp;quot;q&amp;quot; using 6 by (rule conjunct2)&lt;br /&gt;
      show &amp;quot;False &amp;quot; using 5 7 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej5_auto:&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows  &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej5:&lt;br /&gt;
  assumes 0:&amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows  &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 1:&amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  have 2:&amp;quot;p&amp;quot; using 1 ..&lt;br /&gt;
  have 3:&amp;quot;q&amp;quot; using 1 ..&lt;br /&gt;
  show &amp;quot;False&amp;quot; using 0&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    then show &amp;quot;False&amp;quot; using 2 ..&lt;br /&gt;
  next &lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    then show &amp;quot;False&amp;quot; using 3 ..&lt;br /&gt;
  qed&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) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4 pabflomar juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma Ejercicio_6:&lt;br /&gt;
  shows &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;
  show &amp;quot;p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    with `(p ⟶ q) ⟶ p` have &amp;quot;¬(p ⟶ q)&amp;quot; by (rule mt)&lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with `¬p` have False ..&lt;br /&gt;
      then have &amp;quot;q&amp;quot; ..}&lt;br /&gt;
    then have &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ⟶ q)` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 06:&lt;br /&gt;
     &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;     &lt;br /&gt;
   proof&lt;br /&gt;
     assume 1: &amp;quot;((p ⟶ q) ⟶ p)&amp;quot;&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;
        with 1 have 2: &amp;quot;¬(p⟶q)&amp;quot; by (rule mt)&lt;br /&gt;
        then show &amp;quot;False&amp;quot;&lt;br /&gt;
        proof&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;
           then show &amp;quot;(p⟶q)&amp;quot; by (rule impI)&lt;br /&gt;
        qed&lt;br /&gt;
     qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei, julrobrel&amp;quot;&lt;br /&gt;
lemma ej6_auto:&amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej6:&amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 1:&amp;quot;(p ⟶ q)⟶p&amp;quot;&lt;br /&gt;
  show &amp;quot;p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume 2:&amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 4:&amp;quot;¬(p⟶q)&amp;quot; using 1 2 by (rule mt) &lt;br /&gt;
    {assume 5:&amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;False&amp;quot; using 2 5 ..&lt;br /&gt;
    then have &amp;quot;q&amp;quot; ..}&lt;br /&gt;
    then have 6:&amp;quot;p⟶q&amp;quot; ..&lt;br /&gt;
    show &amp;quot;False&amp;quot; using 4 6 .. &lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1 pabflomar&amp;quot;&lt;br /&gt;
lemma Ejercicio_7:&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;
  { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    with assms have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
    then have False using `p` ..}&lt;br /&gt;
  then show &amp;quot;q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
  lemma 07:&lt;br /&gt;
    assumes &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 1: &amp;quot;p&amp;quot;&lt;br /&gt;
          {assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
            with assms have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
            then have &amp;quot;False&amp;quot; using 1 ..}&lt;br /&gt;
     then have &amp;quot;¬¬q&amp;quot; by (rule notI)&lt;br /&gt;
     then show &amp;quot;q&amp;quot; by (rule notnotD)}&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&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;
  then have &amp;quot;¬¬p&amp;quot; by (rule notnotI)&lt;br /&gt;
  with assms(1) have &amp;quot;¬¬q&amp;quot; by (rule mt)&lt;br /&gt;
  then show &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav, julrobrel, domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej7_juaruipav:&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 &lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;¬¬p&amp;quot; using 2 by (rule notnotI)&lt;br /&gt;
  have 4: &amp;quot;¬¬q&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
  show &amp;quot;q&amp;quot; using 4 by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej7_auto:&lt;br /&gt;
   assumes &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
   shows &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej7:&lt;br /&gt;
   assumes 0:&amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
   shows &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 1:&amp;quot;p&amp;quot;&lt;br /&gt;
  then have 2:&amp;quot;¬¬p&amp;quot; by (rule notnotI)&lt;br /&gt;
  have &amp;quot;¬¬q&amp;quot; using 0 2 by (rule mt)&lt;br /&gt;
  then have &amp;quot;q&amp;quot; by (rule notnotD)}&lt;br /&gt;
  then show &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_8:&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 ∨ p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..}&lt;br /&gt;
  { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q ∨ q&amp;quot; ..&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      then have &amp;quot;p ∨ q&amp;quot; ..}&lt;br /&gt;
    { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
      with `¬p` have &amp;quot;¬p ∧ ¬q&amp;quot; ..&lt;br /&gt;
      with assms have False ..&lt;br /&gt;
      then have &amp;quot;p ∨ q&amp;quot; ..}&lt;br /&gt;
    with `¬q ∨ q` have &amp;quot;p ∨ q&amp;quot; using `q ⟹ p ∨ q` ..}&lt;br /&gt;
  with `¬p ∨ p` show &amp;quot;p ∨ q&amp;quot; using `p ⟹ p ∨ q` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla pabflomar (No se usar otro lema sin usar el simp) maresccas4 (rule 03, en lugar de simp)&amp;quot;&lt;br /&gt;
{* Marco lleva razón. GRACIAS!!! *}&lt;br /&gt;
&lt;br /&gt;
  lemma 08:&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;
    then have &amp;quot;¬p ∧ ¬q&amp;quot; by (rule 03)&lt;br /&gt;
    with assms show &amp;quot;False&amp;quot; ..&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei, julrobrel&amp;quot;&lt;br /&gt;
lemma ej8_auto:&lt;br /&gt;
   assumes &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
   shows &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej8:&lt;br /&gt;
   assumes 0:&amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
   shows &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 1:&amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  have 2:&amp;quot;¬p ∧ ¬q&amp;quot; using 1 by (rule ej3)&lt;br /&gt;
  have &amp;quot;False&amp;quot; using 0 2 ..}&lt;br /&gt;
  then show &amp;quot;p ∨ q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1, maresccas4 domlloriv&amp;quot;&lt;br /&gt;
lemma Ejercicio_9:&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&amp;quot;&lt;br /&gt;
    then have &amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then show &amp;quot;p&amp;quot; by (rule ccontr)&lt;br /&gt;
  { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    then have &amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then show &amp;quot;q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar, marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej9_pfm:&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 1: &amp;quot;¬¬p ∧ ¬¬q&amp;quot; using assms by (rule ej3_pfm)&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;
  show &amp;quot;p&amp;quot; using 2 by (rule notnotD)&lt;br /&gt;
  show &amp;quot;q&amp;quot; using 3 by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej9_juaruipav:&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 &lt;br /&gt;
    have 2:&amp;quot;(¬¬p)∧(¬¬q)&amp;quot; using 1 by (rule ej3_juaruipav)&lt;br /&gt;
    have &amp;quot;(¬¬p)&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
    then show &amp;quot;p&amp;quot; by (rule notnotD)   &lt;br /&gt;
    next&lt;br /&gt;
    have 3:&amp;quot;(¬¬p)∧(¬¬q)&amp;quot; using 1 by (rule ej3_juaruipav)&lt;br /&gt;
    have &amp;quot;(¬¬q)&amp;quot; using 3 by (rule conjunct2)&lt;br /&gt;
    then show &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei, julrobrel&amp;quot;&lt;br /&gt;
lemma ej9_auto:&lt;br /&gt;
   assumes &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
   shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej9:&lt;br /&gt;
   assumes 0:&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&amp;quot;&lt;br /&gt;
   then have 1:&amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
     have &amp;quot;False&amp;quot; using 0 1 ..}&lt;br /&gt;
     then show &amp;quot;p&amp;quot; by (rule ccontr)&lt;br /&gt;
   next&lt;br /&gt;
   {assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
     then have 1:&amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
     have &amp;quot;False&amp;quot; using 0 1 ..}&lt;br /&gt;
   then show &amp;quot;q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;pabflomar, julrobrel, juaruipav, domlloriv&amp;quot;&lt;br /&gt;
lemma ej10_pfm:&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 1:&amp;quot;¬ (¬ p ∨ ¬ q)&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;p ∧ q&amp;quot; using 1 by (rule ej9_pfm)&lt;br /&gt;
    with assms show False by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_10:&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 ∨ p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q ∨ q&amp;quot; ..&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      with `p` have &amp;quot;p ∧ q&amp;quot; ..&lt;br /&gt;
      with assms have False ..&lt;br /&gt;
      then have &amp;quot;¬p ∨ ¬q&amp;quot; ..}&lt;br /&gt;
    { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
      then have &amp;quot;¬p ∨ ¬q&amp;quot; ..}&lt;br /&gt;
    with `¬q ∨ q` have &amp;quot;¬p ∨ ¬q&amp;quot; using `q ⟹ ¬ p ∨ ¬ q` ..}&lt;br /&gt;
  { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    then have &amp;quot;¬p ∨ ¬q&amp;quot; ..}&lt;br /&gt;
  with `¬p ∨ p` show &amp;quot;¬p ∨ ¬q&amp;quot; using ` p ⟹ ¬ p ∨ ¬ q` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma a10:&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&amp;quot;&lt;br /&gt;
    then have &amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
    with `¬(¬p ∨ ¬q)` have False ..}&lt;br /&gt;
  hence &amp;quot;¬¬p&amp;quot; ..&lt;br /&gt;
  thus &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
  { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    then have &amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
    with `¬(¬p ∨ ¬q)` have False ..}&lt;br /&gt;
  hence &amp;quot;¬¬q&amp;quot; ..&lt;br /&gt;
  thus &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma 10:&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;
  then have &amp;quot;p ∧ q&amp;quot; by (rule a10)&lt;br /&gt;
  with assms(1) show False ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* -----&lt;br /&gt;
  Ejercicio 9 haciendo uso del Ejercicio 10&lt;br /&gt;
 ----------*}&lt;br /&gt;
lemma &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;
  then have &amp;quot;¬p ∨ ¬q&amp;quot; by (rule 10)&lt;br /&gt;
  with assms(1) show False ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 10:&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;
    then have 1:&amp;quot;p ∧ q&amp;quot; by (rule 09)&lt;br /&gt;
    with assms show &amp;quot;False&amp;quot; ..&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej10_auto:&lt;br /&gt;
   assumes &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
   shows &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej10:&lt;br /&gt;
   assumes 0:&amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
   shows &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 1:&amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
  have 2:&amp;quot;p ∧ q&amp;quot; using 1 by (rule ej9)&lt;br /&gt;
  have 3:&amp;quot;False&amp;quot; using 0 2 .. }&lt;br /&gt;
  then show &amp;quot;¬p ∨ ¬q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_11:&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬(p ⟶ q) ∨ (p ⟶ q)&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
    then have &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..}&lt;br /&gt;
  { assume &amp;quot;¬(p ⟶ q)&amp;quot;&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      { assume &amp;quot;p&amp;quot;&lt;br /&gt;
        have &amp;quot;q&amp;quot; using `q` .}&lt;br /&gt;
      then have &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
      with `¬(p ⟶ q)` have False ..&lt;br /&gt;
      then have &amp;quot;p&amp;quot; ..}&lt;br /&gt;
    then have &amp;quot;q ⟶ p&amp;quot; ..&lt;br /&gt;
    then have &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..}&lt;br /&gt;
  with `¬(p ⟶ q) ∨ (p ⟶ q)` show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; using `p ⟶ q ⟹ (p ⟶ q) ∨ (q ⟶ p)` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1:&amp;quot;¬(p ⟶ q) ∨ (p ⟶ q)&amp;quot; ..&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..&lt;br /&gt;
  next&lt;br /&gt;
    {  assume &amp;quot;¬(p ⟶ q)&amp;quot;&lt;br /&gt;
       {  assume &amp;quot;q&amp;quot;&lt;br /&gt;
          {  assume &amp;quot;p&amp;quot;&lt;br /&gt;
             have &amp;quot;q&amp;quot; using `q` .}&lt;br /&gt;
          then have &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
          with `¬(p ⟶ q)` have False ..&lt;br /&gt;
          then have &amp;quot;p&amp;quot; .. }&lt;br /&gt;
       then have &amp;quot;q ⟶ p&amp;quot; ..&lt;br /&gt;
       then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..}&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar, julrobrel&amp;quot;&lt;br /&gt;
{* Sólo cambia respecto de marco en el cambio del . por by this *}&lt;br /&gt;
lemma&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1:&amp;quot;¬(p ⟶ q) ∨ (p ⟶ q)&amp;quot; ..&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..&lt;br /&gt;
    next&lt;br /&gt;
    {  assume &amp;quot;¬(p ⟶ q)&amp;quot;&lt;br /&gt;
       {  assume &amp;quot;q&amp;quot;&lt;br /&gt;
          {  assume &amp;quot;p&amp;quot;&lt;br /&gt;
             have &amp;quot;q&amp;quot; using `q` by this&lt;br /&gt;
          }&lt;br /&gt;
          then have &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
          with `¬(p ⟶ q)` have False ..&lt;br /&gt;
          then have &amp;quot;p&amp;quot; .. &lt;br /&gt;
    }&lt;br /&gt;
    then have &amp;quot;q ⟶ p&amp;quot; ..&lt;br /&gt;
    then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..}&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei domlloriv juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej11_auto:&amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
 lemma ej11:&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1:&amp;quot;¬(p ⟶ q) ∨ (p ⟶ q) &amp;quot; by (rule excluded_middle)&lt;br /&gt;
  then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    note 1&lt;br /&gt;
    moreover&lt;br /&gt;
    {assume &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
    then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..}&lt;br /&gt;
    moreover&lt;br /&gt;
    {assume 2:&amp;quot;¬(p ⟶ q)&amp;quot;&lt;br /&gt;
      {assume 3:&amp;quot;q&amp;quot;&lt;br /&gt;
        {assume &amp;quot;p&amp;quot;&lt;br /&gt;
          have &amp;quot;q&amp;quot; using 3 .}&lt;br /&gt;
        then have 4:&amp;quot;p⟶q&amp;quot; ..&lt;br /&gt;
        have &amp;quot;False&amp;quot; using 2 4 ..&lt;br /&gt;
        then have &amp;quot;p&amp;quot; ..}&lt;br /&gt;
      then have &amp;quot;q⟶p&amp;quot; ..&lt;br /&gt;
      then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..}&lt;br /&gt;
    qed       &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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=616</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=616"/>
		<updated>2014-03-08T15:15:11Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R9: Deducción natural proposicional (1) *}&lt;br /&gt;
&lt;br /&gt;
theory R9&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 lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural necesarias son las&lt;br /&gt;
  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;
  --------------------------------------------------------------------- &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;
&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 ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel, pabflomar juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma ej1_auto:&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;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej1:&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 &amp;quot;r&amp;quot; using 4 2 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;q⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_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;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with assms have &amp;quot;q ⟶ r&amp;quot;  ..&lt;br /&gt;
      then have &amp;quot;r&amp;quot; using `q` ..  }&lt;br /&gt;
    then have &amp;quot;p ⟶ r&amp;quot; ..  }&lt;br /&gt;
    then show &amp;quot;q ⟶ (p ⟶ r)&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &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; ..&lt;br /&gt;
     thus &amp;quot;r&amp;quot; using `q`..&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 01:&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 1: &amp;quot;q&amp;quot;&lt;br /&gt;
      {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
        have &amp;quot;q⟶r&amp;quot; using assms(1) 2  by (rule mp)&lt;br /&gt;
        then have &amp;quot;r&amp;quot; using 1 by (rule mp)}&lt;br /&gt;
      then have &amp;quot;p⟶r&amp;quot; ..}&lt;br /&gt;
    then show &amp;quot;q ⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
    qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel, pabflomar, domlloriv&amp;quot;&lt;br /&gt;
lemma ej2_auto:&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 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej2:&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;
 {assume 2:&amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
    {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
      have 5:&amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p ⟶ q)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&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` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using assms `p` ..&lt;br /&gt;
    then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &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;
    have &amp;quot;q&amp;quot; using `p ⟶ q` `p` ..&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using `p ⟶ (q ⟶ r)` `p` .. &lt;br /&gt;
    show &amp;quot;r&amp;quot; using `q ⟶ r` `q`  ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 02:&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 1: &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
      {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
        have &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
        have &amp;quot;q⟶r&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
         then have &amp;quot;r&amp;quot; using `q` by (rule mp)}&lt;br /&gt;
      then have &amp;quot;p⟶r&amp;quot;..}&lt;br /&gt;
    then show &amp;quot;(p⟶q) ⟶ (p⟶r)&amp;quot; ..&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej2-jua: &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;
  assume 2: &amp;quot; p ⟶ q&amp;quot;&lt;br /&gt;
  show &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 2 3 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      show &amp;quot;r&amp;quot; using 5 4 by (rule mp)&lt;br /&gt;
    qed&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;
-- &amp;quot;irealetei, domlloriv, pabflomar&amp;quot;&lt;br /&gt;
lemma ej3_auto:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej3:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
 { assume 1:&amp;quot;(p⟶(q⟶r))&amp;quot;&lt;br /&gt;
     {assume 3:&amp;quot;p⟶q&amp;quot;&lt;br /&gt;
       {assume 4:&amp;quot;p&amp;quot;&lt;br /&gt;
         have 5: &amp;quot;q⟶r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
         have 6:&amp;quot;q&amp;quot; using 3 4 by (rule mp)&lt;br /&gt;
         have &amp;quot;r&amp;quot; using 5 6 by (rule mp)}&lt;br /&gt;
       then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
     then have &amp;quot;(p⟶q)⟶p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p⟶(q⟶r))⟶((p⟶q)⟶p⟶r)&amp;quot; by (rule impI)  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1, maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&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 &amp;quot;p&amp;quot;&lt;br /&gt;
      with  `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
      have &amp;quot;q ⟶ r&amp;quot; using `p ⟶ q ⟶ r` `p` ..&lt;br /&gt;
      then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma ejer_3_auto:&lt;br /&gt;
  shows &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
thm ej2_auto&lt;br /&gt;
&lt;br /&gt;
lemma ejer_3_detalle:&lt;br /&gt;
  shows &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  show &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot; using ej2_auto by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
 lemma 03:&lt;br /&gt;
   &amp;quot;(p ⟶ (q ⟶ r))⟶((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
 proof-&lt;br /&gt;
   {assume 1: &amp;quot;(p ⟶ (q ⟶ r))&amp;quot;&lt;br /&gt;
    {assume 2: &amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
      {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
        have &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
        have &amp;quot;q ⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
        then have &amp;quot;r&amp;quot; using `q` by (rule mp)}&lt;br /&gt;
      then have&amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
    then have &amp;quot;((p ⟶ q) ⟶ (p ⟶ r))&amp;quot; by (rule impI)}&lt;br /&gt;
   then show &amp;quot;(p ⟶ (q ⟶ r))⟶((p ⟶ q) ⟶ (p ⟶ r))&amp;quot; by (rule impI)&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej3-jua:  &amp;quot; (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof&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&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&lt;br /&gt;
           assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
           have 4:&amp;quot;q&amp;quot; using 2 3 ..&lt;br /&gt;
           have 5: &amp;quot;q⟶r&amp;quot; using 1 3  by (rule mp)&lt;br /&gt;
           show &amp;quot;r&amp;quot; using 5 4 ..&lt;br /&gt;
       qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel, domlloriv&amp;quot;&lt;br /&gt;
lemma ej4_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&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; ..&lt;br /&gt;
    show &amp;quot;r&amp;quot; using `(p ⟶ q) ⟶ r` `p ⟶ q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav irealetei&amp;quot;&lt;br /&gt;
lemma ej4-jua: &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;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q⟶r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;p⟶q&amp;quot; using 3 by (rule impI)&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;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
    lemma 04:&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 1: &amp;quot;p&amp;quot;&lt;br /&gt;
      {assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
        then have &amp;quot;r&amp;quot; using 1 2 assms by simp}&lt;br /&gt;
      then have &amp;quot;q⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
    then show &amp;quot;p⟶ (q ⟶ r)&amp;quot; by (rule impI)&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel, domlloriv&amp;quot;&lt;br /&gt;
lemma ej5_auto:&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 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej5:&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;
  {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;
    have &amp;quot;q ∧ r&amp;quot; using 5 6 by (rule conjI)}&lt;br /&gt;
  then show &amp;quot;p ⟶ q ∧ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1, maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_5:&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 &amp;quot;p&amp;quot;&lt;br /&gt;
  have &amp;quot;(p ⟶ q)&amp;quot; using assms ..&lt;br /&gt;
  then have &amp;quot;q&amp;quot; using `p` ..&lt;br /&gt;
  have &amp;quot;(p ⟶ r)&amp;quot; using assms ..&lt;br /&gt;
  then have &amp;quot;r&amp;quot; using `p` ..&lt;br /&gt;
  with `q` show &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel, pabflomar, marescpla(Pero usando assms en vez de la etiqueta 0)&amp;quot;&lt;br /&gt;
lemma ejer_5_detalle:&lt;br /&gt;
  assumes 0:&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 1:&amp;quot;p⟶q&amp;quot; using 0 by (rule conjunct1)&lt;br /&gt;
  have 2:&amp;quot;p⟶r&amp;quot; using 0 by (rule conjunct2)&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 3 by (rule mp)&lt;br /&gt;
     have 6:&amp;quot;q ∧ r&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
  }then show &amp;quot;p ⟶ q ∧ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej5-jua:&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;
  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;
&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;
-- &amp;quot;irealetei,julrobrel&amp;quot;&lt;br /&gt;
lemma ej6_auto:&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 by auto&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
{* Me he peleado un buen rato intentando asumiendo solo una vez p. Al mirar el wiki y tal vi esta versión que hace lo que yo quería hacer usando sólo una ves una asumción. ¿Cómo se hace?&lt;br /&gt;
*}&lt;br /&gt;
lemma ej6:&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;
  {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;
    have &amp;quot;q&amp;quot; using 3 by (rule conjunct1)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶q&amp;quot;  by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;q∧r&amp;quot; using 1 5 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 6 by (rule conjunct2)}&lt;br /&gt;
    then have 5:&amp;quot;p⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶q) ∧ (p ⟶r)&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1, maresccas4, domlloriv&amp;quot;&lt;br /&gt;
lemma Ejercicio_6:&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&amp;quot;&lt;br /&gt;
  with assms have &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;q&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
  {assume &amp;quot;p&amp;quot;&lt;br /&gt;
  with assms have &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;r&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ⟶ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej6-jua: &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;
  {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;
   have  &amp;quot;q&amp;quot; using 3 by (rule conjunct1)}&lt;br /&gt;
   then show &amp;quot;p⟶q&amp;quot; ..&lt;br /&gt;
  next&lt;br /&gt;
  {assume 5: &amp;quot;p&amp;quot;&lt;br /&gt;
   have 6:&amp;quot;q∧r&amp;quot; using 1 5 by (rule mp)&lt;br /&gt;
   have  &amp;quot;r&amp;quot; using 6 by (rule conjunct2)}&lt;br /&gt;
   then show &amp;quot;p⟶r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
   lemma 06:&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&amp;quot;&lt;br /&gt;
   with assms have &amp;quot;q ∧ r&amp;quot; by (rule mp)&lt;br /&gt;
   then have &amp;quot;q&amp;quot; by (rule conjunct1)}&lt;br /&gt;
   then have C: &amp;quot;p⟶q&amp;quot; by (rule impI)&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;
   have &amp;quot;r&amp;quot; using `q ∧ r` by (rule conjunct2)}&lt;br /&gt;
   then have &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
   with C show &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot; by (rule conjI)&lt;br /&gt;
 qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel, pabflomar, domlloriv&amp;quot;&lt;br /&gt;
lemma ej7_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej7:&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;p&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;&lt;br /&gt;
    have 5:&amp;quot;q&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 3 5 by (rule mp)}&lt;br /&gt;
  then show &amp;quot;(p⟶q)⟶r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1, maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_7:&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;
  have &amp;quot;p&amp;quot; using assms  ..&lt;br /&gt;
  with `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
  have &amp;quot;q ⟶ r&amp;quot; using assms ..&lt;br /&gt;
  then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej7:&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;
  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 &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   lemma 07:&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 H: &amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
   have &amp;quot;p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
   with H have &amp;quot;q&amp;quot;  by (rule mp)&lt;br /&gt;
   have &amp;quot;q⟶r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
   then have &amp;quot;r&amp;quot; using `q` by (rule mp)}&lt;br /&gt;
 then show &amp;quot;(p ⟶ q) ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
 qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
section {* Disyunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1, julrobrel&amp;quot;&lt;br /&gt;
lemma ej8_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej8:&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 -&lt;br /&gt;
  {assume 2:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    moreover&lt;br /&gt;
       {assume &amp;quot;p&amp;quot;&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI1)}&lt;br /&gt;
    moreover&lt;br /&gt;
      {assume 3:&amp;quot;q&amp;quot;&lt;br /&gt;
        have &amp;quot;r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI2)}&lt;br /&gt;
    ultimately have &amp;quot;p ∨ r&amp;quot;  by (rule disjE)}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel: no estoy seguro de que esto esté bien&amp;quot;&lt;br /&gt;
lemma ejer_8_detallado2:&lt;br /&gt;
   assumes 0:&amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
   shows   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof (cases)&lt;br /&gt;
  assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
  show   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; using 0 by simp&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  show   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; using 0 by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &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;
  thus &amp;quot;p ∨ r&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      thus &amp;quot;p ∨ r&amp;quot; .. }&lt;br /&gt;
  next&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      have &amp;quot;r&amp;quot; using assms `q` ..&lt;br /&gt;
      thus &amp;quot;p ∨ r&amp;quot; .. }&lt;br /&gt;
  qed&lt;br /&gt;
qed &lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav: Si quito el moreover no pasa nada.. ¿y eso? tengo dos objetivos en proof&amp;quot;&lt;br /&gt;
lemma ej8: &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 &lt;br /&gt;
  assume 2:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  thus &amp;quot; p ∨ r&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    then show  &amp;quot;p ∨ r&amp;quot; ..} &lt;br /&gt;
moreover&lt;br /&gt;
   { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 1 4  by (rule mp)&lt;br /&gt;
    then show &amp;quot;p ∨ r&amp;quot; ..}&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma 08:&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 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    {assume &amp;quot;p&amp;quot;&lt;br /&gt;
      then have &amp;quot;p ∨ r&amp;quot; by (rule disjI1)}&lt;br /&gt;
    then have 2: &amp;quot;p⟹p ∨ r&amp;quot; by simp&lt;br /&gt;
    {assume q&lt;br /&gt;
      with assms have &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
      then have &amp;quot;p ∨ r&amp;quot; by (rule disjI2)}&lt;br /&gt;
    then have 3: &amp;quot;q⟹p ∨ r&amp;quot; by simp&lt;br /&gt;
    have &amp;quot;p ∨ q ⟹ p ∨ r&amp;quot; using 1 2 3 by (rule disjE)}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; by (rule impI)&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1, julrobrel, domlloriv&amp;quot;&lt;br /&gt;
lemma ej9_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej9:&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 -&lt;br /&gt;
  {assume  &amp;quot;p ∨ q &amp;quot;&lt;br /&gt;
  moreover &lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 3:&amp;quot;(p ⟶ r)&amp;quot; using 1 by (rule conjunct1) &lt;br /&gt;
      have &amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
  moreover&lt;br /&gt;
    {assume 4:&amp;quot;q&amp;quot;&lt;br /&gt;
      have 5:&amp;quot;(q ⟶ r)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
  ultimately have  &amp;quot;r&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejer_9_detalle:&lt;br /&gt;
   assumes 0:&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 1:&amp;quot;p∨q&amp;quot;&lt;br /&gt;
    moreover&lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have  3:&amp;quot;p⟶r&amp;quot; using 0 by (rule conjunct1)&lt;br /&gt;
      have  4:&amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
    moreover&lt;br /&gt;
    {assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
       have 6:&amp;quot;q⟶r&amp;quot; using 0 by (rule conjunct2)&lt;br /&gt;
       have 7:&amp;quot;r&amp;quot; using 6 5 by (rule mp)}&lt;br /&gt;
    ultimately have 8:&amp;quot;r&amp;quot; by (rule disjE)}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&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;
  thus &amp;quot;r&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      have &amp;quot;p ⟶ r&amp;quot; using assms ..&lt;br /&gt;
      thus &amp;quot;r&amp;quot; using `p` ..}&lt;br /&gt;
  next&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      have &amp;quot;q ⟶ r&amp;quot; using assms ..&lt;br /&gt;
      thus &amp;quot;r&amp;quot; using `q`..}&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej9: &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&lt;br /&gt;
  assume 2:  &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  thus &amp;quot;r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 4: &amp;quot;p⟶r&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
     show &amp;quot;r&amp;quot; using 4 3 by (rule mp)}&lt;br /&gt;
  moreover&lt;br /&gt;
     {assume 5: &amp;quot;q&amp;quot;&lt;br /&gt;
     have 6: &amp;quot;q⟶r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
     show &amp;quot;r&amp;quot; using 6 5 by (rule mp)}&lt;br /&gt;
  qed&lt;br /&gt;
qed  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
  lemma 09:&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;
  have &amp;quot;p⟶r&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;
  {assume 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    {assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with `p⟶r` have &amp;quot;r&amp;quot; by (rule mp)}&lt;br /&gt;
  then have 2: &amp;quot;p⟹r&amp;quot; by simp&lt;br /&gt;
    {assume &amp;quot;q&amp;quot;&lt;br /&gt;
      with `q⟶r` have &amp;quot;r&amp;quot; by (rule mp)}&lt;br /&gt;
  then have 3: &amp;quot;q⟹r&amp;quot; by simp&lt;br /&gt;
  have &amp;quot;p ∨ q ⟹ r&amp;quot; using 1 2 3 by (rule disjE)}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1, julrobrel, domlloriv&amp;quot;&lt;br /&gt;
lemma ej10_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej10:&lt;br /&gt;
  assumes  1:&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;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:&amp;quot;p∨q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶r&amp;quot; by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;p∨q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    have 7:&amp;quot;r&amp;quot; using 1 6 by (rule mp)}&lt;br /&gt;
    then have 8:&amp;quot;q⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶r)∧(q⟶r)&amp;quot; using 4 8 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&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;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;p ∨ q&amp;quot; using `p` ..&lt;br /&gt;
    have &amp;quot;r&amp;quot; using assms `p ∨ q` ..}&lt;br /&gt;
  then show &amp;quot;p ⟶ r&amp;quot; ..&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;p ∨ q&amp;quot; using `q` ..&lt;br /&gt;
    have &amp;quot;r&amp;quot; using assms `p ∨ q` ..}&lt;br /&gt;
  thus &amp;quot;q ⟶ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav, pabflomar&amp;quot;&lt;br /&gt;
lemma ej10:&lt;br /&gt;
assumes 1:&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;
  {assume 2 :&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:  &amp;quot;p ∨ q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
    have 4: &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    then show &amp;quot;p⟶r&amp;quot; .. &lt;br /&gt;
moreover&lt;br /&gt;
  {assume 5 :&amp;quot;q&amp;quot;&lt;br /&gt;
    have 6:  &amp;quot;p ∨ q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    have 7: &amp;quot;r&amp;quot; using 1 6 by (rule mp)}&lt;br /&gt;
    then show &amp;quot;q⟶r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
  lemma 10:&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;
  {assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;r&amp;quot; using assms by simp}&lt;br /&gt;
  then have 1: &amp;quot;p⟶r&amp;quot; by (rule impI)&lt;br /&gt;
  {assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;r&amp;quot; using assms by simp}&lt;br /&gt;
  then have 2: &amp;quot;q⟶r&amp;quot; by (rule impI)&lt;br /&gt;
  show &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot; using 1 2 by (rule conjI)&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_8&amp;diff=615</id>
		<title>Relación 8</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_8&amp;diff=615"/>
		<updated>2014-03-08T15:12:55Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R8: Árboles binarios completos *}&lt;br /&gt;
&lt;br /&gt;
theory R8_Arboles_binarios_completos&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 no tienen información ni en los nodos y ni en las&lt;br /&gt;
  hojas. Por ejemplo, el árbol&lt;br /&gt;
          ·&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       ·     ·&lt;br /&gt;
      / \   / \&lt;br /&gt;
     ·   · ·   · &lt;br /&gt;
  se representa por &amp;quot;N (N H H) (N H H)&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype arbol = H | N arbol arbol&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N (N H H) (N H H)&amp;quot;&lt;br /&gt;
value &amp;quot;(N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;Este tambien es un arbol segun la definicion del tipo. Sin embargo no es completo.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (hojas a) es el número de hojas del árbol a. Por ejemplo,&lt;br /&gt;
     hojas (N (N H H) (N H H)) = 4&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 irealetei juaruipav domlloriv marescpla pabflomar&amp;quot;&lt;br /&gt;
fun hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;hojas H = Suc 0&amp;quot;&lt;br /&gt;
| &amp;quot;hojas (N i d) = hojas i + hojas d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel maresccas4 jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
fun hojas_jrr :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
   &amp;quot;hojas_jrr H = 1&amp;quot;                     --&amp;quot;julrobrel: minima diferencia con la anterior&amp;quot;&lt;br /&gt;
  |&amp;quot;hojas_jrr (N i d) = (hojas_jrr i) + (hojas_jrr d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;hojas_jrr (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;hojas (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 4&amp;quot;&lt;br /&gt;
value &amp;quot;hojas (N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;= 5&amp;quot; --&amp;quot;julrobrel: la funcion tambien funciona sobre arboles binarios no completos&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (profundidad a) es la profundidad del árbol a. Por ejemplo,&lt;br /&gt;
     profundidad (N (N H H) (N H H)) = 2&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
fun profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad H = 0&amp;quot;&lt;br /&gt;
| &amp;quot;profundidad (N i d) = (if profundidad i &amp;gt; profundidad d then Suc (profundidad i) else Suc (profundidad d))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel pabflomar&amp;quot;&lt;br /&gt;
fun maximo :: &amp;quot;nat =&amp;gt; nat =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;maximo a b = (if a &amp;lt; b then b else a)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
fun profundidad_pfm :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad_pfm H = 0&amp;quot;&lt;br /&gt;
| &amp;quot;profundidad_pfm (N i d) = 1 + maximo (profundidad_pfm i) (profundidad_pfm d)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;maximo 3 4&amp;quot; -- &amp;quot;=4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;&lt;br /&gt;
fun profundidad_jrr :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad_jrr H = 0&amp;quot;&lt;br /&gt;
 |&amp;quot;profundidad_jrr (N i d) = Suc (maximo (profundidad_jrr i) (profundidad_jrr d))&amp;quot; --&amp;quot;julrobrel: En realidad al ser arboles completos no deberia hacer falta el maximo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
fun profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad H = 0&amp;quot;&lt;br /&gt;
| &amp;quot;profundidad (N i d) = 1 + (if profundidad i &amp;gt; profundidad d then (profundidad i) else (profundidad d) )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;profundidad (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 2&amp;quot;&lt;br /&gt;
value &amp;quot;profundidad (N (N H H) (N (N H H) H))&amp;quot; -- &amp;quot;= 3&amp;quot; --&amp;quot;julrobrel: profundidad tambien funciona sobre arboles binarios no completos&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;profundidad_jrr (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 2&amp;quot;&lt;br /&gt;
value &amp;quot;profundidad_jrr (N (N H H) (N (N H H) H))&amp;quot; -- &amp;quot;= 3&amp;quot; --&amp;quot;julrobrel: profundidad tambien funciona sobre arboles binarios no completos&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4 domlloriv marescpla&amp;quot;&lt;br /&gt;
--&amp;quot;marescpla: yo he puesto un Suc en vez de un 1+&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun profundidad3 :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad3 (H) = 0&amp;quot;&lt;br /&gt;
| &amp;quot;profundidad3 (N ai ad) = 1 + (if (profundidad3 ai &amp;gt; profundidad3 ad) then profundidad3 ai else profundidad3 ad)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;profundidad3 (N (N H H) (N H (N H (N H H))))&amp;quot; -- &amp;quot;= 4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     abc :: &amp;quot;nat ⇒ arbol&amp;quot; &lt;br /&gt;
  tal que (abc n) es el árbol binario completo de profundidad n. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     abc 3 = N (N (N H H) (N H H)) (N (N H H) (N H H))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1, julrobrel irealetei juaruipav maresccas4 domlloriv marescpla pabflomar jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
fun abc :: &amp;quot;nat ⇒ arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;abc 0 = H&amp;quot;&lt;br /&gt;
| &amp;quot;abc (Suc n) = (N (abc n) (abc n))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;abc 3&amp;quot; -- &amp;quot;= N (N (N H H) (N H H)) (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un árbol binario a es completo respecto de la medida f si&lt;br /&gt;
  a es una hoja o bien a es de la forma (N i d) y se cumple que tanto i&lt;br /&gt;
  como d son árboles binarios completos respecto de f y, además, &lt;br /&gt;
  f(i) = f(r).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&lt;br /&gt;
  tal que (es_abc f a) se verifica si a es un árbol binario completo&lt;br /&gt;
  respecto de f.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 irealetei juaruipav maresccas4 domlloriv marescpla pabflomar jaisalmem zoiruicha&amp;quot;&lt;br /&gt;
fun es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&amp;quot; where&lt;br /&gt;
  &amp;quot;es_abc f H = True&amp;quot;&lt;br /&gt;
| &amp;quot;es_abc f (N i d) = ((es_abc f i) ∧ (es_abc f d) ∧ (f i = f d))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;es_abc profundidad ( N (N (N H H) (N H H)) (N (N H H) (N H H)))&amp;quot; -- &amp;quot;true&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc profundidad ( N (N (N H H) (N H H)) (N H (N H H)))&amp;quot; -- &amp;quot;false&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc profundidad ( N (N (N H H) (N H H)) (N (N H H) H))&amp;quot; -- &amp;quot;false&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc profundidad ( N (N H (N H H)) (N H (N H H)))&amp;quot; -- &amp;quot;false&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;&lt;br /&gt;
fun es_abc_jrr:: &amp;quot;nat =&amp;gt; arbol =&amp;gt; bool&amp;quot; where&lt;br /&gt;
   &amp;quot;es_abc_jrr 0 H = True&amp;quot;&lt;br /&gt;
  |&amp;quot;es_abc_jrr (Suc f) H = False&amp;quot;&lt;br /&gt;
  |&amp;quot;es_abc_jrr 0 (N i d) = False&amp;quot; &lt;br /&gt;
  |&amp;quot;es_abc_jrr (Suc f) (N i d) = (((es_abc_jrr f i) ∧ (es_abc_jrr f d)) ∧ ((profundidad_jrr i) = (profundidad_jrr d)) ∧ ((profundidad_jrr i) = f))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;es_abc_jrr 2 (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc_jrr 0 (N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;=False&amp;quot; --&amp;quot;julrobrel: No es un arbol binario completo&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc_jrr 1 (N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;=False&amp;quot; --&amp;quot;julrobrel: No es un arbol binario completo&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc_jrr 2 (N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;=False&amp;quot; --&amp;quot;julrobrel: No es un arbol binario completo&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc_jrr 3 (N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;=False&amp;quot; --&amp;quot;julrobrel: No es un arbol binario completo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. (size a) es el número de nodos del árbol a. Por ejemplo,&lt;br /&gt;
     size (N (N H H) (N H H)) = 3&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;size (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
value &amp;quot;size (N (N (N H H) (N H H)) (N (N H H) (N H H)))&amp;quot;&lt;br /&gt;
value &amp;quot;size (N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;julrobrel: No es un arbol binario completo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. Tenemos 3 funciones de medida sobre los árboles: número de&lt;br /&gt;
  hojas, número de nodos y profundidad. A cada una le corresponde un&lt;br /&gt;
  concepto de completitud. En los siguientes ejercicios demostraremos&lt;br /&gt;
  que los tres conceptos de completitud son iguales.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de hojas.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
--&amp;quot;julrobrel: en un arbol binario completo la profundidad y las hojas estan relacionadas por la siguiente igualdad (hojas = 2^profundidad)&amp;quot;&lt;br /&gt;
--&amp;quot;jaisalmen zoiruicha: el número de hojas es igual a 2 elevado a la profundidad&amp;quot;&lt;br /&gt;
lemma &amp;quot;(hojas (abc n))=2^(profundidad (abc n))&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei, diecabmen1, maresccas4 domlloriv&amp;quot;&lt;br /&gt;
(*irealetei: casi me estalla el cerebro con esta demo, gracias a Marco que me dio una pista hace un par de días sobre que el había usado el assumes. La automática se me queda a medias.*)&lt;br /&gt;
lemma 00:&lt;br /&gt;
 assumes &amp;quot;es_abc profundidad a&amp;quot;&lt;br /&gt;
 shows &amp;quot;hojas a = 2^(profundidad a)&amp;quot;&lt;br /&gt;
 using assms&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
lemma profundidad_hojas_completo: &amp;quot;es_abc hojas a = es_abc profundidad a&amp;quot;&lt;br /&gt;
 by (induct a) (auto simp add: 00)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4: no he sido capaz de terminar la demostración manual&amp;quot;&lt;br /&gt;
theorem &amp;quot;es_abc profundidad a = es_abc hojas a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
 show &amp;quot;?P H&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix 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;
 show &amp;quot;?P (N i d)&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume H: &amp;quot;es_abc profundidad (N i d)&amp;quot;&lt;br /&gt;
  then have &amp;quot;es_abc profundidad (N i d) = (es_abc profundidad i ∧ es_abc profundidad d ∧ profundidad i = profundidad d)&amp;quot;  by simp&lt;br /&gt;
  also have &amp;quot;... = (es_abc hojas i ∧ es_abc hojas d ∧ profundidad i = profundidad d)&amp;quot; using H1 H2  by simp&lt;br /&gt;
  also have &amp;quot;... = (es_abc hojas i ∧ es_abc hojas d ∧ hojas i = hojas d)&amp;quot; using H by (simp add: 00)&lt;br /&gt;
  also have &amp;quot;... = es_abc hojas (N i d)&amp;quot; by simp&lt;br /&gt;
  finally show ?thesis .&lt;br /&gt;
 next&lt;br /&gt;
  assume H: &amp;quot;¬ es_abc profundidad (N i d)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N i d)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
   assume I: &amp;quot;(es_abc profundidad i ∧ es_abc profundidad d)&amp;quot;&lt;br /&gt;
   then have &amp;quot;es_abc profundidad (N i d) = (es_abc profundidad i ∧ es_abc profundidad d ∧ profundidad i = profundidad d)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...= (profundidad i = profundidad d)&amp;quot; using H I by simp&lt;br /&gt;
   &lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(hojas (abc n))= 2^(profundidad_pfm (abc n))&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot; hojas (abc 0) = 2 ^ profundidad_pfm (abc 0)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI: &amp;quot; hojas (abc n) = 2 ^ profundidad_pfm (abc n)&amp;quot;&lt;br /&gt;
  then have &amp;quot; hojas (abc (Suc n)) = 2 * hojas (abc n)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = 2 * (2 ^ profundidad_pfm (abc n))&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;hojas (abc (Suc n)) = 2 ^ profundidad_pfm (abc (Suc n))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que un árbol binario a es completo respecto del&lt;br /&gt;
  número de hojas syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
--&amp;quot;julrobrel: la relacion entre hojas y nodos la da la siguiente ecuacion (nodos = hojas -1) o lo que es lo mismo (nodos+1=hojas)&amp;quot;&lt;br /&gt;
lemma &amp;quot;Suc(size (abc n))=hojas (abc n)&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei maresccas4 diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
(*he conseguido hacer uno!! bieeeeeeeen!!&amp;quot;*)&lt;br /&gt;
lemma relaccion_hojas_nodo:&amp;quot;hojas (a) = size (a) + 1&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
-- &amp;quot;cambios mínimos respecto al anterior, solo los ( )&amp;quot;&lt;br /&gt;
lemma relaccion_hojas_nodo:&amp;quot;hojas a = size a + 1&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma hojas_size_completo: &amp;quot;es_abc hojas a = es_abc size a&amp;quot;&lt;br /&gt;
by (induct a) (auto simp add: relaccion_hojas_nodo)&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;es_abc hojas a = es_abc size a&amp;quot;&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  show &amp;quot;es_abc hojas H = es_abc size H&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
  fix i d&lt;br /&gt;
  assume HI1:&amp;quot;es_abc hojas i = es_abc size i&amp;quot;&lt;br /&gt;
  assume HI2:&amp;quot;es_abc hojas d = es_abc size d&amp;quot;&lt;br /&gt;
  show &amp;quot; es_abc hojas (N i d) = es_abc size (N i d)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
   have &amp;quot;es_abc hojas (N i d) = (es_abc hojas i ∧ es_abc hojas d ∧ hojas i = hojas d)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (es_abc size i ∧ es_abc size d ∧ hojas i = hojas d)&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
   also have &amp;quot;... = (es_abc size i ∧ es_abc size d ∧ size i = size d)&amp;quot; by (simp add:relaccion_hojas_nodo)&lt;br /&gt;
   also have &amp;quot;... =  es_abc size (N i d)&amp;quot; by simp&lt;br /&gt;
   finally show ?thesis by simp&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
--&amp;quot;julrobrel: la relacion entre la profundidad y el numero de nodos es (nodos+1=2^profundidad)&amp;quot;&lt;br /&gt;
lemma &amp;quot;Suc(size (abc n))=2^(profundidad (abc n))&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
lemma &amp;quot;1 +  size (abc n) = 2^(profundidad (abc n))&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei: suponía que sería como el 7 pero no sale... por mucho que me pongo a definir lemas. De todos modos dejo donde me he quedado&amp;quot;&lt;br /&gt;
lemma 02:&lt;br /&gt;
assumes &amp;quot;es_abc size a&amp;quot;&lt;br /&gt;
shows &amp;quot;size a + 1 = 2^(profundidad a)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
lemma 03:&lt;br /&gt;
assumes &amp;quot;es_abc hojas a&amp;quot;&lt;br /&gt;
shows &amp;quot;Suc(size a) = hojas a&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;es_abc profundidad a = es_abc size a&amp;quot;&lt;br /&gt;
by (induct a) (auto simp add:00 02 03) --&amp;quot;He puesto todas la teorías aunque suponía que con 02 sería suficiente&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
(*irealetei: como me he complicado la existencia...*)&lt;br /&gt;
theorem &amp;quot;es_abc profundidad a = es_abc size a&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;(es_abc profundidad a = es_abc hojas a)&amp;quot; by (simp add: profundidad_hojas_completo)&lt;br /&gt;
  also have &amp;quot;...= es_abc size a&amp;quot; by (simp add: hojas_size_completo)&lt;br /&gt;
  finally show ?thesis.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que (abc n) es un árbol binario completo.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
--&amp;quot;julrobrel: para todo lo anterior nos hemos basado en que (abc n) siempre devuelve un arbol binario completo. Habra que demostrarlo...&amp;quot;&lt;br /&gt;
lemma profundidad_lemma: &amp;quot;profundidad_jrr (abc n) = n&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
lemma &amp;quot;profundidad (abc n) = n&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;es_abc_jrr n (abc n)&amp;quot;&lt;br /&gt;
by (induct n) (auto simp add:profundidad_lemma)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc profundidad (abc n)&amp;quot; by (induct n) auto&lt;br /&gt;
(* irealetei: es raro, hay que hacerlo por induct aunque parece que no usa la HI... pero por cases no se lo traga.&lt;br /&gt;
   Creo que está mejor la solución de marco, pero la dejo para comentarla.*)&lt;br /&gt;
lemma &amp;quot;es_abc profundidad (abc n)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;es_abc profundidad (abc 0)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume &amp;quot; es_abc profundidad (abc n)&amp;quot;&lt;br /&gt;
  then have &amp;quot;es_abc profundidad (abc (Suc n))= es_abc profundidad (N (abc n) (abc n))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = es_abc profundidad (abc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;es_abc profundidad (abc n) ⟹ es_abc profundidad (abc (Suc n))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc profundidad (abc n)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;es_abc profundidad (abc 0)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI: &amp;quot;es_abc profundidad (abc n)&amp;quot;&lt;br /&gt;
  then have &amp;quot;es_abc profundidad (abc (Suc n))= es_abc profundidad (N (abc n) (abc n))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (es_abc profundidad (abc n) ∧ es_abc profundidad (abc n) ∧ profundidad (abc n) = profundidad (abc n))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;es_abc profundidad (abc (Suc n))&amp;quot; using HI by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que si a es un árbolo binario completo&lt;br /&gt;
  respecto de la profundidad, entonces a es (abc (profundidad a)).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
lemma &amp;quot;(es_abc_jrr (profundidad_jrr a) a) ⟶ a = abc (profundidad_jrr a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4 domlloriv marescpla jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc profundidad a ⟹ a = abc (profundidad a)&amp;quot; by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Encontrar una medida f tal que (es_abc f) es distinto de &lt;br /&gt;
  (es_abc size).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc_jrr f t = es_abc_jrr (size t) t&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
--&amp;quot;julrobrel: El arbol que es una hoja...&amp;quot;&lt;br /&gt;
(*&lt;br /&gt;
Quickcheck found a counterexample:&lt;br /&gt;
&lt;br /&gt;
f = Suc 0&lt;br /&gt;
t = H&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
es_abc f t = False&lt;br /&gt;
es_abc (size t) t = True&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei maresccas4 domlloriv jaisalmen zoiruicha&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc f a = es_abc size a&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
(*f = λx. a&lt;br /&gt;
a = N H (N H H)*)&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun contraejemplo :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;contraejemplo H = Suc(0)&amp;quot;|&lt;br /&gt;
  &amp;quot;contraejemplo (N i d)= Suc 0&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
value &amp;quot;es_abc contraejemplo (N (N H H) H)&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc size (N (N H H) H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_11&amp;diff=545</id>
		<title>Relación 11</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_11&amp;diff=545"/>
		<updated>2014-02-13T09:12:51Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R11: Deducción natural de primer orden *}&lt;br /&gt;
&lt;br /&gt;
theory R11&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Demostrar o refutar los siguientes lemas usando sólo las reglas&lt;br /&gt;
  básicas de deducción natural de la lógica proposicional, de los&lt;br /&gt;
  cuantificadores y de la igualdad: &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;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &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;
  · allI:       ⟦∀x. P x; P x ⟹ R⟧ ⟹ R&lt;br /&gt;
  · allE:       (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
  · exI:        P x ⟹ ∃x. P x&lt;br /&gt;
  · exE:        ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&lt;br /&gt;
&lt;br /&gt;
  · refl:       t = t&lt;br /&gt;
  · subst:      ⟦s = t; P s⟧ ⟹ P t&lt;br /&gt;
  · trans:      ⟦r = s; s = t⟧ ⟹ r = t&lt;br /&gt;
  · sym:        s = t ⟹ t = s&lt;br /&gt;
  · not_sym:    t ≠ s ⟹ s ≠ t&lt;br /&gt;
  · ssubst:     ⟦t = s; P s⟧ ⟹ P t&lt;br /&gt;
  · box_equals: ⟦a = b; a = c; b = d⟧ ⟹ a: = d&lt;br /&gt;
  · arg_cong:   x = y ⟹ f x = f y&lt;br /&gt;
  · fun_cong:   f = g ⟹ f x = g x&lt;br /&gt;
  · cong:       ⟦f = g; x = y⟧ ⟹ f x = g y&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI, mt y not_ex que demostramos a continuación.&lt;br /&gt;
  *}&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;
lemma no_ex: &amp;quot;¬(∃x. P(x)) ⟹ ∀x. ¬P(x)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
       P a ⟶ (∃x. Q x) ⊢ ∃x. P a ⟶ Q x &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot; (* Una! nos ha salido Una!!! *)&lt;br /&gt;
lemma ej_1_auto:&lt;br /&gt;
  assumes &amp;quot; P a ⟶ (∃x. Q x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej_1:&lt;br /&gt;
  fixes P Q :: &amp;quot;&amp;#039;b ⇒ bool&amp;quot; &lt;br /&gt;
  assumes 0:&amp;quot;P a ⟶ (∃x. Q x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬(P a) ∨ P a&amp;quot; by (rule excluded_middle)&lt;br /&gt;
  then show &amp;quot;∃x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
      {assume 2:&amp;quot;(P a)&amp;quot;&lt;br /&gt;
        have 4: &amp;quot;∃x. Q x&amp;quot; using 0 2 ..&lt;br /&gt;
        obtain b where &amp;quot;Q b&amp;quot; using 4 by (rule exE)&lt;br /&gt;
        then have &amp;quot;P a ⟶ Q b&amp;quot; ..&lt;br /&gt;
        then show &amp;quot;∃x. P a ⟶ Q x&amp;quot; by (rule exI)}&lt;br /&gt;
      next &lt;br /&gt;
       {assume 2:&amp;quot;¬(P a)&amp;quot;&lt;br /&gt;
        {assume &amp;quot;¬(∃x. P a ⟶ Q x)&amp;quot;&lt;br /&gt;
         then have 3: &amp;quot;∀x. ¬(P a ⟶ Q x)&amp;quot; by (rule no_ex)&lt;br /&gt;
         fix b&lt;br /&gt;
         have &amp;quot;¬(P a ⟶ Q b)&amp;quot; using 3 ..&lt;br /&gt;
         then have &amp;quot;P a ∧ ¬Q b&amp;quot; by (rule Meson.not_impD)&lt;br /&gt;
         then have 4:&amp;quot;P a&amp;quot; ..&lt;br /&gt;
         have &amp;quot;False&amp;quot; using 2 4 ..}&lt;br /&gt;
        then show &amp;quot; ∃x. P a ⟶ Q x&amp;quot; by (rule ccontr)}&lt;br /&gt;
       qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
       {∀x y z. R x y ∧ R y z ⟶ R x z, &lt;br /&gt;
        ∀x. ¬(R x x)}&lt;br /&gt;
       ⊢ ∀x y. R x y ⟶ ¬(R y x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei maresccas4&amp;quot; (* Dos *)&lt;br /&gt;
&lt;br /&gt;
lemma ej_2:&lt;br /&gt;
  assumes &amp;quot;∀x. ∀y. ∀z. R x y ∧ R y z ⟶ R x z&amp;quot;&lt;br /&gt;
          &amp;quot;∀x. ¬(R x x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. ∀y. R x y ⟶ ¬(R y x)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {fix a&lt;br /&gt;
  {fix b&lt;br /&gt;
  {assume 1:&amp;quot;R a b&amp;quot;&lt;br /&gt;
  have  &amp;quot;¬(R b a)&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬¬(R b a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;R b a&amp;quot; by (rule notnotD)&lt;br /&gt;
    with 1 have 3:&amp;quot;R a b ∧ R b a&amp;quot; ..&lt;br /&gt;
    have &amp;quot;∀y z. R a y ∧ R y z ⟶ R a z&amp;quot; using assms(1) ..&lt;br /&gt;
    then have &amp;quot;∀z. R a b ∧ R b z ⟶ R a z&amp;quot; ..&lt;br /&gt;
    then have &amp;quot;R a b ∧ R b a ⟶ R a a&amp;quot; ..&lt;br /&gt;
    then have &amp;quot;R a a&amp;quot; using 3 ..&lt;br /&gt;
    have &amp;quot;¬(R a a)&amp;quot; using assms(2) ..&lt;br /&gt;
    then show False using `R a a`..&lt;br /&gt;
  qed}&lt;br /&gt;
  then have 4:&amp;quot;R a b ⟶ ¬(R b a)&amp;quot; ..}&lt;br /&gt;
  then have &amp;quot;∀y. R a y ⟶ ¬ R y a&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;∀x y. R x y ⟶ ¬ R y x&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar o refutar&lt;br /&gt;
       (∀x. ∃y. P x y) ⟶ (∃y. ∀x. P x y)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;irealetei maresccas4 domlloriv&amp;quot;&lt;br /&gt;
lemma ej_3_auto:&lt;br /&gt;
  assumes &amp;quot;∀x. ∃y. P x y&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃y. ∀x. P x y&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
(*Contra ejemplo&lt;br /&gt;
P = (λx. undefined)(a⇣1 := {a⇣2}, a⇣2 := {a⇣1})&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar&lt;br /&gt;
       (∃y. ∀x. P x y) ⟶ (∀x. ∃y. P x y)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei maresccas4&amp;quot;&lt;br /&gt;
lemma ej_4_auto:&lt;br /&gt;
  assumes &amp;quot;∃y. ∀x. P x y&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. ∃y. P x y&amp;quot; &lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej_4:&lt;br /&gt;
  assumes 1:&amp;quot;∃y. ∀x. P x y&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. ∃y. P x y&amp;quot; &lt;br /&gt;
proof -&lt;br /&gt;
  {fix a&lt;br /&gt;
  obtain b where 2:&amp;quot;∀x. P x b&amp;quot; using 1 ..&lt;br /&gt;
  have &amp;quot;P a b&amp;quot; using 2 ..&lt;br /&gt;
  then have &amp;quot;∃y. P a y&amp;quot;  ..}&lt;br /&gt;
  then show &amp;quot;∀x. ∃y. P x y&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ej_4_bis:&amp;quot;(∃y. ∀x. P x y) ⟶ (∀x. ∃y. P x y)&amp;quot; &lt;br /&gt;
proof &lt;br /&gt;
  assume 1:&amp;quot;∃y. ∀x. P x y&amp;quot;&lt;br /&gt;
  {fix a&lt;br /&gt;
  obtain b where 2:&amp;quot;∀x. P x b&amp;quot; using 1 ..&lt;br /&gt;
  have &amp;quot;P a b&amp;quot; using 2 ..&lt;br /&gt;
  then have &amp;quot;∃y. P a y&amp;quot;  ..}&lt;br /&gt;
  then show &amp;quot;∀x. ∃y. P x y&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar&lt;br /&gt;
     {∀x. P a x x, &lt;br /&gt;
      ∀x y z. P x y z ⟶ P (f x) y (f z)⟧&lt;br /&gt;
     ⊢ ∃z. P (f a) z (f (f a))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma ej_5:&lt;br /&gt;
  assumes &amp;quot;∀x. P a x x&amp;quot;&lt;br /&gt;
          &amp;quot;∀x y z. P x y z ⟶ P (f x) y (f z)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃z. P (f a) z (f (f a))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;P a (f a) (f a)&amp;quot; using assms(1) ..&lt;br /&gt;
  have &amp;quot;∀y z. P a y z ⟶ P (f a) y (f z)&amp;quot; using assms(2) ..&lt;br /&gt;
  then have &amp;quot;∀z. P a (f a) z ⟶ P (f a) (f a) (f z)&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;P a (f a) (f a) ⟶ P (f a) (f a) (f (f a))&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;P (f a) (f a) (f (f a))&amp;quot; using `P a (f a) (f a)` ..&lt;br /&gt;
  then show &amp;quot;∃z. P (f a) z (f (f a))&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar o refutar&lt;br /&gt;
     {∀y. Q a y, &lt;br /&gt;
      ∀x y. Q x y ⟶ Q (s x) (s y)} &lt;br /&gt;
     ⊢ ∃z. Qa z ∧ Q z (s (s a))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma ej_6:&lt;br /&gt;
  assumes &amp;quot;∀y. Q a y&amp;quot;&lt;br /&gt;
          &amp;quot;∀x y. Q x y ⟶ Q (s x) (s y)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃z. Q a z ∧ Q z (s (s a))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;Q a (s a)&amp;quot; using assms(1) ..&lt;br /&gt;
  have &amp;quot;∀y. Q a y ⟶ Q (s a) (s y)&amp;quot; using assms(2) ..&lt;br /&gt;
  then have &amp;quot;Q a (s a) ⟶ Q (s a) (s (s a))&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;Q (s a) (s (s a))&amp;quot; using `Q a (s a)` ..&lt;br /&gt;
  with  `Q a (s a)` have &amp;quot;Q a (s a) ∧ Q (s a) (s (s a))&amp;quot;  by (rule conjI)&lt;br /&gt;
  then show &amp;quot;∃z. Q a z ∧ Q z (s (s a))&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. (En APLI2 el ejercicio 13 de LP) Formalizar, y demostrar&lt;br /&gt;
  la corrección, del siguiente argumento &lt;br /&gt;
     Si la válvula está abierta o la monitorización está preparada,&lt;br /&gt;
     entonces se envía una señal de reconocimiento y un mensaje de&lt;br /&gt;
     funcionamiento al controlador del ordenador. Si se envía un mensaje &lt;br /&gt;
     de funcionamiento al controlador del ordenador o el sistema está en &lt;br /&gt;
     estado normal, entonces se aceptan las órdenes del operador. Por lo&lt;br /&gt;
     tanto, si la válvula está abierta, entonces se aceptan las órdenes&lt;br /&gt;
     del operador. &lt;br /&gt;
  Usar A : La válvula está abierta.&lt;br /&gt;
       P : La monitorización está preparada.&lt;br /&gt;
       R : Envía una señal de reconocimiento.&lt;br /&gt;
       F : Envía un mensaje de funcionamiento.&lt;br /&gt;
       N : El sistema está en estado normal.&lt;br /&gt;
       Or : Se aceptan órdenes del operador.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej7_pfm:&lt;br /&gt;
  assumes 1: &amp;quot;A ∨ P ⟶ R ∧ F&amp;quot; and&lt;br /&gt;
          2: &amp;quot;(F ∨ N) ⟶ Or&amp;quot;&lt;br /&gt;
 shows &amp;quot;A ⟶ Or&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 3: &amp;quot;A&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;A ∨ P&amp;quot; using 3 by (rule disjI1)&lt;br /&gt;
    have 5: &amp;quot;R ∧ F&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
    have 6: &amp;quot;F&amp;quot; using 5 by (rule conjunct2)&lt;br /&gt;
    have 7: &amp;quot;F ∨ N&amp;quot; using 6 by (rule disjI1)&lt;br /&gt;
    have 8: &amp;quot;Or&amp;quot; using 2 7 by (rule mp)}&lt;br /&gt;
  then show &amp;quot;A ⟶ Or&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. (En APLI2 el ejercicio 5 de LP) Formalizar, y demostrar&lt;br /&gt;
  la corrección, del siguiente argumento &lt;br /&gt;
     En cierto experimento, cuando hemos empleado un fármaco A, el&lt;br /&gt;
     paciente ha mejorado considerablemente en el caso, y sólo en el&lt;br /&gt;
     caso, en que no se haya empleado también un fármaco B. Además, o se&lt;br /&gt;
     ha empleado el fármaco A o se ha empleado el fármaco B. En&lt;br /&gt;
     consecuencia, podemos afirmar que si no hemos empleado el fármaco&lt;br /&gt;
     B, el paciente ha mejorado considerablemente. &lt;br /&gt;
  Usar A: Hemos empleado el fármaco A.&lt;br /&gt;
       B: Hemos empleado el fármaco B.&lt;br /&gt;
       M: El paciente ha mejorado notablemente.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot; &lt;br /&gt;
{* Aquí dejo dos formalizaciones válidas del enunciado, por si alguien encuentra la inspiración que yo he perdido. In Diego we trust! *}&lt;br /&gt;
&lt;br /&gt;
lemma ej8_pfm:&lt;br /&gt;
  assumes 1: &amp;quot;A ⟶ (M ⟷ ¬B)&amp;quot; and&lt;br /&gt;
          2: &amp;quot;A ∨ B&amp;quot;&lt;br /&gt;
 shows &amp;quot;¬B ⟶ M&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ej8_pfm_2:&lt;br /&gt;
  assumes 1: &amp;quot;(A ∧ M) ⟶ ¬B ∧ A&amp;quot; and&lt;br /&gt;
          2: &amp;quot;A ∨ B&amp;quot;&lt;br /&gt;
 shows &amp;quot;¬B ⟶ M&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma ej_8:&lt;br /&gt;
  assumes &amp;quot;(A ⟶ M) ⟷ ¬B&amp;quot;&lt;br /&gt;
          &amp;quot;A ∨ B&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬B ⟶ M&amp;quot;&lt;br /&gt;
using assms(2)&lt;br /&gt;
proof&lt;br /&gt;
  { assume &amp;quot;A&amp;quot;&lt;br /&gt;
    { assume &amp;quot;¬B&amp;quot;&lt;br /&gt;
      have &amp;quot;¬B ⟶ (A ⟶ M)&amp;quot; using assms(1) ..&lt;br /&gt;
      then have &amp;quot;A ⟶ M&amp;quot; using `¬B` ..&lt;br /&gt;
      then have &amp;quot;M&amp;quot; using `A` .. }&lt;br /&gt;
    then show &amp;quot;¬B ⟶ M&amp;quot; ..&lt;br /&gt;
  }&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;B&amp;quot;&lt;br /&gt;
    { assume &amp;quot;¬B&amp;quot;&lt;br /&gt;
      then have False using `B` ..&lt;br /&gt;
      then have &amp;quot;M&amp;quot; .. }&lt;br /&gt;
    then show &amp;quot;¬B ⟶ M&amp;quot; ..&lt;br /&gt;
  }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. (En APLI2 el ejercicio 13 de LPO) Formalizar, y decidir&lt;br /&gt;
  la corrección, del siguiente argumento &lt;br /&gt;
     Toda persona pobre tiene un padre rico. Por tanto, existe una&lt;br /&gt;
     persona rica que tiene un abuelo rico.&lt;br /&gt;
  Usar R(x) para x es rico&lt;br /&gt;
       p(x) para el padre de x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej13_lpo:&lt;br /&gt;
    assumes &amp;quot;∀ x. ¬R(x) ⟶ R(p(x))&amp;quot;&lt;br /&gt;
      shows &amp;quot;∃ x. R(x) ∧ R(p(p(x)))&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma apli2_ej13_lpo_d:&lt;br /&gt;
    assumes 0:&amp;quot;∀ x. ¬R(x) ⟶ R(p(x))&amp;quot;&lt;br /&gt;
      shows &amp;quot;∃ x. R(x) ∧ R(p(p(x)))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. (En APLI2 el ejercicio 10 de LPO) Formalizar, y decidir&lt;br /&gt;
  la corrección, del siguiente argumento &lt;br /&gt;
     Los aficionados al fútbol aplauden a cualquier futbolista&lt;br /&gt;
     extranjero. Juanito no aplaude a futbolistas extranjeros. Por&lt;br /&gt;
     tanto, si hay algún futbolista extranjero nacionalizado español,&lt;br /&gt;
     Juanito no es aficionado al fútbol.&lt;br /&gt;
  Usar Af(x)   para x es aficicionado al fútbol&lt;br /&gt;
       Ap(x,y) para x aplaude a y&lt;br /&gt;
       E(x)    para x es un futbolista extranjero&lt;br /&gt;
       N(x)    para x es un futbolista nacionalizado español&lt;br /&gt;
       j       para Juanito&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej10_lpo:&lt;br /&gt;
    assumes &amp;quot;∀ x. Af(x) ⟶ (∀ y. E(y) ⟶ Ap(x,y))&amp;quot;&lt;br /&gt;
            &amp;quot;∀ y. E(y) ⟶ ¬ Ap(j,y)&amp;quot;&lt;br /&gt;
      shows &amp;quot;∃ y. E(y) ∧ N(y) ⟶ ¬Af(j)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma apli2_ej10_lpo_d:&lt;br /&gt;
    assumes 0:&amp;quot;∀ x. Af(x) ⟶ (∀ y. E(y) ⟶ Ap(x,y))&amp;quot;&lt;br /&gt;
        and 1:&amp;quot;∀ y. E(y) ⟶ ¬ Ap(j,y)&amp;quot;&lt;br /&gt;
      shows &amp;quot;∃ y. E(y) ∧ N(y) ⟶ ¬Af(j)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     Ningún socio del club está en deuda con el tesorero del club. Si&lt;br /&gt;
     un socio del club no paga su cuota está en deuda con el tesorero&lt;br /&gt;
     del club. Por tanto, si el tesorero del club es socio del club,&lt;br /&gt;
     entonces paga su cuota. &lt;br /&gt;
  Usar P(x) para x es socio del club&lt;br /&gt;
       Q(x) para x paga su cuota&lt;br /&gt;
       R(x) para x está en deuda con el tesorero&lt;br /&gt;
       a    para el tesorero del club&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo:&lt;br /&gt;
  assumes &amp;quot;¬ (∃ x. P(x) ∧ R(x))&amp;quot;&lt;br /&gt;
          &amp;quot;∀ x. P(x) ∧ ¬ Q(x) ⟶ R(x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;P(a) ⟶ Q(a)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d:&lt;br /&gt;
  assumes 0:&amp;quot;¬ (∃ x. P(x) ∧ R(x))&amp;quot;&lt;br /&gt;
      and 1:&amp;quot;∀ x. P(x) ∧ ¬ Q(x) ⟶ R(x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;P(a) ⟶ Q(a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel: cuatro sencillos lemas, aunque no faciles de demostrar, y al final el principal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel: es el modus tolens(mt)&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d_aux1:&lt;br /&gt;
  assumes 0:&amp;quot;p ∧ ¬q ⟶ r&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬r⟶¬p ∨ q&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d_aux2:&lt;br /&gt;
  assumes 0:&amp;quot;¬(p ∧ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ ¬r&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel: este lema debe de tener un nombre...&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d_aux3:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d_aux4:&lt;br /&gt;
  assumes 0:&amp;quot;p⟶(¬p ∨ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d:&lt;br /&gt;
  assumes 0:&amp;quot;¬ (∃ x. P(x) ∧ R(x))&amp;quot;&lt;br /&gt;
      and 1:&amp;quot;∀ x. P(x) ∧ ¬ Q(x) ⟶ R(x)&amp;quot;&lt;br /&gt;
    shows   &amp;quot;P(a)⟶Q(a)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2:&amp;quot;∀ x. ¬(P(x) ∧ R(x))&amp;quot; using 0 by (rule no_ex)&lt;br /&gt;
  fix a&lt;br /&gt;
  have 3:&amp;quot;¬(P(a) ∧ R(a))&amp;quot; using 2 ..&lt;br /&gt;
  have 4:&amp;quot;P(a) ∧ ¬ Q(a) ⟶ R(a)&amp;quot; using 1 ..&lt;br /&gt;
  have 5:&amp;quot;¬R(a) ⟶ ¬ P(a) ∨ Q(a)&amp;quot; using 4 by (rule apli2_ej24_lpo_d_aux1)&lt;br /&gt;
  have 6:&amp;quot;P(a)⟶¬R(a)&amp;quot; using 3 by (rule apli2_ej24_lpo_d_aux2)&lt;br /&gt;
  have 7:&amp;quot;(P(a)⟶¬R(a)) ∧ (¬R(a) ⟶ ¬P(a) ∨ Q(a))&amp;quot; using 6 5 by (rule conjI)&lt;br /&gt;
  have 8:&amp;quot;P(a)⟶(¬P(a) ∨ Q(a))&amp;quot; using 7 by (rule apli2_ej24_lpo_d_aux3)&lt;br /&gt;
  have 9:&amp;quot;P(a)⟶Q(a)&amp;quot; using 8 by (rule apli2_ej24_lpo_d_aux4)&lt;br /&gt;
  show &amp;quot;P(a)⟶Q(a)&amp;quot; using 9 .&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_11&amp;diff=544</id>
		<title>Relación 11</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_11&amp;diff=544"/>
		<updated>2014-02-13T09:11:40Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R11: Deducción natural de primer orden *}&lt;br /&gt;
&lt;br /&gt;
theory R11&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Demostrar o refutar los siguientes lemas usando sólo las reglas&lt;br /&gt;
  básicas de deducción natural de la lógica proposicional, de los&lt;br /&gt;
  cuantificadores y de la igualdad: &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;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &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;
  · allI:       ⟦∀x. P x; P x ⟹ R⟧ ⟹ R&lt;br /&gt;
  · allE:       (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
  · exI:        P x ⟹ ∃x. P x&lt;br /&gt;
  · exE:        ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&lt;br /&gt;
&lt;br /&gt;
  · refl:       t = t&lt;br /&gt;
  · subst:      ⟦s = t; P s⟧ ⟹ P t&lt;br /&gt;
  · trans:      ⟦r = s; s = t⟧ ⟹ r = t&lt;br /&gt;
  · sym:        s = t ⟹ t = s&lt;br /&gt;
  · not_sym:    t ≠ s ⟹ s ≠ t&lt;br /&gt;
  · ssubst:     ⟦t = s; P s⟧ ⟹ P t&lt;br /&gt;
  · box_equals: ⟦a = b; a = c; b = d⟧ ⟹ a: = d&lt;br /&gt;
  · arg_cong:   x = y ⟹ f x = f y&lt;br /&gt;
  · fun_cong:   f = g ⟹ f x = g x&lt;br /&gt;
  · cong:       ⟦f = g; x = y⟧ ⟹ f x = g y&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI, mt y not_ex que demostramos a continuación.&lt;br /&gt;
  *}&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;
lemma no_ex: &amp;quot;¬(∃x. P(x)) ⟹ ∀x. ¬P(x)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
       P a ⟶ (∃x. Q x) ⊢ ∃x. P a ⟶ Q x &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot; (* Una! nos ha salido Una!!! *)&lt;br /&gt;
lemma ej_1_auto:&lt;br /&gt;
  assumes &amp;quot; P a ⟶ (∃x. Q x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej_1:&lt;br /&gt;
  fixes P Q :: &amp;quot;&amp;#039;b ⇒ bool&amp;quot; &lt;br /&gt;
  assumes 0:&amp;quot;P a ⟶ (∃x. Q x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬(P a) ∨ P a&amp;quot; by (rule excluded_middle)&lt;br /&gt;
  then show &amp;quot;∃x. P a ⟶ Q x&amp;quot;&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
      {assume 2:&amp;quot;(P a)&amp;quot;&lt;br /&gt;
        have 4: &amp;quot;∃x. Q x&amp;quot; using 0 2 ..&lt;br /&gt;
        obtain b where &amp;quot;Q b&amp;quot; using 4 by (rule exE)&lt;br /&gt;
        then have &amp;quot;P a ⟶ Q b&amp;quot; ..&lt;br /&gt;
        then show &amp;quot;∃x. P a ⟶ Q x&amp;quot; by (rule exI)}&lt;br /&gt;
      next &lt;br /&gt;
       {assume 2:&amp;quot;¬(P a)&amp;quot;&lt;br /&gt;
        {assume &amp;quot;¬(∃x. P a ⟶ Q x)&amp;quot;&lt;br /&gt;
         then have 3: &amp;quot;∀x. ¬(P a ⟶ Q x)&amp;quot; by (rule no_ex)&lt;br /&gt;
         fix b&lt;br /&gt;
         have &amp;quot;¬(P a ⟶ Q b)&amp;quot; using 3 ..&lt;br /&gt;
         then have &amp;quot;P a ∧ ¬Q b&amp;quot; by (rule Meson.not_impD)&lt;br /&gt;
         then have 4:&amp;quot;P a&amp;quot; ..&lt;br /&gt;
         have &amp;quot;False&amp;quot; using 2 4 ..}&lt;br /&gt;
        then show &amp;quot; ∃x. P a ⟶ Q x&amp;quot; by (rule ccontr)}&lt;br /&gt;
       qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
       {∀x y z. R x y ∧ R y z ⟶ R x z, &lt;br /&gt;
        ∀x. ¬(R x x)}&lt;br /&gt;
       ⊢ ∀x y. R x y ⟶ ¬(R y x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei maresccas4&amp;quot; (* Dos *)&lt;br /&gt;
&lt;br /&gt;
lemma ej_2:&lt;br /&gt;
  assumes &amp;quot;∀x. ∀y. ∀z. R x y ∧ R y z ⟶ R x z&amp;quot;&lt;br /&gt;
          &amp;quot;∀x. ¬(R x x)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. ∀y. R x y ⟶ ¬(R y x)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {fix a&lt;br /&gt;
  {fix b&lt;br /&gt;
  {assume 1:&amp;quot;R a b&amp;quot;&lt;br /&gt;
  have  &amp;quot;¬(R b a)&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬¬(R b a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;R b a&amp;quot; by (rule notnotD)&lt;br /&gt;
    with 1 have 3:&amp;quot;R a b ∧ R b a&amp;quot; ..&lt;br /&gt;
    have &amp;quot;∀y z. R a y ∧ R y z ⟶ R a z&amp;quot; using assms(1) ..&lt;br /&gt;
    then have &amp;quot;∀z. R a b ∧ R b z ⟶ R a z&amp;quot; ..&lt;br /&gt;
    then have &amp;quot;R a b ∧ R b a ⟶ R a a&amp;quot; ..&lt;br /&gt;
    then have &amp;quot;R a a&amp;quot; using 3 ..&lt;br /&gt;
    have &amp;quot;¬(R a a)&amp;quot; using assms(2) ..&lt;br /&gt;
    then show False using `R a a`..&lt;br /&gt;
  qed}&lt;br /&gt;
  then have 4:&amp;quot;R a b ⟶ ¬(R b a)&amp;quot; ..}&lt;br /&gt;
  then have &amp;quot;∀y. R a y ⟶ ¬ R y a&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;∀x y. R x y ⟶ ¬ R y x&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar o refutar&lt;br /&gt;
       (∀x. ∃y. P x y) ⟶ (∃y. ∀x. P x y)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;irealetei maresccas4 domlloriv&amp;quot;&lt;br /&gt;
lemma ej_3_auto:&lt;br /&gt;
  assumes &amp;quot;∀x. ∃y. P x y&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃y. ∀x. P x y&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
(*Contra ejemplo&lt;br /&gt;
P = (λx. undefined)(a⇣1 := {a⇣2}, a⇣2 := {a⇣1})&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar&lt;br /&gt;
       (∃y. ∀x. P x y) ⟶ (∀x. ∃y. P x y)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei maresccas4&amp;quot;&lt;br /&gt;
lemma ej_4_auto:&lt;br /&gt;
  assumes &amp;quot;∃y. ∀x. P x y&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. ∃y. P x y&amp;quot; &lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej_4:&lt;br /&gt;
  assumes 1:&amp;quot;∃y. ∀x. P x y&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. ∃y. P x y&amp;quot; &lt;br /&gt;
proof -&lt;br /&gt;
  {fix a&lt;br /&gt;
  obtain b where 2:&amp;quot;∀x. P x b&amp;quot; using 1 ..&lt;br /&gt;
  have &amp;quot;P a b&amp;quot; using 2 ..&lt;br /&gt;
  then have &amp;quot;∃y. P a y&amp;quot;  ..}&lt;br /&gt;
  then show &amp;quot;∀x. ∃y. P x y&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ej_4_bis:&amp;quot;(∃y. ∀x. P x y) ⟶ (∀x. ∃y. P x y)&amp;quot; &lt;br /&gt;
proof &lt;br /&gt;
  assume 1:&amp;quot;∃y. ∀x. P x y&amp;quot;&lt;br /&gt;
  {fix a&lt;br /&gt;
  obtain b where 2:&amp;quot;∀x. P x b&amp;quot; using 1 ..&lt;br /&gt;
  have &amp;quot;P a b&amp;quot; using 2 ..&lt;br /&gt;
  then have &amp;quot;∃y. P a y&amp;quot;  ..}&lt;br /&gt;
  then show &amp;quot;∀x. ∃y. P x y&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar&lt;br /&gt;
     {∀x. P a x x, &lt;br /&gt;
      ∀x y z. P x y z ⟶ P (f x) y (f z)⟧&lt;br /&gt;
     ⊢ ∃z. P (f a) z (f (f a))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma ej_5:&lt;br /&gt;
  assumes &amp;quot;∀x. P a x x&amp;quot;&lt;br /&gt;
          &amp;quot;∀x y z. P x y z ⟶ P (f x) y (f z)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃z. P (f a) z (f (f a))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;P a (f a) (f a)&amp;quot; using assms(1) ..&lt;br /&gt;
  have &amp;quot;∀y z. P a y z ⟶ P (f a) y (f z)&amp;quot; using assms(2) ..&lt;br /&gt;
  then have &amp;quot;∀z. P a (f a) z ⟶ P (f a) (f a) (f z)&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;P a (f a) (f a) ⟶ P (f a) (f a) (f (f a))&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;P (f a) (f a) (f (f a))&amp;quot; using `P a (f a) (f a)` ..&lt;br /&gt;
  then show &amp;quot;∃z. P (f a) z (f (f a))&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar o refutar&lt;br /&gt;
     {∀y. Q a y, &lt;br /&gt;
      ∀x y. Q x y ⟶ Q (s x) (s y)} &lt;br /&gt;
     ⊢ ∃z. Qa z ∧ Q z (s (s a))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma ej_6:&lt;br /&gt;
  assumes &amp;quot;∀y. Q a y&amp;quot;&lt;br /&gt;
          &amp;quot;∀x y. Q x y ⟶ Q (s x) (s y)&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃z. Q a z ∧ Q z (s (s a))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;Q a (s a)&amp;quot; using assms(1) ..&lt;br /&gt;
  have &amp;quot;∀y. Q a y ⟶ Q (s a) (s y)&amp;quot; using assms(2) ..&lt;br /&gt;
  then have &amp;quot;Q a (s a) ⟶ Q (s a) (s (s a))&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;Q (s a) (s (s a))&amp;quot; using `Q a (s a)` ..&lt;br /&gt;
  with  `Q a (s a)` have &amp;quot;Q a (s a) ∧ Q (s a) (s (s a))&amp;quot;  by (rule conjI)&lt;br /&gt;
  then show &amp;quot;∃z. Q a z ∧ Q z (s (s a))&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. (En APLI2 el ejercicio 13 de LP) Formalizar, y demostrar&lt;br /&gt;
  la corrección, del siguiente argumento &lt;br /&gt;
     Si la válvula está abierta o la monitorización está preparada,&lt;br /&gt;
     entonces se envía una señal de reconocimiento y un mensaje de&lt;br /&gt;
     funcionamiento al controlador del ordenador. Si se envía un mensaje &lt;br /&gt;
     de funcionamiento al controlador del ordenador o el sistema está en &lt;br /&gt;
     estado normal, entonces se aceptan las órdenes del operador. Por lo&lt;br /&gt;
     tanto, si la válvula está abierta, entonces se aceptan las órdenes&lt;br /&gt;
     del operador. &lt;br /&gt;
  Usar A : La válvula está abierta.&lt;br /&gt;
       P : La monitorización está preparada.&lt;br /&gt;
       R : Envía una señal de reconocimiento.&lt;br /&gt;
       F : Envía un mensaje de funcionamiento.&lt;br /&gt;
       N : El sistema está en estado normal.&lt;br /&gt;
       Or : Se aceptan órdenes del operador.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej7_pfm:&lt;br /&gt;
  assumes 1: &amp;quot;A ∨ P ⟶ R ∧ F&amp;quot; and&lt;br /&gt;
          2: &amp;quot;(F ∨ N) ⟶ Or&amp;quot;&lt;br /&gt;
 shows &amp;quot;A ⟶ Or&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 3: &amp;quot;A&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;A ∨ P&amp;quot; using 3 by (rule disjI1)&lt;br /&gt;
    have 5: &amp;quot;R ∧ F&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
    have 6: &amp;quot;F&amp;quot; using 5 by (rule conjunct2)&lt;br /&gt;
    have 7: &amp;quot;F ∨ N&amp;quot; using 6 by (rule disjI1)&lt;br /&gt;
    have 8: &amp;quot;Or&amp;quot; using 2 7 by (rule mp)}&lt;br /&gt;
  then show &amp;quot;A ⟶ Or&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. (En APLI2 el ejercicio 5 de LP) Formalizar, y demostrar&lt;br /&gt;
  la corrección, del siguiente argumento &lt;br /&gt;
     En cierto experimento, cuando hemos empleado un fármaco A, el&lt;br /&gt;
     paciente ha mejorado considerablemente en el caso, y sólo en el&lt;br /&gt;
     caso, en que no se haya empleado también un fármaco B. Además, o se&lt;br /&gt;
     ha empleado el fármaco A o se ha empleado el fármaco B. En&lt;br /&gt;
     consecuencia, podemos afirmar que si no hemos empleado el fármaco&lt;br /&gt;
     B, el paciente ha mejorado considerablemente. &lt;br /&gt;
  Usar A: Hemos empleado el fármaco A.&lt;br /&gt;
       B: Hemos empleado el fármaco B.&lt;br /&gt;
       M: El paciente ha mejorado notablemente.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot; &lt;br /&gt;
{* Aquí dejo dos formalizaciones válidas del enunciado, por si alguien encuentra la inspiración que yo he perdido. In Diego we trust! *}&lt;br /&gt;
&lt;br /&gt;
lemma ej8_pfm:&lt;br /&gt;
  assumes 1: &amp;quot;A ⟶ (M ⟷ ¬B)&amp;quot; and&lt;br /&gt;
          2: &amp;quot;A ∨ B&amp;quot;&lt;br /&gt;
 shows &amp;quot;¬B ⟶ M&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma ej8_pfm_2:&lt;br /&gt;
  assumes 1: &amp;quot;(A ∧ M) ⟶ ¬B ∧ A&amp;quot; and&lt;br /&gt;
          2: &amp;quot;A ∨ B&amp;quot;&lt;br /&gt;
 shows &amp;quot;¬B ⟶ M&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma ej_8:&lt;br /&gt;
  assumes &amp;quot;(A ⟶ M) ⟷ ¬B&amp;quot;&lt;br /&gt;
          &amp;quot;A ∨ B&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬B ⟶ M&amp;quot;&lt;br /&gt;
using assms(2)&lt;br /&gt;
proof&lt;br /&gt;
  { assume &amp;quot;A&amp;quot;&lt;br /&gt;
    { assume &amp;quot;¬B&amp;quot;&lt;br /&gt;
      have &amp;quot;¬B ⟶ (A ⟶ M)&amp;quot; using assms(1) ..&lt;br /&gt;
      then have &amp;quot;A ⟶ M&amp;quot; using `¬B` ..&lt;br /&gt;
      then have &amp;quot;M&amp;quot; using `A` .. }&lt;br /&gt;
    then show &amp;quot;¬B ⟶ M&amp;quot; ..&lt;br /&gt;
  }&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;B&amp;quot;&lt;br /&gt;
    { assume &amp;quot;¬B&amp;quot;&lt;br /&gt;
      then have False using `B` ..&lt;br /&gt;
      then have &amp;quot;M&amp;quot; .. }&lt;br /&gt;
    then show &amp;quot;¬B ⟶ M&amp;quot; ..&lt;br /&gt;
  }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. (En APLI2 el ejercicio 13 de LPO) Formalizar, y decidir&lt;br /&gt;
  la corrección, del siguiente argumento &lt;br /&gt;
     Toda persona pobre tiene un padre rico. Por tanto, existe una&lt;br /&gt;
     persona rica que tiene un abuelo rico.&lt;br /&gt;
  Usar R(x) para x es rico&lt;br /&gt;
       p(x) para el padre de x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej13_lpo:&lt;br /&gt;
    assumes &amp;quot;∀ x. ¬R(x) ⟶ R(p(x))&amp;quot;&lt;br /&gt;
      shows &amp;quot;∃ x. R(x) ∧ R(p(p(x)))&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma apli2_ej13_lpo_d:&lt;br /&gt;
    assumes 0:&amp;quot;∀ x. ¬R(x) ⟶ R(p(x))&amp;quot;&lt;br /&gt;
      shows &amp;quot;∃ x. R(x) ∧ R(p(p(x)))&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. (En APLI2 el ejercicio 10 de LPO) Formalizar, y decidir&lt;br /&gt;
  la corrección, del siguiente argumento &lt;br /&gt;
     Los aficionados al fútbol aplauden a cualquier futbolista&lt;br /&gt;
     extranjero. Juanito no aplaude a futbolistas extranjeros. Por&lt;br /&gt;
     tanto, si hay algún futbolista extranjero nacionalizado español,&lt;br /&gt;
     Juanito no es aficionado al fútbol.&lt;br /&gt;
  Usar Af(x)   para x es aficicionado al fútbol&lt;br /&gt;
       Ap(x,y) para x aplaude a y&lt;br /&gt;
       E(x)    para x es un futbolista extranjero&lt;br /&gt;
       N(x)    para x es un futbolista nacionalizado español&lt;br /&gt;
       j       para Juanito&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej10_lpo:&lt;br /&gt;
    assumes &amp;quot;∀ x. Af(x) ⟶ (∀ y. E(y) ⟶ Ap(x,y))&amp;quot;&lt;br /&gt;
            &amp;quot;∀ y. E(y) ⟶ ¬ Ap(j,y)&amp;quot;&lt;br /&gt;
      shows &amp;quot;∃ y. E(y) ∧ N(y) ⟶ ¬Af(j)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma apli2_ej10_lpo_d:&lt;br /&gt;
    assumes 0:&amp;quot;∀ x. Af(x) ⟶ (∀ y. E(y) ⟶ Ap(x,y))&amp;quot;&lt;br /&gt;
        and 1:&amp;quot;∀ y. E(y) ⟶ ¬ Ap(j,y)&amp;quot;&lt;br /&gt;
      shows &amp;quot;∃ y. E(y) ∧ N(y) ⟶ ¬Af(j)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     Ningún socio del club está en deuda con el tesorero del club. Si&lt;br /&gt;
     un socio del club no paga su cuota está en deuda con el tesorero&lt;br /&gt;
     del club. Por tanto, si el tesorero del club es socio del club,&lt;br /&gt;
     entonces paga su cuota. &lt;br /&gt;
  Usar P(x) para x es socio del club&lt;br /&gt;
       Q(x) para x paga su cuota&lt;br /&gt;
       R(x) para x está en deuda con el tesorero&lt;br /&gt;
       a    para el tesorero del club&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo:&lt;br /&gt;
  assumes &amp;quot;¬ (∃ x. P(x) ∧ R(x))&amp;quot;&lt;br /&gt;
          &amp;quot;∀ x. P(x) ∧ ¬ Q(x) ⟶ R(x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;P(a) ⟶ Q(a)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d:&lt;br /&gt;
  assumes 0:&amp;quot;¬ (∃ x. P(x) ∧ R(x))&amp;quot;&lt;br /&gt;
      and 1:&amp;quot;∀ x. P(x) ∧ ¬ Q(x) ⟶ R(x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;P(a) ⟶ Q(a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel: cuatro sencillos lemas, aunque no faciles de demostrar, y al final el principal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel: es el modus tolens(mt)&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d_aux1:&lt;br /&gt;
  assumes 0:&amp;quot;p ∧ ¬q ⟶ r&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬r⟶¬p ∨ q&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d_aux2:&lt;br /&gt;
  assumes 0:&amp;quot;¬(p ∧ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ ¬r&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel: este lema debe de tener un nombre...&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d_aux3:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d_aux4:&lt;br /&gt;
  assumes 0:&amp;quot;p⟶(¬p ∨ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma apli2_ej24_lpo_d:&lt;br /&gt;
  assumes 0:&amp;quot;¬ (∃ x. P(x) ∧ R(x))&amp;quot;&lt;br /&gt;
      and 1:&amp;quot;∀ x. P(x) ∧ ¬ Q(x) ⟶ R(x)&amp;quot;&lt;br /&gt;
    shows   &amp;quot;P(a)⟶Q(a)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2:&amp;quot;∀ x. ¬(P(x) ∧ R(x))&amp;quot; using 0 by (rule no_ex)&lt;br /&gt;
  fix a&lt;br /&gt;
  have 3:&amp;quot;¬(P(a) ∧ R(a))&amp;quot; using 2 ..&lt;br /&gt;
  have 4:&amp;quot;P(a) ∧ ¬ Q(a) ⟶ R(a)&amp;quot; using 1 ..&lt;br /&gt;
  have 5:&amp;quot;¬R(a) ⟶ ¬ P(a) ∨ Q(a)&amp;quot; using 4 by (rule apli2_ej24_lpo_d_aux1)&lt;br /&gt;
  have 6:&amp;quot;P(a)⟶¬R(a)&amp;quot; using 3 by (rule apli2_ej24_lpo_d_aux2)&lt;br /&gt;
  have 7:&amp;quot;(P(a)⟶¬R(a)) ∧ (¬R(a) ⟶ ¬P(a) ∨ Q(a))&amp;quot; using 6 5 by (rule conjI)&lt;br /&gt;
  have 8:&amp;quot;P(a)⟶(¬P(a) ∨ Q(a))&amp;quot; using 7 by (rule apli2_ej24_lpo_d_aux3)&lt;br /&gt;
  have 9:&amp;quot;P(a)⟶Q(a)&amp;quot; using 8 by (rule apli2_ej24_lpo_d_aux4)&lt;br /&gt;
  show &amp;quot;P(a)⟶Q(a)&amp;quot; using 9 .&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=511</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_10&amp;diff=511"/>
		<updated>2014-02-03T08:17:24Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R10: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R10&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 lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Los ejercicios son los de la asignatura de &amp;quot;Lógica informática&amp;quot; que se&lt;br /&gt;
  encuentran en http://goo.gl/yrPLn&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;
  · excluded_middle: ¬P ∨ 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;
&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ∨ q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 01:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
      and 2: &amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
     {assume &amp;quot;p&amp;quot;  &lt;br /&gt;
        then show &amp;quot;p&amp;quot;.}&lt;br /&gt;
     next&lt;br /&gt;
     {assume &amp;quot;q&amp;quot;&lt;br /&gt;
        with 2 show &amp;quot;p&amp;quot; by (rule notE)}&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4 domlloriv&amp;quot;&lt;br /&gt;
lemma Ejercicio_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;
  using assms(1)&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  then show &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  with `¬q` show &amp;quot;p&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
 lemma ej1_juaruipav:&lt;br /&gt;
 assumes 1:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
     and 2: &amp;quot;¬q&amp;quot;&lt;br /&gt;
 shows &amp;quot;p&amp;quot;&lt;br /&gt;
 using 1&lt;br /&gt;
 proof&lt;br /&gt;
  assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
  then show &amp;quot;p&amp;quot; .&lt;br /&gt;
 next&lt;br /&gt;
  assume 4:&amp;quot;q&amp;quot;&lt;br /&gt;
  show &amp;quot;p&amp;quot; using 2 4 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej1_auto:&lt;br /&gt;
  assumes 1:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  assumes 2:&amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej1:&lt;br /&gt;
  assumes 1:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  assumes 2:&amp;quot;¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
  note 1&lt;br /&gt;
  moreover&lt;br /&gt;
  {assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p&amp;quot; .}&lt;br /&gt;
  moreover&lt;br /&gt;
  {assume 3:&amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using 2 3 ..}&lt;br /&gt;
 ultimately show &amp;quot;p&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla, pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 lemma 02:&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;
   then have 1: &amp;quot;(¬p ∨ ¬q)&amp;quot; by (rule notnotD)&lt;br /&gt;
   show &amp;quot;False&amp;quot;&lt;br /&gt;
     using 1&lt;br /&gt;
     proof (rule disjE)&lt;br /&gt;
        {assume I: &amp;quot;¬p&amp;quot;&lt;br /&gt;
         have &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
         with I show &amp;quot;False&amp;quot;..}&lt;br /&gt;
        {assume II: &amp;quot;¬q&amp;quot;&lt;br /&gt;
          have &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
      with II show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
     qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 maresccas4 domlloriv&amp;quot;&lt;br /&gt;
lemma Ejercicio_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 &lt;br /&gt;
  assume 1: &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 1&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using assms ..&lt;br /&gt;
    with `¬p` show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using assms ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej2_juaruipav:&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 &lt;br /&gt;
  assume 2: &amp;quot;¬ p ∨ ¬ q&amp;quot;&lt;br /&gt;
  show &amp;quot;False&amp;quot;&lt;br /&gt;
  using 2&lt;br /&gt;
  proof&lt;br /&gt;
    assume 3: &amp;quot;¬q&amp;quot;&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 3 4 by (rule notE) &lt;br /&gt;
 next&lt;br /&gt;
    assume 5: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
    show &amp;quot;False&amp;quot; using 5 6 by (rule notE) &lt;br /&gt;
   qed&lt;br /&gt;
 qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej2_auto:&lt;br /&gt;
  assumes 1:&amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  shows  &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej2:&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&lt;br /&gt;
  assume &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  moreover&lt;br /&gt;
  {assume 2:&amp;quot;¬p&amp;quot; &lt;br /&gt;
    have 3:&amp;quot;p&amp;quot; using 1 ..&lt;br /&gt;
    have &amp;quot;False&amp;quot; using 2 3 ..}&lt;br /&gt;
  moreover&lt;br /&gt;
  {assume 2:&amp;quot;¬q&amp;quot; &lt;br /&gt;
    have 3:&amp;quot;q&amp;quot; using 1 ..&lt;br /&gt;
    have &amp;quot;False&amp;quot; using 2 3 ..}&lt;br /&gt;
ultimately show &amp;quot;False&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&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&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ∨ q)` have False ..}&lt;br /&gt;
  thus  &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 pabflomar domlloriv&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&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&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    with  assms have False ..}&lt;br /&gt;
  then have &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
  with `¬p` show &amp;quot;¬p ∧ ¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
  lemma 03:&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&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;
      then have &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
      then have &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
      with 1 show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
    qed &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;
      then have &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
      then have &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
      with 1 show &amp;quot;False&amp;quot; ..}&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej3_juaruipav:&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 &lt;br /&gt;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p∨q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
  have 4: &amp;quot;False&amp;quot; using 1 3 by (rule notE)}&lt;br /&gt;
  then show &amp;quot;¬p&amp;quot;  ..&lt;br /&gt;
next&lt;br /&gt;
  {assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
  have 6: &amp;quot;p∨q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
  have 7: &amp;quot;False&amp;quot; using 1 6 by (rule notE)}&lt;br /&gt;
  then show &amp;quot;¬q&amp;quot;  ..&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej3_auto:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  shows  &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej3:&lt;br /&gt;
  assumes 0:&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&amp;quot;&lt;br /&gt;
    then have 2:&amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    have &amp;quot;False&amp;quot; using 0 2 ..}&lt;br /&gt;
  then show &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
  next&lt;br /&gt;
 {assume &amp;quot;q&amp;quot;&lt;br /&gt;
    then have 2:&amp;quot;p ∨ q&amp;quot; ..&lt;br /&gt;
    have &amp;quot;False&amp;quot; using 0 2 ..}&lt;br /&gt;
  then show &amp;quot;¬q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &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;
 show False&lt;br /&gt;
 using `p ∨ q`&lt;br /&gt;
 proof&lt;br /&gt;
   assume &amp;quot;p&amp;quot;&lt;br /&gt;
   have &amp;quot;¬p&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `p` ..&lt;br /&gt;
 next&lt;br /&gt;
   assume &amp;quot;q&amp;quot;&lt;br /&gt;
   have &amp;quot;¬q&amp;quot; using `¬p ∧ ¬q` ..&lt;br /&gt;
   thus False using `q` ..&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
lemma Ejercicio_4:&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;
  show False&lt;br /&gt;
  using `p ∨ q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬p&amp;quot; using assms ..&lt;br /&gt;
    then show False using `p` ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q&amp;quot; using assms ..&lt;br /&gt;
    then show False using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
  lemma 04:&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;
      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 &amp;quot;¬¬(p ∨ q)&amp;quot;&lt;br /&gt;
       then have 4:&amp;quot;(p ∨ q)&amp;quot; by (rule notnotD)&lt;br /&gt;
       then show False&lt;br /&gt;
         proof (rule disjE)&lt;br /&gt;
           note 4&lt;br /&gt;
           {assume &amp;quot;p&amp;quot;&lt;br /&gt;
             with 2 show False ..}&lt;br /&gt;
           {assume &amp;quot;q&amp;quot;&lt;br /&gt;
             with 3 show False ..}&lt;br /&gt;
         qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej4_pfm:&lt;br /&gt;
  assumes 0:&amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 1:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 1&lt;br /&gt;
  proof &lt;br /&gt;
    assume 1:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬p&amp;quot; using 0 by (rule conjunct1)&lt;br /&gt;
    then show False using `p` ..&lt;br /&gt;
    next&lt;br /&gt;
    assume 1:&amp;quot;q&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬q&amp;quot; using 0 by (rule conjunct2)&lt;br /&gt;
    then show False using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej4_juaruipav:&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 &lt;br /&gt;
  assume 2: &amp;quot; p ∨ q&amp;quot;&lt;br /&gt;
  show &amp;quot;False&amp;quot;&lt;br /&gt;
  using 2&lt;br /&gt;
  proof&lt;br /&gt;
     assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
     have 4:&amp;quot;¬p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
     show &amp;quot;False&amp;quot; using 4 3 by (rule notE) &lt;br /&gt;
  next &lt;br /&gt;
     assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
     have 6:&amp;quot;¬q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
     show &amp;quot;False&amp;quot; using 6 5 by (rule notE)&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej4_auto:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  shows  &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej4:&lt;br /&gt;
  assumes 0:&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 1:&amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬p&amp;quot; using 0 ..&lt;br /&gt;
    then have  &amp;quot;False&amp;quot; using 1 ..}&lt;br /&gt;
  moreover&lt;br /&gt;
  {assume 1:&amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q&amp;quot; using 0 ..&lt;br /&gt;
    then have  &amp;quot;False&amp;quot; using 1 ..}&lt;br /&gt;
ultimately show &amp;quot;False&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
lemma&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;
  show False&lt;br /&gt;
  using `¬p ∨ ¬q`&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬p`show False ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using `p ∧ q` ..&lt;br /&gt;
    with `¬q` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 05:&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 &amp;quot;¬¬(p ∧ q)&amp;quot;&lt;br /&gt;
       then have 4:&amp;quot;(p ∧ q)&amp;quot; by (rule notnotD)&lt;br /&gt;
       have p using 4 by (rule conjunct1)&lt;br /&gt;
       have q using 4 by (rule conjunct2)&lt;br /&gt;
       show False&lt;br /&gt;
       using 1&lt;br /&gt;
       proof (rule disjE)&lt;br /&gt;
          {assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
            then show False using `p` ..}&lt;br /&gt;
          {assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
            then show False using `q`..}&lt;br /&gt;
       qed&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
lemma ej5_pfm:&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;
  show False&lt;br /&gt;
  using `¬p ∨ ¬q`&lt;br /&gt;
  proof &lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using `p ∧ q` by (rule conjunct1)&lt;br /&gt;
    with `¬p` show False by (rule notE)&lt;br /&gt;
    next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using `p ∧ q` by (rule conjunct2)&lt;br /&gt;
    with `¬q` show False by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej5_juaruipav:&lt;br /&gt;
 assumes 1:&amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
 shows &amp;quot; ¬(p ∧ q)&amp;quot;&lt;br /&gt;
 using 1&lt;br /&gt;
 proof &lt;br /&gt;
    assume 2: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    show &amp;quot;¬ (p ∧ q)&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume 3: &amp;quot; p ∧ q&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;p&amp;quot; using 3 by (rule conjunct1)&lt;br /&gt;
      show &amp;quot;False &amp;quot; using 2 4 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
next&lt;br /&gt;
    assume 5: &amp;quot;¬q&amp;quot;&lt;br /&gt;
    show &amp;quot;¬ (p ∧ q)&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume 6: &amp;quot; p ∧ q&amp;quot;&lt;br /&gt;
      have 7:&amp;quot;q&amp;quot; using 6 by (rule conjunct2)&lt;br /&gt;
      show &amp;quot;False &amp;quot; using 5 7 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej5_auto:&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows  &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej5:&lt;br /&gt;
  assumes 0:&amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows  &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 1:&amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  have 2:&amp;quot;p&amp;quot; using 1 ..&lt;br /&gt;
  have 3:&amp;quot;q&amp;quot; using 1 ..&lt;br /&gt;
  show &amp;quot;False&amp;quot; using 0&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    then show &amp;quot;False&amp;quot; using 2 ..&lt;br /&gt;
  next &lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    then show &amp;quot;False&amp;quot; using 3 ..&lt;br /&gt;
  qed&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) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4 pabflomar juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma Ejercicio_6:&lt;br /&gt;
  shows &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;
  show &amp;quot;p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    with `(p ⟶ q) ⟶ p` have &amp;quot;¬(p ⟶ q)&amp;quot; by (rule mt)&lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with `¬p` have False ..&lt;br /&gt;
      then have &amp;quot;q&amp;quot; ..}&lt;br /&gt;
    then have &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
    with `¬(p ⟶ q)` show False ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 06:&lt;br /&gt;
     &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;     &lt;br /&gt;
   proof&lt;br /&gt;
     assume 1: &amp;quot;((p ⟶ q) ⟶ p)&amp;quot;&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;
        with 1 have 2: &amp;quot;¬(p⟶q)&amp;quot; by (rule mt)&lt;br /&gt;
        then show &amp;quot;False&amp;quot;&lt;br /&gt;
        proof&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;
           then show &amp;quot;(p⟶q)&amp;quot; by (rule impI)&lt;br /&gt;
        qed&lt;br /&gt;
     qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej6_auto:&amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej6:&amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume 1:&amp;quot;(p ⟶ q)⟶p&amp;quot;&lt;br /&gt;
  show &amp;quot;p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume 2:&amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 4:&amp;quot;¬(p⟶q)&amp;quot; using 1 2 by (rule mt) &lt;br /&gt;
    {assume 5:&amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;False&amp;quot; using 2 5 ..&lt;br /&gt;
    then have &amp;quot;q&amp;quot; ..}&lt;br /&gt;
    then have 6:&amp;quot;p⟶q&amp;quot; ..&lt;br /&gt;
    show &amp;quot;False&amp;quot; using 4 6 .. &lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1 pabflomar&amp;quot;&lt;br /&gt;
lemma Ejercicio_7:&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;
  { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    with assms have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
    then have False using `p` ..}&lt;br /&gt;
  then show &amp;quot;q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
  lemma 07:&lt;br /&gt;
    assumes &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 1: &amp;quot;p&amp;quot;&lt;br /&gt;
          {assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
            with assms have &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
            then have &amp;quot;False&amp;quot; using 1 ..}&lt;br /&gt;
     then have &amp;quot;¬¬q&amp;quot; by (rule notI)&lt;br /&gt;
     then show &amp;quot;q&amp;quot; by (rule notnotD)}&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&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;
  then have &amp;quot;¬¬p&amp;quot; by (rule notnotI)&lt;br /&gt;
  with assms(1) have &amp;quot;¬¬q&amp;quot; by (rule mt)&lt;br /&gt;
  then show &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej7_juaruipav:&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 &lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;¬¬p&amp;quot; using 2 by (rule notnotI)&lt;br /&gt;
  have 4: &amp;quot;¬¬q&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
  show &amp;quot;q&amp;quot; using 4 by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej7_auto:&lt;br /&gt;
   assumes &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
   shows &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej7:&lt;br /&gt;
   assumes 0:&amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
   shows &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 1:&amp;quot;p&amp;quot;&lt;br /&gt;
  then have 2:&amp;quot;¬¬p&amp;quot; by (rule notnotI)&lt;br /&gt;
  have &amp;quot;¬¬q&amp;quot; using 0 2 by (rule mt)&lt;br /&gt;
  then have &amp;quot;q&amp;quot; by (rule notnotD)}&lt;br /&gt;
  then show &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_8:&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 ∨ p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    then have &amp;quot;p ∨ q&amp;quot; ..}&lt;br /&gt;
  { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q ∨ q&amp;quot; ..&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      then have &amp;quot;p ∨ q&amp;quot; ..}&lt;br /&gt;
    { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
      with `¬p` have &amp;quot;¬p ∧ ¬q&amp;quot; ..&lt;br /&gt;
      with assms have False ..&lt;br /&gt;
      then have &amp;quot;p ∨ q&amp;quot; ..}&lt;br /&gt;
    with `¬q ∨ q` have &amp;quot;p ∨ q&amp;quot; using `q ⟹ p ∨ q` ..}&lt;br /&gt;
  with `¬p ∨ p` show &amp;quot;p ∨ q&amp;quot; using `p ⟹ p ∨ q` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla pabflomar (No se usar otro lema sin usar el simp) maresccas4 (rule 03, en lugar de simp)&amp;quot;&lt;br /&gt;
{* Marco lleva razón. GRACIAS!!! *}&lt;br /&gt;
&lt;br /&gt;
  lemma 08:&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;
    then have &amp;quot;¬p ∧ ¬q&amp;quot; by (rule 03)&lt;br /&gt;
    with assms show &amp;quot;False&amp;quot; ..&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej8_auto:&lt;br /&gt;
   assumes &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
   shows &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej8:&lt;br /&gt;
   assumes 0:&amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
   shows &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 1:&amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  have 2:&amp;quot;¬p ∧ ¬q&amp;quot; using 1 by (rule ej3)&lt;br /&gt;
  have &amp;quot;False&amp;quot; using 0 2 ..}&lt;br /&gt;
  then show &amp;quot;p ∨ q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1, maresccas4 domlloriv&amp;quot;&lt;br /&gt;
lemma Ejercicio_9:&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&amp;quot;&lt;br /&gt;
    then have &amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then show &amp;quot;p&amp;quot; by (rule ccontr)&lt;br /&gt;
  { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    then have &amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
    with assms have False ..}&lt;br /&gt;
  then show &amp;quot;q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar, marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej9_pfm:&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 1: &amp;quot;¬¬p ∧ ¬¬q&amp;quot; using assms by (rule ej3_pfm)&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;
  show &amp;quot;p&amp;quot; using 2 by (rule notnotD)&lt;br /&gt;
  show &amp;quot;q&amp;quot; using 3 by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej9_juaruipav:&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 &lt;br /&gt;
    have 2:&amp;quot;(¬¬p)∧(¬¬q)&amp;quot; using 1 by (rule ej3_juaruipav)&lt;br /&gt;
    have &amp;quot;(¬¬p)&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
    then show &amp;quot;p&amp;quot; by (rule notnotD)   &lt;br /&gt;
    next&lt;br /&gt;
    have 3:&amp;quot;(¬¬p)∧(¬¬q)&amp;quot; using 1 by (rule ej3_juaruipav)&lt;br /&gt;
    have &amp;quot;(¬¬q)&amp;quot; using 3 by (rule conjunct2)&lt;br /&gt;
    then show &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej9_auto:&lt;br /&gt;
   assumes &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
   shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej9:&lt;br /&gt;
   assumes 0:&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&amp;quot;&lt;br /&gt;
   then have 1:&amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
     have &amp;quot;False&amp;quot; using 0 1 ..}&lt;br /&gt;
     then show &amp;quot;p&amp;quot; by (rule ccontr)&lt;br /&gt;
   next&lt;br /&gt;
   {assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
     then have 1:&amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
     have &amp;quot;False&amp;quot; using 0 1 ..}&lt;br /&gt;
   then show &amp;quot;q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
lemma ej10_pfm:&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 1:&amp;quot;¬ (¬ p ∨ ¬ q)&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;p ∧ q&amp;quot; using 1 by (rule ej9_pfm)&lt;br /&gt;
    with assms show False by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_10:&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 ∨ p&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;¬q ∨ q&amp;quot; ..&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      with `p` have &amp;quot;p ∧ q&amp;quot; ..&lt;br /&gt;
      with assms have False ..&lt;br /&gt;
      then have &amp;quot;¬p ∨ ¬q&amp;quot; ..}&lt;br /&gt;
    { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
      then have &amp;quot;¬p ∨ ¬q&amp;quot; ..}&lt;br /&gt;
    with `¬q ∨ q` have &amp;quot;¬p ∨ ¬q&amp;quot; using `q ⟹ ¬ p ∨ ¬ q` ..}&lt;br /&gt;
  { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    then have &amp;quot;¬p ∨ ¬q&amp;quot; ..}&lt;br /&gt;
  with `¬p ∨ p` show &amp;quot;¬p ∨ ¬q&amp;quot; using ` p ⟹ ¬ p ∨ ¬ q` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma a10:&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&amp;quot;&lt;br /&gt;
    then have &amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
    with `¬(¬p ∨ ¬q)` have False ..}&lt;br /&gt;
  hence &amp;quot;¬¬p&amp;quot; ..&lt;br /&gt;
  thus &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
  { assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    then have &amp;quot;¬p ∨ ¬q&amp;quot; ..&lt;br /&gt;
    with `¬(¬p ∨ ¬q)` have False ..}&lt;br /&gt;
  hence &amp;quot;¬¬q&amp;quot; ..&lt;br /&gt;
  thus &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma 10:&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;
  then have &amp;quot;p ∧ q&amp;quot; by (rule a10)&lt;br /&gt;
  with assms(1) show False ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* -----&lt;br /&gt;
  Ejercicio 9 haciendo uso del Ejercicio 10&lt;br /&gt;
 ----------*}&lt;br /&gt;
lemma &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;
  then have &amp;quot;¬p ∨ ¬q&amp;quot; by (rule 10)&lt;br /&gt;
  with assms(1) show False ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 10:&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;
    then have 1:&amp;quot;p ∧ q&amp;quot; by (rule 09)&lt;br /&gt;
    with assms show &amp;quot;False&amp;quot; ..&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej10_auto:&lt;br /&gt;
   assumes &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
   shows &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej10:&lt;br /&gt;
   assumes 0:&amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
   shows &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  {assume 1:&amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
  have 2:&amp;quot;p ∧ q&amp;quot; using 1 by (rule ej9)&lt;br /&gt;
  have 3:&amp;quot;False&amp;quot; using 0 2 .. }&lt;br /&gt;
  then show &amp;quot;¬p ∨ ¬q&amp;quot; by (rule ccontr)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_11:&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬(p ⟶ q) ∨ (p ⟶ q)&amp;quot; ..&lt;br /&gt;
  { assume &amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
    then have &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..}&lt;br /&gt;
  { assume &amp;quot;¬(p ⟶ q)&amp;quot;&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      { assume &amp;quot;p&amp;quot;&lt;br /&gt;
        have &amp;quot;q&amp;quot; using `q` .}&lt;br /&gt;
      then have &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
      with `¬(p ⟶ q)` have False ..&lt;br /&gt;
      then have &amp;quot;p&amp;quot; ..}&lt;br /&gt;
    then have &amp;quot;q ⟶ p&amp;quot; ..&lt;br /&gt;
    then have &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..}&lt;br /&gt;
  with `¬(p ⟶ q) ∨ (p ⟶ q)` show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; using `p ⟶ q ⟹ (p ⟶ q) ∨ (q ⟶ p)` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1:&amp;quot;¬(p ⟶ q) ∨ (p ⟶ q)&amp;quot; ..&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..&lt;br /&gt;
  next&lt;br /&gt;
    {  assume &amp;quot;¬(p ⟶ q)&amp;quot;&lt;br /&gt;
       {  assume &amp;quot;q&amp;quot;&lt;br /&gt;
          {  assume &amp;quot;p&amp;quot;&lt;br /&gt;
             have &amp;quot;q&amp;quot; using `q` .}&lt;br /&gt;
          then have &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
          with `¬(p ⟶ q)` have False ..&lt;br /&gt;
          then have &amp;quot;p&amp;quot; .. }&lt;br /&gt;
       then have &amp;quot;q ⟶ p&amp;quot; ..&lt;br /&gt;
       then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..}&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
{* Sólo cambia respecto de marco en el cambio del . por by this *}&lt;br /&gt;
lemma&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1:&amp;quot;¬(p ⟶ q) ∨ (p ⟶ q)&amp;quot; ..&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
  using 1&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..&lt;br /&gt;
    next&lt;br /&gt;
    {  assume &amp;quot;¬(p ⟶ q)&amp;quot;&lt;br /&gt;
       {  assume &amp;quot;q&amp;quot;&lt;br /&gt;
          {  assume &amp;quot;p&amp;quot;&lt;br /&gt;
             have &amp;quot;q&amp;quot; using `q` by this&lt;br /&gt;
          }&lt;br /&gt;
          then have &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
          with `¬(p ⟶ q)` have False ..&lt;br /&gt;
          then have &amp;quot;p&amp;quot; .. &lt;br /&gt;
    }&lt;br /&gt;
    then have &amp;quot;q ⟶ p&amp;quot; ..&lt;br /&gt;
    then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..}&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej11_auto:&amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
 lemma ej11:&lt;br /&gt;
  shows &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1:&amp;quot;¬(p ⟶ q) ∨ (p ⟶ q) &amp;quot; by (rule excluded_middle)&lt;br /&gt;
  then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    note 1&lt;br /&gt;
    moreover&lt;br /&gt;
    {assume &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
    then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..}&lt;br /&gt;
    moreover&lt;br /&gt;
    {assume 2:&amp;quot;¬(p ⟶ q)&amp;quot;&lt;br /&gt;
      {assume 3:&amp;quot;q&amp;quot;&lt;br /&gt;
        {assume &amp;quot;p&amp;quot;&lt;br /&gt;
          have &amp;quot;q&amp;quot; using 3 .}&lt;br /&gt;
        then have 4:&amp;quot;p⟶q&amp;quot; ..&lt;br /&gt;
        have &amp;quot;False&amp;quot; using 2 4 ..&lt;br /&gt;
        then have &amp;quot;p&amp;quot; ..}&lt;br /&gt;
      then have &amp;quot;q⟶p&amp;quot; ..&lt;br /&gt;
      then show &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot; ..}&lt;br /&gt;
    qed       &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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=453</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=453"/>
		<updated>2014-01-23T00:27:45Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R9: Deducción natural proposicional (1) *}&lt;br /&gt;
&lt;br /&gt;
theory R9&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 lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural necesarias son las&lt;br /&gt;
  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;
  --------------------------------------------------------------------- &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;
&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 ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel, pabflomar juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma ej1_auto:&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;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej1:&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 &amp;quot;r&amp;quot; using 4 2 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;q⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_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;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with assms have &amp;quot;q ⟶ r&amp;quot;  ..&lt;br /&gt;
      then have &amp;quot;r&amp;quot; using `q` ..  }&lt;br /&gt;
    then have &amp;quot;p ⟶ r&amp;quot; ..  }&lt;br /&gt;
    then show &amp;quot;q ⟶ (p ⟶ r)&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &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; ..&lt;br /&gt;
     thus &amp;quot;r&amp;quot; using `q`..&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 01:&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 1: &amp;quot;q&amp;quot;&lt;br /&gt;
      {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
        have &amp;quot;q⟶r&amp;quot; using assms(1) 2  by (rule mp)&lt;br /&gt;
        then have &amp;quot;r&amp;quot; using 1 by (rule mp)}&lt;br /&gt;
      then have &amp;quot;p⟶r&amp;quot; ..}&lt;br /&gt;
    then show &amp;quot;q ⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
    qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel, pabflomar, domlloriv&amp;quot;&lt;br /&gt;
lemma ej2_auto:&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 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej2:&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;
 {assume 2:&amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
    {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
      have 5:&amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p ⟶ q)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&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` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using assms `p` ..&lt;br /&gt;
    then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &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;
    have &amp;quot;q&amp;quot; using `p ⟶ q` `p` ..&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using `p ⟶ (q ⟶ r)` `p` .. &lt;br /&gt;
    show &amp;quot;r&amp;quot; using `q ⟶ r` `q`  ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 02:&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 1: &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
      {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
        have &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
        have &amp;quot;q⟶r&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
         then have &amp;quot;r&amp;quot; using `q` by (rule mp)}&lt;br /&gt;
      then have &amp;quot;p⟶r&amp;quot;..}&lt;br /&gt;
    then show &amp;quot;(p⟶q) ⟶ (p⟶r)&amp;quot; ..&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej2-jua: &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;
  assume 2: &amp;quot; p ⟶ q&amp;quot;&lt;br /&gt;
  show &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 2 3 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      show &amp;quot;r&amp;quot; using 5 4 by (rule mp)&lt;br /&gt;
    qed&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;
-- &amp;quot;irealetei, domlloriv&amp;quot;&lt;br /&gt;
lemma ej3_auto:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej3:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
 { assume 1:&amp;quot;(p⟶(q⟶r))&amp;quot;&lt;br /&gt;
     {assume 3:&amp;quot;p⟶q&amp;quot;&lt;br /&gt;
       {assume 4:&amp;quot;p&amp;quot;&lt;br /&gt;
         have 5: &amp;quot;q⟶r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
         have 6:&amp;quot;q&amp;quot; using 3 4 by (rule mp)&lt;br /&gt;
         have &amp;quot;r&amp;quot; using 5 6 by (rule mp)}&lt;br /&gt;
       then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
     then have &amp;quot;(p⟶q)⟶p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p⟶(q⟶r))⟶((p⟶q)⟶p⟶r)&amp;quot; by (rule impI)  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1, maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&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 &amp;quot;p&amp;quot;&lt;br /&gt;
      with  `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
      have &amp;quot;q ⟶ r&amp;quot; using `p ⟶ q ⟶ r` `p` ..&lt;br /&gt;
      then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma ejer_3_auto:&lt;br /&gt;
  shows &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
thm ej2_auto&lt;br /&gt;
&lt;br /&gt;
lemma ejer_3_detalle:&lt;br /&gt;
  shows &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  show &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot; using ej2_auto by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
 lemma 03:&lt;br /&gt;
   &amp;quot;(p ⟶ (q ⟶ r))⟶((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
 proof-&lt;br /&gt;
   {assume 1: &amp;quot;(p ⟶ (q ⟶ r))&amp;quot;&lt;br /&gt;
    {assume 2: &amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
      {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
        have &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
        have &amp;quot;q ⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
        then have &amp;quot;r&amp;quot; using `q` by (rule mp)}&lt;br /&gt;
      then have&amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
    then have &amp;quot;((p ⟶ q) ⟶ (p ⟶ r))&amp;quot; by (rule impI)}&lt;br /&gt;
   then show &amp;quot;(p ⟶ (q ⟶ r))⟶((p ⟶ q) ⟶ (p ⟶ r))&amp;quot; by (rule impI)&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej3-jua:  &amp;quot; (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof&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&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&lt;br /&gt;
           assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
           have 4:&amp;quot;q&amp;quot; using 2 3 ..&lt;br /&gt;
           have 5: &amp;quot;q⟶r&amp;quot; using 1 3  by (rule mp)&lt;br /&gt;
           show &amp;quot;r&amp;quot; using 5 4 ..&lt;br /&gt;
       qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel, domlloriv&amp;quot;&lt;br /&gt;
lemma ej4_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&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; ..&lt;br /&gt;
    show &amp;quot;r&amp;quot; using `(p ⟶ q) ⟶ r` `p ⟶ q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej4-jua: &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;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q⟶r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;p⟶q&amp;quot; using 3 by (rule impI)&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;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel, domlloriv&amp;quot;&lt;br /&gt;
lemma ej5_auto:&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 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej5:&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;
  {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;
    have &amp;quot;q ∧ r&amp;quot; using 5 6 by (rule conjI)}&lt;br /&gt;
  then show &amp;quot;p ⟶ q ∧ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1, maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_5:&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 &amp;quot;p&amp;quot;&lt;br /&gt;
  have &amp;quot;(p ⟶ q)&amp;quot; using assms ..&lt;br /&gt;
  then have &amp;quot;q&amp;quot; using `p` ..&lt;br /&gt;
  have &amp;quot;(p ⟶ r)&amp;quot; using assms ..&lt;br /&gt;
  then have &amp;quot;r&amp;quot; using `p` ..&lt;br /&gt;
  with `q` show &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel, pabflomar&amp;quot;&lt;br /&gt;
lemma ejer_5_detalle:&lt;br /&gt;
  assumes 0:&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 1:&amp;quot;p⟶q&amp;quot; using 0 by (rule conjunct1)&lt;br /&gt;
  have 2:&amp;quot;p⟶r&amp;quot; using 0 by (rule conjunct2)&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 3 by (rule mp)&lt;br /&gt;
     have 6:&amp;quot;q ∧ r&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
  }then show &amp;quot;p ⟶ q ∧ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej5-jua:&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;
  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;
&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;
-- &amp;quot;irealetei,julrobrel&amp;quot;&lt;br /&gt;
lemma ej6_auto:&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 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej6:&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;
  {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;
    have &amp;quot;q&amp;quot; using 3 by (rule conjunct1)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶q&amp;quot;  by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;q∧r&amp;quot; using 1 5 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 6 by (rule conjunct2)}&lt;br /&gt;
    then have 5:&amp;quot;p⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶q) ∧ (p ⟶r)&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1, maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_6:&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&amp;quot;&lt;br /&gt;
  with assms have &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;q&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
  {assume &amp;quot;p&amp;quot;&lt;br /&gt;
  with assms have &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;r&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ⟶ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej6-jua: &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;
  {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;
   have  &amp;quot;q&amp;quot; using 3 by (rule conjunct1)}&lt;br /&gt;
   then show &amp;quot;p⟶q&amp;quot; ..&lt;br /&gt;
  next&lt;br /&gt;
  {assume 5: &amp;quot;p&amp;quot;&lt;br /&gt;
   have 6:&amp;quot;q∧r&amp;quot; using 1 5 by (rule mp)&lt;br /&gt;
   have  &amp;quot;r&amp;quot; using 6 by (rule conjunct2)}&lt;br /&gt;
   then show &amp;quot;p⟶r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel, pabflomar, domlloriv&amp;quot;&lt;br /&gt;
lemma ej7_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej7:&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;p&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;&lt;br /&gt;
    have 5:&amp;quot;q&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 3 5 by (rule mp)}&lt;br /&gt;
  then show &amp;quot;(p⟶q)⟶r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1, maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_7:&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;
  have &amp;quot;p&amp;quot; using assms  ..&lt;br /&gt;
  with `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
  have &amp;quot;q ⟶ r&amp;quot; using assms ..&lt;br /&gt;
  then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej7:&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;
  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 &amp;quot;r&amp;quot; using 4 5 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 8. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1, julrobrel&amp;quot;&lt;br /&gt;
lemma ej8_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej8:&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 -&lt;br /&gt;
  {assume 2:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    moreover&lt;br /&gt;
       {assume &amp;quot;p&amp;quot;&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI1)}&lt;br /&gt;
    moreover&lt;br /&gt;
      {assume 3:&amp;quot;q&amp;quot;&lt;br /&gt;
        have &amp;quot;r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI2)}&lt;br /&gt;
    ultimately have &amp;quot;p ∨ r&amp;quot;  by (rule disjE)}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel: no estoy seguro de que esto esté bien&amp;quot;&lt;br /&gt;
lemma ejer_8_detallado2:&lt;br /&gt;
   assumes 0:&amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
   shows   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof (cases)&lt;br /&gt;
  assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
  show   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; using 0 by simp&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  show   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; using 0 by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &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;
  thus &amp;quot;p ∨ r&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      thus &amp;quot;p ∨ r&amp;quot; .. }&lt;br /&gt;
  next&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      have &amp;quot;r&amp;quot; using assms `q` ..&lt;br /&gt;
      thus &amp;quot;p ∨ r&amp;quot; .. }&lt;br /&gt;
  qed&lt;br /&gt;
qed &lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav: Si quito el moreover no pasa nada.. ¿y eso? tengo dos objetivos en proof&amp;quot;&lt;br /&gt;
lemma ej8: &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 &lt;br /&gt;
  assume 2:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  thus &amp;quot; p ∨ r&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    then show  &amp;quot;p ∨ r&amp;quot; ..} &lt;br /&gt;
moreover&lt;br /&gt;
   { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 1 4  by (rule mp)&lt;br /&gt;
    then show &amp;quot;p ∨ r&amp;quot; ..}&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1, julrobrel, domlloriv&amp;quot;&lt;br /&gt;
lemma ej9_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej9:&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 -&lt;br /&gt;
  {assume  &amp;quot;p ∨ q &amp;quot;&lt;br /&gt;
  moreover &lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 3:&amp;quot;(p ⟶ r)&amp;quot; using 1 by (rule conjunct1) &lt;br /&gt;
      have &amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
  moreover&lt;br /&gt;
    {assume 4:&amp;quot;q&amp;quot;&lt;br /&gt;
      have 5:&amp;quot;(q ⟶ r)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
  ultimately have  &amp;quot;r&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejer_9_detalle:&lt;br /&gt;
   assumes 0:&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 1:&amp;quot;p∨q&amp;quot;&lt;br /&gt;
    moreover&lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have  3:&amp;quot;p⟶r&amp;quot; using 0 by (rule conjunct1)&lt;br /&gt;
      have  4:&amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
    moreover&lt;br /&gt;
    {assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
       have 6:&amp;quot;q⟶r&amp;quot; using 0 by (rule conjunct2)&lt;br /&gt;
       have 7:&amp;quot;r&amp;quot; using 6 5 by (rule mp)}&lt;br /&gt;
    ultimately have 8:&amp;quot;r&amp;quot; by (rule disjE)}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&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;
  thus &amp;quot;r&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      have &amp;quot;p ⟶ r&amp;quot; using assms ..&lt;br /&gt;
      thus &amp;quot;r&amp;quot; using `p` ..}&lt;br /&gt;
  next&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      have &amp;quot;q ⟶ r&amp;quot; using assms ..&lt;br /&gt;
      thus &amp;quot;r&amp;quot; using `q`..}&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej9: &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&lt;br /&gt;
  assume 2:  &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  thus &amp;quot;r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 4: &amp;quot;p⟶r&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
     show &amp;quot;r&amp;quot; using 4 3 by (rule mp)}&lt;br /&gt;
  moreover&lt;br /&gt;
     {assume 5: &amp;quot;q&amp;quot;&lt;br /&gt;
     have 6: &amp;quot;q⟶r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
     show &amp;quot;r&amp;quot; using 6 5 by (rule mp)}&lt;br /&gt;
  qed&lt;br /&gt;
qed  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1, julrobrel&amp;quot;&lt;br /&gt;
lemma ej10_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej10:&lt;br /&gt;
  assumes  1:&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;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:&amp;quot;p∨q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶r&amp;quot; by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;p∨q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    have 7:&amp;quot;r&amp;quot; using 1 6 by (rule mp)}&lt;br /&gt;
    then have 8:&amp;quot;q⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶r)∧(q⟶r)&amp;quot; using 4 8 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&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;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;p ∨ q&amp;quot; using `p` ..&lt;br /&gt;
    have &amp;quot;r&amp;quot; using assms `p ∨ q` ..}&lt;br /&gt;
  then show &amp;quot;p ⟶ r&amp;quot; ..&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;p ∨ q&amp;quot; using `q` ..&lt;br /&gt;
    have &amp;quot;r&amp;quot; using assms `p ∨ q` ..}&lt;br /&gt;
  thus &amp;quot;q ⟶ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej10:&lt;br /&gt;
assumes 1:&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;
  {assume 2 :&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:  &amp;quot;p ∨ q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
    have 4: &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    then show &amp;quot;p⟶r&amp;quot; .. &lt;br /&gt;
moreover&lt;br /&gt;
  {assume 5 :&amp;quot;q&amp;quot;&lt;br /&gt;
    have 6:  &amp;quot;p ∨ q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    have 7: &amp;quot;r&amp;quot; using 1 6 by (rule mp)}&lt;br /&gt;
    then show &amp;quot;q⟶r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=452</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=452"/>
		<updated>2014-01-23T00:24:46Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R9: Deducción natural proposicional (1) *}&lt;br /&gt;
&lt;br /&gt;
theory R9&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 lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural necesarias son las&lt;br /&gt;
  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;
  --------------------------------------------------------------------- &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;
&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 ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel, pabflomar juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma ej1_auto:&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;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej1:&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 &amp;quot;r&amp;quot; using 4 2 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;q⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_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;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with assms have &amp;quot;q ⟶ r&amp;quot;  ..&lt;br /&gt;
      then have &amp;quot;r&amp;quot; using `q` ..  }&lt;br /&gt;
    then have &amp;quot;p ⟶ r&amp;quot; ..  }&lt;br /&gt;
    then show &amp;quot;q ⟶ (p ⟶ r)&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &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; ..&lt;br /&gt;
     thus &amp;quot;r&amp;quot; using `q`..&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 01:&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 1: &amp;quot;q&amp;quot;&lt;br /&gt;
      {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
        have &amp;quot;q⟶r&amp;quot; using assms(1) 2  by (rule mp)&lt;br /&gt;
        then have &amp;quot;r&amp;quot; using 1 by (rule mp)}&lt;br /&gt;
      then have &amp;quot;p⟶r&amp;quot; ..}&lt;br /&gt;
    then show &amp;quot;q ⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
    qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel, pabflomar, domlloriv&amp;quot;&lt;br /&gt;
lemma ej2_auto:&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 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej2:&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;
 {assume 2:&amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
    {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
      have 5:&amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p ⟶ q)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&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` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using assms `p` ..&lt;br /&gt;
    then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &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;
    have &amp;quot;q&amp;quot; using `p ⟶ q` `p` ..&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using `p ⟶ (q ⟶ r)` `p` .. &lt;br /&gt;
    show &amp;quot;r&amp;quot; using `q ⟶ r` `q`  ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 02:&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 1: &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
      {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
        have &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
        have &amp;quot;q⟶r&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
         then have &amp;quot;r&amp;quot; using `q` by (rule mp)}&lt;br /&gt;
      then have &amp;quot;p⟶r&amp;quot;..}&lt;br /&gt;
    then show &amp;quot;(p⟶q) ⟶ (p⟶r)&amp;quot; ..&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej2-jua: &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;
  assume 2: &amp;quot; p ⟶ q&amp;quot;&lt;br /&gt;
  show &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 2 3 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      show &amp;quot;r&amp;quot; using 5 4 by (rule mp)&lt;br /&gt;
    qed&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;
-- &amp;quot;irealetei, domlloriv&amp;quot;&lt;br /&gt;
lemma ej3_auto:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej3:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
 { assume 1:&amp;quot;(p⟶(q⟶r))&amp;quot;&lt;br /&gt;
     {assume 3:&amp;quot;p⟶q&amp;quot;&lt;br /&gt;
       {assume 4:&amp;quot;p&amp;quot;&lt;br /&gt;
         have 5: &amp;quot;q⟶r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
         have 6:&amp;quot;q&amp;quot; using 3 4 by (rule mp)&lt;br /&gt;
         have &amp;quot;r&amp;quot; using 5 6 by (rule mp)}&lt;br /&gt;
       then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
     then have &amp;quot;(p⟶q)⟶p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p⟶(q⟶r))⟶((p⟶q)⟶p⟶r)&amp;quot; by (rule impI)  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1, maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&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 &amp;quot;p&amp;quot;&lt;br /&gt;
      with  `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
      have &amp;quot;q ⟶ r&amp;quot; using `p ⟶ q ⟶ r` `p` ..&lt;br /&gt;
      then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma ejer_3_auto:&lt;br /&gt;
  shows &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
thm ej2_auto&lt;br /&gt;
&lt;br /&gt;
lemma ejer_3_detalle:&lt;br /&gt;
  shows &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  show &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot; using ej2_auto by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
 lemma 03:&lt;br /&gt;
   &amp;quot;(p ⟶ (q ⟶ r))⟶((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
 proof-&lt;br /&gt;
   {assume 1: &amp;quot;(p ⟶ (q ⟶ r))&amp;quot;&lt;br /&gt;
    {assume 2: &amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
      {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
        have &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
        have &amp;quot;q ⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
        then have &amp;quot;r&amp;quot; using `q` by (rule mp)}&lt;br /&gt;
      then have&amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
    then have &amp;quot;((p ⟶ q) ⟶ (p ⟶ r))&amp;quot; by (rule impI)}&lt;br /&gt;
   then show &amp;quot;(p ⟶ (q ⟶ r))⟶((p ⟶ q) ⟶ (p ⟶ r))&amp;quot; by (rule impI)&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej3-jua:  &amp;quot; (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof&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&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&lt;br /&gt;
           assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
           have 4:&amp;quot;q&amp;quot; using 2 3 ..&lt;br /&gt;
           have 5: &amp;quot;q⟶r&amp;quot; using 1 3  by (rule mp)&lt;br /&gt;
           show &amp;quot;r&amp;quot; using 5 4 ..&lt;br /&gt;
       qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel, domlloriv&amp;quot;&lt;br /&gt;
lemma ej4_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&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; ..&lt;br /&gt;
    show &amp;quot;r&amp;quot; using `(p ⟶ q) ⟶ r` `p ⟶ q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej4-jua: &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;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q⟶r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;p⟶q&amp;quot; using 3 by (rule impI)&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;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel&amp;quot;&lt;br /&gt;
lemma ej5_auto:&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 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej5:&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;
  {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;
    have &amp;quot;q ∧ r&amp;quot; using 5 6 by (rule conjI)}&lt;br /&gt;
  then show &amp;quot;p ⟶ q ∧ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1, maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_5:&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 &amp;quot;p&amp;quot;&lt;br /&gt;
  have &amp;quot;(p ⟶ q)&amp;quot; using assms ..&lt;br /&gt;
  then have &amp;quot;q&amp;quot; using `p` ..&lt;br /&gt;
  have &amp;quot;(p ⟶ r)&amp;quot; using assms ..&lt;br /&gt;
  then have &amp;quot;r&amp;quot; using `p` ..&lt;br /&gt;
  with `q` show &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel, pabflomar&amp;quot;&lt;br /&gt;
lemma ejer_5_detalle:&lt;br /&gt;
  assumes 0:&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 1:&amp;quot;p⟶q&amp;quot; using 0 by (rule conjunct1)&lt;br /&gt;
  have 2:&amp;quot;p⟶r&amp;quot; using 0 by (rule conjunct2)&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 3 by (rule mp)&lt;br /&gt;
     have 6:&amp;quot;q ∧ r&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
  }then show &amp;quot;p ⟶ q ∧ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej5-jua:&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;
  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;
&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;
-- &amp;quot;irealetei,julrobrel&amp;quot;&lt;br /&gt;
lemma ej6_auto:&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 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej6:&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;
  {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;
    have &amp;quot;q&amp;quot; using 3 by (rule conjunct1)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶q&amp;quot;  by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;q∧r&amp;quot; using 1 5 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 6 by (rule conjunct2)}&lt;br /&gt;
    then have 5:&amp;quot;p⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶q) ∧ (p ⟶r)&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1, maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_6:&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&amp;quot;&lt;br /&gt;
  with assms have &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;q&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
  {assume &amp;quot;p&amp;quot;&lt;br /&gt;
  with assms have &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;r&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ⟶ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej6-jua: &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;
  {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;
   have  &amp;quot;q&amp;quot; using 3 by (rule conjunct1)}&lt;br /&gt;
   then show &amp;quot;p⟶q&amp;quot; ..&lt;br /&gt;
  next&lt;br /&gt;
  {assume 5: &amp;quot;p&amp;quot;&lt;br /&gt;
   have 6:&amp;quot;q∧r&amp;quot; using 1 5 by (rule mp)&lt;br /&gt;
   have  &amp;quot;r&amp;quot; using 6 by (rule conjunct2)}&lt;br /&gt;
   then show &amp;quot;p⟶r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel, pabflomar&amp;quot;&lt;br /&gt;
lemma ej7_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej7:&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;p&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;&lt;br /&gt;
    have 5:&amp;quot;q&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 3 5 by (rule mp)}&lt;br /&gt;
  then show &amp;quot;(p⟶q)⟶r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1, maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_7:&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;
  have &amp;quot;p&amp;quot; using assms  ..&lt;br /&gt;
  with `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
  have &amp;quot;q ⟶ r&amp;quot; using assms ..&lt;br /&gt;
  then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej7:&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;
  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 &amp;quot;r&amp;quot; using 4 5 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 8. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1, julrobrel&amp;quot;&lt;br /&gt;
lemma ej8_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej8:&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 -&lt;br /&gt;
  {assume 2:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    moreover&lt;br /&gt;
       {assume &amp;quot;p&amp;quot;&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI1)}&lt;br /&gt;
    moreover&lt;br /&gt;
      {assume 3:&amp;quot;q&amp;quot;&lt;br /&gt;
        have &amp;quot;r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI2)}&lt;br /&gt;
    ultimately have &amp;quot;p ∨ r&amp;quot;  by (rule disjE)}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel: no estoy seguro de que esto esté bien&amp;quot;&lt;br /&gt;
lemma ejer_8_detallado2:&lt;br /&gt;
   assumes 0:&amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
   shows   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof (cases)&lt;br /&gt;
  assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
  show   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; using 0 by simp&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  show   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; using 0 by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &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;
  thus &amp;quot;p ∨ r&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      thus &amp;quot;p ∨ r&amp;quot; .. }&lt;br /&gt;
  next&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      have &amp;quot;r&amp;quot; using assms `q` ..&lt;br /&gt;
      thus &amp;quot;p ∨ r&amp;quot; .. }&lt;br /&gt;
  qed&lt;br /&gt;
qed &lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav: Si quito el moreover no pasa nada.. ¿y eso? tengo dos objetivos en proof&amp;quot;&lt;br /&gt;
lemma ej8: &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 &lt;br /&gt;
  assume 2:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  thus &amp;quot; p ∨ r&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    then show  &amp;quot;p ∨ r&amp;quot; ..} &lt;br /&gt;
moreover&lt;br /&gt;
   { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 1 4  by (rule mp)&lt;br /&gt;
    then show &amp;quot;p ∨ r&amp;quot; ..}&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1, julrobrel&amp;quot;&lt;br /&gt;
lemma ej9_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej9:&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 -&lt;br /&gt;
  {assume  &amp;quot;p ∨ q &amp;quot;&lt;br /&gt;
  moreover &lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 3:&amp;quot;(p ⟶ r)&amp;quot; using 1 by (rule conjunct1) &lt;br /&gt;
      have &amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
  moreover&lt;br /&gt;
    {assume 4:&amp;quot;q&amp;quot;&lt;br /&gt;
      have 5:&amp;quot;(q ⟶ r)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
  ultimately have  &amp;quot;r&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejer_9_detalle:&lt;br /&gt;
   assumes 0:&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 1:&amp;quot;p∨q&amp;quot;&lt;br /&gt;
    moreover&lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have  3:&amp;quot;p⟶r&amp;quot; using 0 by (rule conjunct1)&lt;br /&gt;
      have  4:&amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
    moreover&lt;br /&gt;
    {assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
       have 6:&amp;quot;q⟶r&amp;quot; using 0 by (rule conjunct2)&lt;br /&gt;
       have 7:&amp;quot;r&amp;quot; using 6 5 by (rule mp)}&lt;br /&gt;
    ultimately have 8:&amp;quot;r&amp;quot; by (rule disjE)}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&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;
  thus &amp;quot;r&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      have &amp;quot;p ⟶ r&amp;quot; using assms ..&lt;br /&gt;
      thus &amp;quot;r&amp;quot; using `p` ..}&lt;br /&gt;
  next&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      have &amp;quot;q ⟶ r&amp;quot; using assms ..&lt;br /&gt;
      thus &amp;quot;r&amp;quot; using `q`..}&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej9: &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&lt;br /&gt;
  assume 2:  &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  thus &amp;quot;r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 4: &amp;quot;p⟶r&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
     show &amp;quot;r&amp;quot; using 4 3 by (rule mp)}&lt;br /&gt;
  moreover&lt;br /&gt;
     {assume 5: &amp;quot;q&amp;quot;&lt;br /&gt;
     have 6: &amp;quot;q⟶r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
     show &amp;quot;r&amp;quot; using 6 5 by (rule mp)}&lt;br /&gt;
  qed&lt;br /&gt;
qed  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1, julrobrel&amp;quot;&lt;br /&gt;
lemma ej10_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej10:&lt;br /&gt;
  assumes  1:&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;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:&amp;quot;p∨q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶r&amp;quot; by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;p∨q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    have 7:&amp;quot;r&amp;quot; using 1 6 by (rule mp)}&lt;br /&gt;
    then have 8:&amp;quot;q⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶r)∧(q⟶r)&amp;quot; using 4 8 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&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;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;p ∨ q&amp;quot; using `p` ..&lt;br /&gt;
    have &amp;quot;r&amp;quot; using assms `p ∨ q` ..}&lt;br /&gt;
  then show &amp;quot;p ⟶ r&amp;quot; ..&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;p ∨ q&amp;quot; using `q` ..&lt;br /&gt;
    have &amp;quot;r&amp;quot; using assms `p ∨ q` ..}&lt;br /&gt;
  thus &amp;quot;q ⟶ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej10:&lt;br /&gt;
assumes 1:&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;
  {assume 2 :&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:  &amp;quot;p ∨ q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
    have 4: &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    then show &amp;quot;p⟶r&amp;quot; .. &lt;br /&gt;
moreover&lt;br /&gt;
  {assume 5 :&amp;quot;q&amp;quot;&lt;br /&gt;
    have 6:  &amp;quot;p ∨ q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    have 7: &amp;quot;r&amp;quot; using 1 6 by (rule mp)}&lt;br /&gt;
    then show &amp;quot;q⟶r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=451</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_9&amp;diff=451"/>
		<updated>2014-01-23T00:22:49Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R9: Deducción natural proposicional (1) *}&lt;br /&gt;
&lt;br /&gt;
theory R9&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 lemas usando sólo las reglas básicas&lt;br /&gt;
  de deducción natural de la lógica proposicional. &lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural necesarias son las&lt;br /&gt;
  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;
  --------------------------------------------------------------------- &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;
&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 ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel, pabflomar juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma ej1_auto:&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;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej1:&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 &amp;quot;r&amp;quot; using 4 2 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;q⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_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;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with assms have &amp;quot;q ⟶ r&amp;quot;  ..&lt;br /&gt;
      then have &amp;quot;r&amp;quot; using `q` ..  }&lt;br /&gt;
    then have &amp;quot;p ⟶ r&amp;quot; ..  }&lt;br /&gt;
    then show &amp;quot;q ⟶ (p ⟶ r)&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &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; ..&lt;br /&gt;
     thus &amp;quot;r&amp;quot; using `q`..&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 01:&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 1: &amp;quot;q&amp;quot;&lt;br /&gt;
      {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
        have &amp;quot;q⟶r&amp;quot; using assms(1) 2  by (rule mp)&lt;br /&gt;
        then have &amp;quot;r&amp;quot; using 1 by (rule mp)}&lt;br /&gt;
      then have &amp;quot;p⟶r&amp;quot; ..}&lt;br /&gt;
    then show &amp;quot;q ⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
    qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel, pabflomar, domlloriv&amp;quot;&lt;br /&gt;
lemma ej2_auto:&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 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej2:&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;
 {assume 2:&amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
    {assume 3:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 4:&amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
      have 5:&amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
    then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p ⟶ q)⟶(p⟶r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma Ejercicio_2:&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` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using assms `p` ..&lt;br /&gt;
    then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &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;
    have &amp;quot;q&amp;quot; using `p ⟶ q` `p` ..&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using `p ⟶ (q ⟶ r)` `p` .. &lt;br /&gt;
    show &amp;quot;r&amp;quot; using `q ⟶ r` `q`  ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lemma 02:&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 1: &amp;quot;p⟶q&amp;quot;&lt;br /&gt;
      {assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
        have &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
        have &amp;quot;q⟶r&amp;quot; using assms(1) 2 by (rule mp)&lt;br /&gt;
         then have &amp;quot;r&amp;quot; using `q` by (rule mp)}&lt;br /&gt;
      then have &amp;quot;p⟶r&amp;quot;..}&lt;br /&gt;
    then show &amp;quot;(p⟶q) ⟶ (p⟶r)&amp;quot; ..&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej2-jua: &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;
  assume 2: &amp;quot; p ⟶ q&amp;quot;&lt;br /&gt;
  show &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 2 3 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;q⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      show &amp;quot;r&amp;quot; using 5 4 by (rule mp)&lt;br /&gt;
    qed&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;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma ej3_auto:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej3:&amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
 { assume 1:&amp;quot;(p⟶(q⟶r))&amp;quot;&lt;br /&gt;
     {assume 3:&amp;quot;p⟶q&amp;quot;&lt;br /&gt;
       {assume 4:&amp;quot;p&amp;quot;&lt;br /&gt;
         have 5: &amp;quot;q⟶r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
         have 6:&amp;quot;q&amp;quot; using 3 4 by (rule mp)&lt;br /&gt;
         have &amp;quot;r&amp;quot; using 5 6 by (rule mp)}&lt;br /&gt;
       then have &amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
     then have &amp;quot;(p⟶q)⟶p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
  then show &amp;quot;(p⟶(q⟶r))⟶((p⟶q)⟶p⟶r)&amp;quot; by (rule impI)  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1, maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_3:&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 &amp;quot;p&amp;quot;&lt;br /&gt;
      with  `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
      have &amp;quot;q ⟶ r&amp;quot; using `p ⟶ q ⟶ r` `p` ..&lt;br /&gt;
      then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma ejer_3_auto:&lt;br /&gt;
  shows &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
thm ej2_auto&lt;br /&gt;
&lt;br /&gt;
lemma ejer_3_detalle:&lt;br /&gt;
  shows &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  show &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot; using ej2_auto by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&lt;br /&gt;
 lemma 03:&lt;br /&gt;
   &amp;quot;(p ⟶ (q ⟶ r))⟶((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
 proof-&lt;br /&gt;
   {assume 1: &amp;quot;(p ⟶ (q ⟶ r))&amp;quot;&lt;br /&gt;
    {assume 2: &amp;quot;(p ⟶ q)&amp;quot;&lt;br /&gt;
      {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
        have &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
        have &amp;quot;q ⟶r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
        then have &amp;quot;r&amp;quot; using `q` by (rule mp)}&lt;br /&gt;
      then have&amp;quot;p⟶r&amp;quot; by (rule impI)}&lt;br /&gt;
    then have &amp;quot;((p ⟶ q) ⟶ (p ⟶ r))&amp;quot; by (rule impI)}&lt;br /&gt;
   then show &amp;quot;(p ⟶ (q ⟶ r))⟶((p ⟶ q) ⟶ (p ⟶ r))&amp;quot; by (rule impI)&lt;br /&gt;
   qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma ej3-jua:  &amp;quot; (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof&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&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&lt;br /&gt;
           assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
           have 4:&amp;quot;q&amp;quot; using 2 3 ..&lt;br /&gt;
           have 5: &amp;quot;q⟶r&amp;quot; using 1 3  by (rule mp)&lt;br /&gt;
           show &amp;quot;r&amp;quot; using 5 4 ..&lt;br /&gt;
       qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel&amp;quot;&lt;br /&gt;
lemma ej4_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&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; ..&lt;br /&gt;
    show &amp;quot;r&amp;quot; using `(p ⟶ q) ⟶ r` `p ⟶ q` ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej4-jua: &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;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q⟶r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;p⟶q&amp;quot; using 3 by (rule impI)&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;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel&amp;quot;&lt;br /&gt;
lemma ej5_auto:&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 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej5:&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;
  {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;
    have &amp;quot;q ∧ r&amp;quot; using 5 6 by (rule conjI)}&lt;br /&gt;
  then show &amp;quot;p ⟶ q ∧ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1, maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_5:&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 &amp;quot;p&amp;quot;&lt;br /&gt;
  have &amp;quot;(p ⟶ q)&amp;quot; using assms ..&lt;br /&gt;
  then have &amp;quot;q&amp;quot; using `p` ..&lt;br /&gt;
  have &amp;quot;(p ⟶ r)&amp;quot; using assms ..&lt;br /&gt;
  then have &amp;quot;r&amp;quot; using `p` ..&lt;br /&gt;
  with `q` show &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel, pabflomar&amp;quot;&lt;br /&gt;
lemma ejer_5_detalle:&lt;br /&gt;
  assumes 0:&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 1:&amp;quot;p⟶q&amp;quot; using 0 by (rule conjunct1)&lt;br /&gt;
  have 2:&amp;quot;p⟶r&amp;quot; using 0 by (rule conjunct2)&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 3 by (rule mp)&lt;br /&gt;
     have 6:&amp;quot;q ∧ r&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
  }then show &amp;quot;p ⟶ q ∧ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej5-jua:&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;
  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;
&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;
-- &amp;quot;irealetei,julrobrel&amp;quot;&lt;br /&gt;
lemma ej6_auto:&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 by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej6:&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;
  {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;
    have &amp;quot;q&amp;quot; using 3 by (rule conjunct1)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶q&amp;quot;  by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;q∧r&amp;quot; using 1 5 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 6 by (rule conjunct2)}&lt;br /&gt;
    then have 5:&amp;quot;p⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶q) ∧ (p ⟶r)&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1, maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_6:&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&amp;quot;&lt;br /&gt;
  with assms have &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;q&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ⟶ q&amp;quot; ..&lt;br /&gt;
  {assume &amp;quot;p&amp;quot;&lt;br /&gt;
  with assms have &amp;quot;q ∧ r&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;r&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ⟶ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej6-jua: &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;
  {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;
   have  &amp;quot;q&amp;quot; using 3 by (rule conjunct1)}&lt;br /&gt;
   then show &amp;quot;p⟶q&amp;quot; ..&lt;br /&gt;
  next&lt;br /&gt;
  {assume 5: &amp;quot;p&amp;quot;&lt;br /&gt;
   have 6:&amp;quot;q∧r&amp;quot; using 1 5 by (rule mp)&lt;br /&gt;
   have  &amp;quot;r&amp;quot; using 6 by (rule conjunct2)}&lt;br /&gt;
   then show &amp;quot;p⟶r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei,julrobrel, pabflomar&amp;quot;&lt;br /&gt;
lemma ej7_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej7:&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;p&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;&lt;br /&gt;
    have 5:&amp;quot;q&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 3 5 by (rule mp)}&lt;br /&gt;
  then show &amp;quot;(p⟶q)⟶r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1, maresccas4&amp;quot;&lt;br /&gt;
lemma Ejercicio_7:&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;
  have &amp;quot;p&amp;quot; using assms  ..&lt;br /&gt;
  with `p ⟶ q` have &amp;quot;q&amp;quot; ..&lt;br /&gt;
  have &amp;quot;q ⟶ r&amp;quot; using assms ..&lt;br /&gt;
  then show &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej7:&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;
  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 &amp;quot;r&amp;quot; using 4 5 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 8. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1, julrobrel&amp;quot;&lt;br /&gt;
lemma ej8_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej8:&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 -&lt;br /&gt;
  {assume 2:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    moreover&lt;br /&gt;
       {assume &amp;quot;p&amp;quot;&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI1)}&lt;br /&gt;
    moreover&lt;br /&gt;
      {assume 3:&amp;quot;q&amp;quot;&lt;br /&gt;
        have &amp;quot;r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
        then have &amp;quot;p ∨ r&amp;quot; by (rule disjI2)}&lt;br /&gt;
    ultimately have &amp;quot;p ∨ r&amp;quot;  by (rule disjE)}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel: no estoy seguro de que esto esté bien&amp;quot;&lt;br /&gt;
lemma ejer_8_detallado2:&lt;br /&gt;
   assumes 0:&amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
   shows   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof (cases)&lt;br /&gt;
  assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
  show   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; using 0 by simp&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  show   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot; using 0 by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &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;
  thus &amp;quot;p ∨ r&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      thus &amp;quot;p ∨ r&amp;quot; .. }&lt;br /&gt;
  next&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      have &amp;quot;r&amp;quot; using assms `q` ..&lt;br /&gt;
      thus &amp;quot;p ∨ r&amp;quot; .. }&lt;br /&gt;
  qed&lt;br /&gt;
qed &lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav: Si quito el moreover no pasa nada.. ¿y eso? tengo dos objetivos en proof&amp;quot;&lt;br /&gt;
lemma ej8: &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 &lt;br /&gt;
  assume 2:&amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  thus &amp;quot; p ∨ r&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    then show  &amp;quot;p ∨ r&amp;quot; ..} &lt;br /&gt;
moreover&lt;br /&gt;
   { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 1 4  by (rule mp)&lt;br /&gt;
    then show &amp;quot;p ∨ r&amp;quot; ..}&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1, julrobrel&amp;quot;&lt;br /&gt;
lemma ej9_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej9:&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 -&lt;br /&gt;
  {assume  &amp;quot;p ∨ q &amp;quot;&lt;br /&gt;
  moreover &lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have 3:&amp;quot;(p ⟶ r)&amp;quot; using 1 by (rule conjunct1) &lt;br /&gt;
      have &amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
  moreover&lt;br /&gt;
    {assume 4:&amp;quot;q&amp;quot;&lt;br /&gt;
      have 5:&amp;quot;(q ⟶ r)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
      have &amp;quot;r&amp;quot; using 5 4 by (rule mp)}&lt;br /&gt;
  ultimately have  &amp;quot;r&amp;quot; ..}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma ejer_9_detalle:&lt;br /&gt;
   assumes 0:&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 1:&amp;quot;p∨q&amp;quot;&lt;br /&gt;
    moreover&lt;br /&gt;
    {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
      have  3:&amp;quot;p⟶r&amp;quot; using 0 by (rule conjunct1)&lt;br /&gt;
      have  4:&amp;quot;r&amp;quot; using 3 2 by (rule mp)}&lt;br /&gt;
    moreover&lt;br /&gt;
    {assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
       have 6:&amp;quot;q⟶r&amp;quot; using 0 by (rule conjunct2)&lt;br /&gt;
       have 7:&amp;quot;r&amp;quot; using 6 5 by (rule mp)}&lt;br /&gt;
    ultimately have 8:&amp;quot;r&amp;quot; by (rule disjE)}&lt;br /&gt;
  then show &amp;quot;p ∨ q ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&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;
  thus &amp;quot;r&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      have &amp;quot;p ⟶ r&amp;quot; using assms ..&lt;br /&gt;
      thus &amp;quot;r&amp;quot; using `p` ..}&lt;br /&gt;
  next&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      have &amp;quot;q ⟶ r&amp;quot; using assms ..&lt;br /&gt;
      thus &amp;quot;r&amp;quot; using `q`..}&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej9: &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&lt;br /&gt;
  assume 2:  &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  thus &amp;quot;r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    {assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
     have 4: &amp;quot;p⟶r&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
     show &amp;quot;r&amp;quot; using 4 3 by (rule mp)}&lt;br /&gt;
  moreover&lt;br /&gt;
     {assume 5: &amp;quot;q&amp;quot;&lt;br /&gt;
     have 6: &amp;quot;q⟶r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
     show &amp;quot;r&amp;quot; using 6 5 by (rule mp)}&lt;br /&gt;
  qed&lt;br /&gt;
qed  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1, julrobrel&amp;quot;&lt;br /&gt;
lemma ej10_auto:&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;
using assms by auto&lt;br /&gt;
&lt;br /&gt;
lemma ej10:&lt;br /&gt;
  assumes  1:&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;
  {assume 2:&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:&amp;quot;p∨q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
    have &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    then have 4:&amp;quot;p⟶r&amp;quot; by (rule impI)&lt;br /&gt;
  {assume 5:&amp;quot;q&amp;quot;&lt;br /&gt;
    have 6:&amp;quot;p∨q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    have 7:&amp;quot;r&amp;quot; using 1 6 by (rule mp)}&lt;br /&gt;
    then have 8:&amp;quot;q⟶r&amp;quot;  by (rule impI)&lt;br /&gt;
  show &amp;quot;(p⟶r)∧(q⟶r)&amp;quot; using 4 8 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&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;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;p ∨ q&amp;quot; using `p` ..&lt;br /&gt;
    have &amp;quot;r&amp;quot; using assms `p ∨ q` ..}&lt;br /&gt;
  then show &amp;quot;p ⟶ r&amp;quot; ..&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;p ∨ q&amp;quot; using `q` ..&lt;br /&gt;
    have &amp;quot;r&amp;quot; using assms `p ∨ q` ..}&lt;br /&gt;
  thus &amp;quot;q ⟶ r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma ej10:&lt;br /&gt;
assumes 1:&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;
  {assume 2 :&amp;quot;p&amp;quot;&lt;br /&gt;
    have 3:  &amp;quot;p ∨ q&amp;quot; using 2 by (rule disjI1)&lt;br /&gt;
    have 4: &amp;quot;r&amp;quot; using 1 3 by (rule mp)}&lt;br /&gt;
    then show &amp;quot;p⟶r&amp;quot; .. &lt;br /&gt;
moreover&lt;br /&gt;
  {assume 5 :&amp;quot;q&amp;quot;&lt;br /&gt;
    have 6:  &amp;quot;p ∨ q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    have 7: &amp;quot;r&amp;quot; using 1 6 by (rule mp)}&lt;br /&gt;
    then show &amp;quot;q⟶r&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_8&amp;diff=413</id>
		<title>Relación 8</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_8&amp;diff=413"/>
		<updated>2014-01-16T09:23:47Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R8: Árboles binarios completos *}&lt;br /&gt;
&lt;br /&gt;
theory R8_Arboles_binarios_completos&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 no tienen información ni en los nodos y ni en las&lt;br /&gt;
  hojas. Por ejemplo, el árbol&lt;br /&gt;
          ·&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       ·     ·&lt;br /&gt;
      / \   / \&lt;br /&gt;
     ·   · ·   · &lt;br /&gt;
  se representa por &amp;quot;N (N H H) (N H H)&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype arbol = H | N arbol arbol&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N (N H H) (N H H)&amp;quot;&lt;br /&gt;
value &amp;quot;(N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;Este tambien es un arbol segun la definicion del tipo. Sin embargo no es completo.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (hojas a) es el número de hojas del árbol a. Por ejemplo,&lt;br /&gt;
     hojas (N (N H H) (N H H)) = 4&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
fun hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;hojas H = Suc 0&amp;quot;&lt;br /&gt;
| &amp;quot;hojas (N i d) = hojas i + hojas d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel maresccas4&amp;quot;&lt;br /&gt;
fun hojas_jrr :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
   &amp;quot;hojas_jrr H = 1&amp;quot;                     --&amp;quot;julrobrel: minima diferencia con la anterior&amp;quot;&lt;br /&gt;
  |&amp;quot;hojas_jrr (N i d) = (hojas_jrr i) + (hojas_jrr d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;hojas_jrr (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;hojas (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 4&amp;quot;&lt;br /&gt;
value &amp;quot;hojas (N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;= 5&amp;quot; --&amp;quot;julrobrel: la funcion tambien funciona sobre arboles binarios no completos&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (profundidad a) es la profundidad del árbol a. Por ejemplo,&lt;br /&gt;
     profundidad (N (N H H) (N H H)) = 2&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
fun profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad H = 0&amp;quot;&lt;br /&gt;
| &amp;quot;profundidad (N i d) = (if profundidad i &amp;gt; profundidad d then Suc (profundidad i) else Suc (profundidad d))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;&lt;br /&gt;
fun maximo :: &amp;quot;nat =&amp;gt; nat =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;maximo a b = (if a &amp;lt; b then b else a)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;maximo 3 4&amp;quot; -- &amp;quot;=4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;&lt;br /&gt;
fun profundidad_jrr :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad_jrr H = 0&amp;quot;&lt;br /&gt;
 |&amp;quot;profundidad_jrr (N i d) = Suc (maximo (profundidad_jrr i) (profundidad_jrr d))&amp;quot; --&amp;quot;julrobrel: En realidad al ser arboles completos no deberia hacer falta el maximo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;profundidad (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 2&amp;quot;&lt;br /&gt;
value &amp;quot;profundidad (N (N H H) (N (N H H) H))&amp;quot; -- &amp;quot;= 3&amp;quot; --&amp;quot;julrobrel: profundidad tambien funciona sobre arboles binarios no completos&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;profundidad_jrr (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 2&amp;quot;&lt;br /&gt;
value &amp;quot;profundidad_jrr (N (N H H) (N (N H H) H))&amp;quot; -- &amp;quot;= 3&amp;quot; --&amp;quot;julrobrel: profundidad tambien funciona sobre arboles binarios no completos&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4 domlloriv&amp;quot;&lt;br /&gt;
fun profundidad3 :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad3 (H) = 0&amp;quot;&lt;br /&gt;
| &amp;quot;profundidad3 (N ai ad) = 1 + (if (profundidad3 ai &amp;gt; profundidad3 ad) then profundidad3 ai else profundidad3 ad)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;profundidad3 (N (N H H) (N H (N H (N H H))))&amp;quot; -- &amp;quot;= 4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     abc :: &amp;quot;nat ⇒ arbol&amp;quot; &lt;br /&gt;
  tal que (abc n) es el árbol binario completo de profundidad n. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     abc 3 = N (N (N H H) (N H H)) (N (N H H) (N H H))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1, julrobrel irealetei juaruipav maresccas4 domlloriv&amp;quot;&lt;br /&gt;
fun abc :: &amp;quot;nat ⇒ arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;abc 0 = H&amp;quot;&lt;br /&gt;
| &amp;quot;abc (Suc n) = (N (abc n) (abc n))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;abc 3&amp;quot; -- &amp;quot;= N (N (N H H) (N H H)) (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un árbol binario a es completo respecto de la medida f si&lt;br /&gt;
  a es una hoja o bien a es de la forma (N i d) y se cumple que tanto i&lt;br /&gt;
  como d son árboles binarios completos respecto de f y, además, &lt;br /&gt;
  f(i) = f(r).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&lt;br /&gt;
  tal que (es_abc f a) se verifica si a es un árbol binario completo&lt;br /&gt;
  respecto de f.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 irealetei juaruipav maresccas4 domlloriv&amp;quot;&lt;br /&gt;
fun es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&amp;quot; where&lt;br /&gt;
  &amp;quot;es_abc f H = True&amp;quot;&lt;br /&gt;
| &amp;quot;es_abc f (N i d) = ((es_abc f i) ∧ (es_abc f d) ∧ (f i = f d))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;es_abc profundidad ( N (N (N H H) (N H H)) (N (N H H) (N H H)))&amp;quot; -- &amp;quot;true&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc profundidad ( N (N (N H H) (N H H)) (N H (N H H)))&amp;quot; -- &amp;quot;false&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc profundidad ( N (N (N H H) (N H H)) (N (N H H) H))&amp;quot; -- &amp;quot;false&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc profundidad ( N (N H (N H H)) (N H (N H H)))&amp;quot; -- &amp;quot;false&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;&lt;br /&gt;
fun es_abc_jrr:: &amp;quot;nat =&amp;gt; arbol =&amp;gt; bool&amp;quot; where&lt;br /&gt;
   &amp;quot;es_abc_jrr 0 H = True&amp;quot;&lt;br /&gt;
  |&amp;quot;es_abc_jrr (Suc f) H = False&amp;quot;&lt;br /&gt;
  |&amp;quot;es_abc_jrr 0 (N i d) = False&amp;quot; &lt;br /&gt;
  |&amp;quot;es_abc_jrr (Suc f) (N i d) = (((es_abc_jrr f i) ∧ (es_abc_jrr f d)) ∧ ((profundidad_jrr i) = (profundidad_jrr d)) ∧ ((profundidad_jrr i) = f))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;es_abc_jrr 2 (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc_jrr 0 (N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;=False&amp;quot; --&amp;quot;julrobrel: No es un arbol binario completo&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc_jrr 1 (N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;=False&amp;quot; --&amp;quot;julrobrel: No es un arbol binario completo&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc_jrr 2 (N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;=False&amp;quot; --&amp;quot;julrobrel: No es un arbol binario completo&amp;quot;&lt;br /&gt;
value &amp;quot;es_abc_jrr 3 (N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;=False&amp;quot; --&amp;quot;julrobrel: No es un arbol binario completo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. (size a) es el número de nodos del árbol a. Por ejemplo,&lt;br /&gt;
     size (N (N H H) (N H H)) = 3&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;size (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
value &amp;quot;size (N (N (N H H) (N H H)) (N (N H H) (N H H)))&amp;quot;&lt;br /&gt;
value &amp;quot;size (N (N H H) (N (N H H) H))&amp;quot; --&amp;quot;julrobrel: No es un arbol binario completo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. Tenemos 3 funciones de medida sobre los árboles: número de&lt;br /&gt;
  hojas, número de nodos y profundidad. A cada una le corresponde un&lt;br /&gt;
  concepto de completitud. En los siguientes ejercicios demostraremos&lt;br /&gt;
  que los tres conceptos de completitud son iguales.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de hojas.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
--&amp;quot;julrobrel: en un arbol binario completo la profundidad y las hojas estan relacionadas por la siguiente igualdad (hojas = 2^profundidad)&amp;quot;&lt;br /&gt;
lemma &amp;quot;(hojas (abc n))=2^(profundidad (abc n))&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei, diecabmen1, maresccas4&amp;quot;&lt;br /&gt;
(*irealetei: casi me estalla el cerebro con esta demo, gracias a Marco que me dio una pista hace un par de días sobre que el había usado el assumes. La automática se me queda a medias.*)&lt;br /&gt;
lemma 00:&lt;br /&gt;
 assumes &amp;quot;es_abc profundidad a&amp;quot;&lt;br /&gt;
 shows &amp;quot;hojas a = 2^(profundidad a)&amp;quot;&lt;br /&gt;
 using assms&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
lemma profundidad_hojas_completo: &amp;quot;es_abc hojas a = es_abc profundidad a&amp;quot;&lt;br /&gt;
 by (induct a) (auto simp add: 00)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4: no he sido capaz de terminar la demostración manual&amp;quot;&lt;br /&gt;
theorem &amp;quot;es_abc profundidad a = es_abc hojas a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
 show &amp;quot;?P H&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix 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;
 show &amp;quot;?P (N i d)&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume H: &amp;quot;es_abc profundidad (N i d)&amp;quot;&lt;br /&gt;
  then have &amp;quot;es_abc profundidad (N i d) = (es_abc profundidad i ∧ es_abc profundidad d ∧ profundidad i = profundidad d)&amp;quot;  by simp&lt;br /&gt;
  also have &amp;quot;... = (es_abc hojas i ∧ es_abc hojas d ∧ profundidad i = profundidad d)&amp;quot; using H1 H2  by simp&lt;br /&gt;
  also have &amp;quot;... = (es_abc hojas i ∧ es_abc hojas d ∧ hojas i = hojas d)&amp;quot; using H by (simp add: 00)&lt;br /&gt;
  also have &amp;quot;... = es_abc hojas (N i d)&amp;quot; by simp&lt;br /&gt;
  finally show ?thesis .&lt;br /&gt;
 next&lt;br /&gt;
  assume H: &amp;quot;¬ es_abc profundidad (N i d)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N i d)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
   assume I: &amp;quot;(es_abc profundidad i ∧ es_abc profundidad d)&amp;quot;&lt;br /&gt;
   then have &amp;quot;es_abc profundidad (N i d) = (es_abc profundidad i ∧ es_abc profundidad d ∧ profundidad i = profundidad d)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...= (profundidad i = profundidad d)&amp;quot; using H I by simp&lt;br /&gt;
   &lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que un árbol binario a es completo respecto del&lt;br /&gt;
  número de hojas syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
--&amp;quot;julrobrel: la relacion entre hojas y nodos la da la siguiente ecuacion (nodos = hojas -1) o lo que es lo mismo (nodos+1=hojas)&amp;quot;&lt;br /&gt;
lemma &amp;quot;Suc(size (abc n))=hojas (abc n)&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei maresccas4 diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
(*he conseguido hacer uno!! bieeeeeeeen!!&amp;quot;*)&lt;br /&gt;
lemma relaccion_hojas_nodo:&amp;quot;hojas (a) = size (a) + 1&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma hojas_size_completo: &amp;quot;es_abc hojas a = es_abc size a&amp;quot;&lt;br /&gt;
by (induct a) (auto simp add: relaccion_hojas_nodo)&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;es_abc hojas a = es_abc size a&amp;quot;&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  show &amp;quot;es_abc hojas H = es_abc size H&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
  fix i d&lt;br /&gt;
  assume HI1:&amp;quot;es_abc hojas i = es_abc size i&amp;quot;&lt;br /&gt;
  assume HI2:&amp;quot;es_abc hojas d = es_abc size d&amp;quot;&lt;br /&gt;
  show &amp;quot; es_abc hojas (N i d) = es_abc size (N i d)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
   have &amp;quot;es_abc hojas (N i d) = (es_abc hojas i ∧ es_abc hojas d ∧ hojas i = hojas d)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (es_abc size i ∧ es_abc size d ∧ hojas i = hojas d)&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
   also have &amp;quot;... = (es_abc size i ∧ es_abc size d ∧ size i = size d)&amp;quot; by (simp add:relaccion_hojas_nodo)&lt;br /&gt;
   also have &amp;quot;... =  es_abc size (N i d)&amp;quot; by simp&lt;br /&gt;
   finally show ?thesis by simp&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
--&amp;quot;julrobrel: la relacion entre la profundidad y el numero de nodos es (nodos+1=2^profundidad)&amp;quot;&lt;br /&gt;
lemma &amp;quot;Suc(size (abc n))=2^(profundidad (abc n))&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei: suponía que sería como el 7 pero no sale... por mucho que me pongo a definir lemas. De todos modos dejo donde me he quedado&amp;quot;&lt;br /&gt;
lemma 02:&lt;br /&gt;
assumes &amp;quot;es_abc size a&amp;quot;&lt;br /&gt;
shows &amp;quot;size a + 1 = 2^(profundidad a)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
lemma 03:&lt;br /&gt;
assumes &amp;quot;es_abc hojas a&amp;quot;&lt;br /&gt;
shows &amp;quot;Suc(size a) = hojas a&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;es_abc profundidad a = es_abc size a&amp;quot;&lt;br /&gt;
by (induct a) (auto simp add:00 02 03) --&amp;quot;He puesto todas la teorías aunque suponía que con 02 sería suficiente&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
(*irealetei: como me he complicado la existencia...*)&lt;br /&gt;
theorem &amp;quot;es_abc profundidad a = es_abc size a&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;(es_abc profundidad a = es_abc hojas a)&amp;quot; by (simp add: profundidad_hojas_completo)&lt;br /&gt;
  also have &amp;quot;...= es_abc size a&amp;quot; by (simp add: hojas_size_completo)&lt;br /&gt;
  finally show ?thesis.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que (abc n) es un árbol binario completo.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
--&amp;quot;julrobrel: para todo lo anterior nos hemos basado en que (abc n) siempre devuelve un arbol binario completo. Habra que demostrarlo...&amp;quot;&lt;br /&gt;
lemma profundidad_lemma: &amp;quot;profundidad_jrr (abc n) = n&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;es_abc_jrr n (abc n)&amp;quot;&lt;br /&gt;
by (induct n) (auto simp add:profundidad_lemma)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc profundidad (abc n)&amp;quot; by (induct n) auto&lt;br /&gt;
(* irealetei: es raro, hay que hacerlo por induct aunque parece que no usa la HI... pero por cases no se lo traga.&lt;br /&gt;
   Creo que está mejor la solución de marco, pero la dejo para comentarla.*)&lt;br /&gt;
lemma &amp;quot;es_abc profundidad (abc n)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;es_abc profundidad (abc 0)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume &amp;quot; es_abc profundidad (abc n)&amp;quot;&lt;br /&gt;
  then have &amp;quot;es_abc profundidad (abc (Suc n))= es_abc profundidad (N (abc n) (abc n))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = es_abc profundidad (abc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;es_abc profundidad (abc n) ⟹ es_abc profundidad (abc (Suc n))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc profundidad (abc n)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;es_abc profundidad (abc 0)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI: &amp;quot;es_abc profundidad (abc n)&amp;quot;&lt;br /&gt;
  then have &amp;quot;es_abc profundidad (abc (Suc n))= es_abc profundidad (N (abc n) (abc n))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (es_abc profundidad (abc n) ∧ es_abc profundidad (abc n) ∧ profundidad (abc n) = profundidad (abc n))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;es_abc profundidad (abc (Suc n))&amp;quot; using HI by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que si a es un árbolo binario completo&lt;br /&gt;
  respecto de la profundidad, entonces a es (abc (profundidad a)).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
lemma &amp;quot;(es_abc_jrr (profundidad_jrr a) a) ⟶ a = abc (profundidad_jrr a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4 domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc profundidad a ⟹ a = abc (profundidad a)&amp;quot; by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Encontrar una medida f tal que (es_abc f) es distinto de &lt;br /&gt;
  (es_abc size).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc_jrr f t = es_abc_jrr (size t) t&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
--&amp;quot;julrobrel: El arbol que es una hoja...&amp;quot;&lt;br /&gt;
(*&lt;br /&gt;
Quickcheck found a counterexample:&lt;br /&gt;
&lt;br /&gt;
f = Suc 0&lt;br /&gt;
t = H&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
es_abc f t = False&lt;br /&gt;
es_abc (size t) t = True&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei maresccas4 domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc f a = es_abc size a&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
(*f = λx. a&lt;br /&gt;
a = N H (N H H)*)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=373</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_7&amp;diff=373"/>
		<updated>2014-01-08T17:00:10Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R7: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R7_2&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;
-- &amp;quot;diecabmen1 maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&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)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
fun preOrden2 :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden2 (H a) = [a]&amp;quot;&lt;br /&gt;
 |&amp;quot;preOrden2 (N dato a1 a2) = dato#(preOrden2 a1 @ preOrden2 a2)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden2 (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [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;
     = [a,d,c,f,h,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4 irealetei domlloriv&amp;quot;&lt;br /&gt;
&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)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[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;
-- &amp;quot;diecabmen1 maresccas4 irealetei domlloriv&amp;quot;&lt;br /&gt;
&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)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[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;
-- &amp;quot;diecabmen1 maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&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)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei: Es igual que la anterior pero  los paréntesis no hacen falta&amp;quot;&lt;br /&gt;
fun espejo2 :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo2 (H dato) = (H dato)&amp;quot;&lt;br /&gt;
| &amp;quot;espejo2 (N dato a1 a2) = N dato (espejo2 a2) (espejo2 a1)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo2 (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&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;
-- &amp;quot;diecabmen1 maresccas4 irealetei domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
&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 a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;preOrden (espejo (N a1 a2 a3)) = preOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = [a1] @ preOrden (espejo a3) @ preOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev [a1] @ rev (postOrden a3) @ rev (postOrden a2)&amp;quot; using HI1 HI2 by simp &lt;br /&gt;
    also have &amp;quot;… = rev ((postOrden a2) @ (postOrden a3) @ [a1])&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix a::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  show &amp;quot;preOrden (espejo (H a)) = rev (postOrden (H a))&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix data::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  fix a1::&amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
  assume HI1:&amp;quot; preOrden (espejo a1) = rev (postOrden a1)&amp;quot;&lt;br /&gt;
  fix a2::&amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
  assume HI2:&amp;quot; preOrden (espejo a2) = rev (postOrden a2)&amp;quot;&lt;br /&gt;
  show &amp;quot;preOrden (espejo (N data a1 a2)) = rev (postOrden (N data a1 a2))&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;preOrden (espejo (N data a1 a2))=preOrden (N data (espejo a2) (espejo a1))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = data # (preOrden(espejo a2) @ preOrden(espejo a1))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = data # (rev (postOrden a2) @ rev (postOrden a1))&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;... = data # (rev (postOrden a1 @ postOrden a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = rev (postOrden a1 @ postOrden a2 @ [data])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = rev (postOrden (N data a1 a2))&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&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;
-- &amp;quot;diecabmen1 maresccas4 irealetei domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
&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 a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;postOrden (espejo (N a1 a2 a3)) = postOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = postOrden (espejo a3) @ postOrden (espejo a2) @ [a1]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (preOrden a3) @ rev (preOrden a2) @ rev [a1]&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev ([a1] @ preOrden a2 @ preOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis  by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma  &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix a::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  show &amp;quot;postOrden (espejo (H a)) = rev (preOrden (H a))&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix data::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  fix a1::&amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
  assume HI1:&amp;quot; postOrden (espejo a1) = rev (preOrden a1)&amp;quot;&lt;br /&gt;
  fix a2::&amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
  assume HI2:&amp;quot; postOrden (espejo a2) = rev (preOrden a2)&amp;quot;&lt;br /&gt;
  show &amp;quot;postOrden (espejo (N data a1 a2)) = rev (preOrden (N data a1 a2))&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;postOrden (espejo (N data a1 a2))=postOrden (N data (espejo a2) (espejo a1))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = postOrden(espejo a2) @ postOrden(espejo a1) @ [data]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = rev (preOrden a2) @ rev (preOrden a1) @ [data]&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;... = rev (preOrden a1 @ preOrden a2)@[data]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = rev (preOrden a1 @ preOrden a2)@ rev ([data])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = rev ([data] @ preOrden a1 @ preOrden a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = rev (preOrden (N data a1 a2))&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&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;
-- &amp;quot;diecabmen1 maresccas4 irealetei domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
&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 a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;inOrden (espejo (N a1 a2 a3)) = inOrden (N a1 (espejo a3) (espejo a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = inOrden (espejo a3) @ [a1] @ inOrden (espejo a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a3) @ rev [a1] @ rev (inOrden a2)&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = rev (inOrden a2 @ [a1] @ inOrden a3)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma  &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix a::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  show &amp;quot;inOrden (espejo (H a)) = rev (inOrden (H a))&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix data::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  fix a1::&amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
  assume HI1:&amp;quot; inOrden (espejo a1) = rev (inOrden a1)&amp;quot;&lt;br /&gt;
  fix a2::&amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
  assume HI2:&amp;quot; inOrden (espejo a2) = rev (inOrden a2)&amp;quot;&lt;br /&gt;
  show &amp;quot;inOrden (espejo (N data a1 a2)) = rev (inOrden (N data a1 a2))&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;inOrden (espejo (N data a1 a2))=inOrden (N data (espejo a2) (espejo a1))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = inOrden(espejo a2) @ [data] @ inOrden(espejo a1)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = rev (inOrden a2)@ [data] @ rev (inOrden a1)&amp;quot; using HI1 HI2 by simp&lt;br /&gt;
    also have &amp;quot;... = rev (inOrden a2)@ rev([data]) @ rev (inOrden a1)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = rev ([data] @ (inOrden a2)) @ rev(inOrden a1)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = rev ( inOrden a1 @ [data] @ inOrden a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = rev (inOrden (N data a1 a2))&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&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;
-- &amp;quot;diecabmen1 maresccas4 irealetei domlloriv&amp;quot;&lt;br /&gt;
&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)))&amp;quot; -- &amp;quot;= 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;
-- &amp;quot;diecabmen1 maresccas4 irealetei domlloriv&amp;quot;&lt;br /&gt;
&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)))&amp;quot; -- &amp;quot;= 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;
-- &amp;quot;diecabmen1 maresccas4 irealetei domlloriv&amp;quot;&lt;br /&gt;
&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)))&amp;quot; -- &amp;quot;= 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;
-- &amp;quot;diecabmen1 maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma inOrdenNN: &amp;quot;inOrden a ≠ []&amp;quot;&lt;br /&gt;
by (induct a) auto&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 a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof -  &lt;br /&gt;
    have &amp;quot;last (inOrden (N a1 a2 a3)) = last (a1 # inOrden a3)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = last (inOrden a3)&amp;quot;  by (simp add: inOrdenNN)&lt;br /&gt;
    also have &amp;quot;… = extremo_derecha a3&amp;quot; using HI2 by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma inOrdenNoPuedeSerVacio: &amp;quot;inOrden a ≠ []&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot;&lt;br /&gt;
by (induct a) (auto simp add:inOrdenNoPuedeSerVacio)&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot;&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix data::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  show &amp;quot;last (inOrden (H data)) = extremo_derecha (H data)&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
  fix data::&amp;quot;&amp;#039;a&amp;quot; &lt;br /&gt;
  fix a2::&amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
  fix a1&lt;br /&gt;
  assume HI:&amp;quot; last (inOrden a2) = extremo_derecha a2&amp;quot;&lt;br /&gt;
  show &amp;quot;last (inOrden (N data a1 a2)) = extremo_derecha (N data a1 a2)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;last (inOrden (N data a1 a2))= last ((inOrden a1)@[data] @ (inOrden a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...= last (inOrden a2)&amp;quot; by (simp add:inOrdenNoPuedeSerVacio)&lt;br /&gt;
    also have &amp;quot;...=extremo_derecha a2&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...=extremo_derecha (N data a1 a2)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&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;
-- &amp;quot;diecabmen1 maresccas4 irealetei domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
by (induct a) (auto simp add: inOrdenNN)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4 &amp;quot;&lt;br /&gt;
&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&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof - &lt;br /&gt;
    have &amp;quot;hd (inOrden (N a1 a2 a3)) = hd  (inOrden a2 @ a1 # inOrden a3)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = hd (inOrden a2)&amp;quot;  by (simp add: inOrdenNN)&lt;br /&gt;
    also have &amp;quot;… = extremo_izquierda a2&amp;quot; using HI1 by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix data::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  show &amp;quot;hd (inOrden (H data)) = extremo_izquierda (H data)&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
  fix data::&amp;quot;&amp;#039;a&amp;quot; &lt;br /&gt;
  fix a1::&amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
  fix a2&lt;br /&gt;
  assume HI:&amp;quot; hd (inOrden a1) = extremo_izquierda a1&amp;quot;&lt;br /&gt;
  show &amp;quot;hd (inOrden (N data a1 a2)) = extremo_izquierda (N data a1 a2)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;hd (inOrden (N data a1 a2))= hd ((inOrden a1)@[data] @ (inOrden a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...= hd (inOrden a1)&amp;quot; by (simp add:inOrdenNoPuedeSerVacio)&lt;br /&gt;
    also have &amp;quot;...=extremo_izquierda a1&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...=extremo_izquierda (N data a1 a2)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&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;
-- &amp;quot;diecabmen1 maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
&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&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof - &lt;br /&gt;
    have &amp;quot; hd (preOrden (N a1 a2 a3)) = hd (a1 # preOrden a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a1&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei: Se puede hacer con cases&amp;quot;&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;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
proof (cases a)&lt;br /&gt;
  fix data&lt;br /&gt;
  assume &amp;quot;a = H data&amp;quot;&lt;br /&gt;
  then show &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix data::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  fix a1::&amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
  fix a2::&amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
  assume A:&amp;quot;a = N data a1 a2&amp;quot;&lt;br /&gt;
  then&lt;br /&gt;
    have &amp;quot;hd (preOrden (N data a1 a2)) = hd (data #(preOrden a1 @ preOrden a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = data&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = last (postOrden a1 @ postOrden a2 @ [data])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = last (postOrden (N data a1 a1))&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis using A by simp&lt;br /&gt;
qed&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;
-- &amp;quot;diecabmen1 maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
&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&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof - &lt;br /&gt;
    have &amp;quot; hd (preOrden (N a1 a2 a3)) = hd (a1 # preOrden a2)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a1&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&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;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
proof (cases a)&lt;br /&gt;
  fix data&lt;br /&gt;
  assume &amp;quot;a = H data&amp;quot;&lt;br /&gt;
  then show &amp;quot;hd (preOrden a) = raiz a&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix data::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  fix a1::&amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
  fix a2::&amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
  assume A:&amp;quot;a = N data a1 a2&amp;quot;&lt;br /&gt;
  then&lt;br /&gt;
    have &amp;quot;hd (preOrden (N data a1 a2)) = hd (data #(preOrden a1 @ preOrden a2))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = data&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = raiz (N data a1 a2)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis using A by simp&lt;br /&gt;
qed&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;
-- &amp;quot;diecabmen1 maresccas4 irealetei domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Quickcheck found a counterexample:&lt;br /&gt;
&lt;br /&gt;
a = N a⇩1 (H a⇩2) (H a⇩1)&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
hd (inOrden a) = a⇩2&lt;br /&gt;
raiz a = a⇩1 *)&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;
-- &amp;quot;diecabmen1 maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
by (induct a) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
&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 a1 a2 a3&lt;br /&gt;
  assume HI1: &amp;quot;?P a2&amp;quot;&lt;br /&gt;
  assume HI2: &amp;quot;?P a3&amp;quot;&lt;br /&gt;
  show &amp;quot;?P (N a1 a2 a3)&amp;quot;&lt;br /&gt;
  proof - &lt;br /&gt;
    thm postOrden.simps&lt;br /&gt;
    thm hd.simps&lt;br /&gt;
    thm raiz.simps&lt;br /&gt;
    have &amp;quot; last (postOrden (N a1 a2 a3)) = last (postOrden a2 @ postOrden a3 @ [a1])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = last ([a1])&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
&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;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
proof (cases a)&lt;br /&gt;
 fix data&lt;br /&gt;
  assume &amp;quot;a = H data&amp;quot;&lt;br /&gt;
  then show &amp;quot;last (postOrden a) = raiz a&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix data::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  fix a1::&amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
  fix a2::&amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
  assume A:&amp;quot;a = N data a1 a2&amp;quot;&lt;br /&gt;
  then&lt;br /&gt;
    have &amp;quot;last (postOrden (N data a1 a2)) = last (preOrden a1 @ preOrden a2 @ [data])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = data&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = raiz (N data a1 a2)&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis using A 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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=340</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=340"/>
		<updated>2013-12-19T10:17:51Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabflomar: Hola, son las 03:37 y por fin funciona el wiki. No he podido copiar ni una sola solución. :@ *)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav pabflomar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 misma solución solamente quito el último also have para evitar redundar con finally&amp;quot;&lt;br /&gt;
lemma sust_append2: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x y xs ys&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume C1:&amp;quot;a=x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = y#sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = y # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(*pabflomar: 100% de acuerdo con Irene. *)&lt;br /&gt;
-- &amp;quot;irealetei me gusta más sin abreviar &amp;quot;&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
lemma sust_append3: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
proof (induction xs)&lt;br /&gt;
  show &amp;quot;sust x y ([] @ ys) = sust x y [] @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix xs a&lt;br /&gt;
assume HI:&amp;quot;sust x y (xs @ ys) = sust x y xs @ sust x y ys&amp;quot;&lt;br /&gt;
show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot;&lt;br /&gt;
proof (cases)&lt;br /&gt;
assume A: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y (a # xs @ ys) = y # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a # xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
assume A: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y ((a # xs) @ ys) = a # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a#xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a#xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Juaruipav: Yo no llamaría a las dos hipótesis iguales, aunque no haya conflictos*)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei juaruipav domlloriv pabflomar&amp;quot;&lt;br /&gt;
{*domllriv -&amp;gt; Me apunto a este pero a mi no me funciona. Fall add:sust_append*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma rev_sust2: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(y # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [y]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by (simp add:sust_append2)&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(a # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [a]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [a]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by (simp add:sust_append2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma rev_sust3: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
   assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(y#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[y])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[y]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A1 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(a#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[a])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[a]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A2 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  proof (induct zs)&lt;br /&gt;
    show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
   fix a zs&lt;br /&gt;
   assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
   show &amp;quot; rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
   proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev( sust x y (a #zs))= rev( y# sust x y zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= rev(sust x y zs) @ [y]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;...= sust x y (rev zs)@ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev( sust x y (a #zs))= rev( x# sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...= rev(sust x y zs) @ [x]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
   also have &amp;quot;...= sust x y (rev zs)@ [x]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borra (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borraTodas (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv agrego nombre a lemma para ejercicio 12.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borra_borraTodas:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma borrax_BorraTodasx_xs:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borra x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borradora:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C1 by simp &lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C2 by simp &lt;br /&gt;
  qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x (a # xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
show &amp;quot; borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
    proof(cases)&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
       next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 no va un finally sin un also have antes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a # xs)&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#(borra x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borra x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav domlloriv&amp;quot;&lt;br /&gt;
{*Domlloriv -&amp;gt; Este no me ha salido pero me apunto a la solucion de Juan que es mas simple*}&lt;br /&gt;
lemma borraTodas_conmut:&lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
    show &amp;quot; borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
 fix a xs&lt;br /&gt;
 assume HI: &amp;quot; borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show  &amp;quot;borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show  &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a # xs)) = borra x (a#borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y xs&amp;quot; using A1 by simp&lt;br /&gt;
    also have &amp;quot;...=borra y ( borra x (a # xs))&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borra y (a # xs)) = borra y ( borra x (a # xs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
      proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;y=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) = borra x xs&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a # borra x xs)&amp;quot; using A3  by simp  &lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) =borra x (a#borra y xs)&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=(a#(borra x (borra y xs)))&amp;quot; using A2  by simp  &lt;br /&gt;
        also have &amp;quot;...=(a#(borra y (borra x xs)))&amp;quot; using HI by simp&lt;br /&gt;
        also have &amp;quot;...= borra y (a # borra x xs)&amp;quot; using A4 by simp&lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C1 by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  by (induct xs) (auto simp add: borradora)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed     &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;y=a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
     proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;x=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (borraTodas x (a # xs))&amp;quot; using A3 using A1 by (simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs))=borra y (borraTodas x (a#xs))&amp;quot; using A2 by simp&lt;br /&gt;
      qed&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
        proof (cases)&lt;br /&gt;
           assume A5:&amp;quot;x=a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x (a#xs))&amp;quot; using A5 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
        next&lt;br /&gt;
          assume A5:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (a#borraTodas x (xs))&amp;quot; using A4 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using A5 by simp&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;  borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C1 by( simp add:borradora)&lt;br /&gt;
  next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C2 by( simp add:borradora)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a # xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1: &amp;quot;y = a&amp;quot;&lt;br /&gt;
    show &amp;quot;?P x y (a # xs)&amp;quot;&lt;br /&gt;
    proof cases&lt;br /&gt;
      assume C2: &amp;quot;x = a&amp;quot;&lt;br /&gt;
      then have &amp;quot;borraTodas x (borra y (a # xs)) = borra y (a # borraTodas x xs)&amp;quot; using C1 by simp&lt;br /&gt;
      also have &amp;quot;… = borra y (a # borraTodas x (a # xs))&amp;quot; using C2 by simp&lt;br /&gt;
      also have &amp;quot;… = borra y (a # borra y (borraTodas x (a # xs)))&amp;quot;using C2 using C1 by (simp add: borra_borraTodas)&lt;br /&gt;
      finally show &amp;quot;?P x y (a # xs)&amp;quot; using C1 by simp    &lt;br /&gt;
    next&lt;br /&gt;
      assume C3: &amp;quot;x ≠ a&amp;quot;&lt;br /&gt;
      then have &amp;quot;borraTodas x (borra y (a # xs)) = borraTodas x xs&amp;quot; using C1 by simp&lt;br /&gt;
      also have &amp;quot;… = borra y (a # borraTodas x xs)&amp;quot; using C1 by simp&lt;br /&gt;
      finally show &amp;quot;?P x y (a # xs)&amp;quot; using C3 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  next&lt;br /&gt;
    assume C4: &amp;quot;y ≠ a&amp;quot;&lt;br /&gt;
    show &amp;quot;?P x y (a # xs)&amp;quot;&lt;br /&gt;
    proof cases&lt;br /&gt;
      assume C5: &amp;quot;x = a&amp;quot;&lt;br /&gt;
      then have &amp;quot;borraTodas x (borra y (a # xs)) = borraTodas x (a # borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
      also have &amp;quot;… = borraTodas x (borra y xs)&amp;quot; using C5 by simp&lt;br /&gt;
      also have &amp;quot;… = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
      finally show &amp;quot;?P x y (a # xs)&amp;quot; using C5 by simp&lt;br /&gt;
    next&lt;br /&gt;
      assume C6: &amp;quot;x ≠ a&amp;quot;&lt;br /&gt;
      then have &amp;quot;borraTodas x (borra y (a # xs)) = borraTodas x (a # borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
      also have &amp;quot;… = a # borraTodas x (borra y xs)&amp;quot; using C6 by simp&lt;br /&gt;
      also have &amp;quot;… = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
      also have &amp;quot;… = borra y (a # borraTodas x xs)&amp;quot; using C4 by simp&lt;br /&gt;
      finally show &amp;quot;?P x y (a # xs)&amp;quot; using C6 by simp&lt;br /&gt;
    qed&lt;br /&gt;
  qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav domlloriv diecabmen1&amp;quot; &lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav domlloriv diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei domlloriv diecabmen1&amp;quot;&lt;br /&gt;
{*Domlloriv - A mi el quickcheck no me ha encontrado ningún contra ejemplo*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(*Quickcheck found a counterexample:&lt;br /&gt;
&lt;br /&gt;
x = a⇩2&lt;br /&gt;
y = a⇩1&lt;br /&gt;
zs = [a⇩1]&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
sust x y (borraTodas x zs) = [a⇩2]&lt;br /&gt;
borraTodas x zs = [a⇩1]*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
     assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (a#(borraTodas x zs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a#(sust x y (borraTodas x zs))&amp;quot; using A by simp&lt;br /&gt;
    also have &amp;quot;...=a#(borraTodas x zs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a zs&lt;br /&gt;
 assume HI: &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
(* Juaruipav: Falla con el siguiente mensaje:  1. sust x y (borraTodas x zs) = borraTodas x zs ⟹ x ≠ a ⟹ False&lt;br /&gt;
Relacionado con la salida del quickcheck*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav domlloriv diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav domlloriv diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei domlloriv diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaripav&amp;quot;&lt;br /&gt;
lemma borraTodas_conj:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) (auto)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraTodas_concatenacion&amp;quot;:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys&amp;quot;&lt;br /&gt;
  show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;(x=a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs @ borraTodas x ys&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;(x≠a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # (borraTodas x xs @ borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI: &amp;quot; borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys &amp;quot;&lt;br /&gt;
show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Es curioso como Isabelle me avisa como poder resolverlo con un lema anterior:&lt;br /&gt;
&lt;br /&gt;
Auto solve_direct: The current goal can be solved directly with&lt;br /&gt;
  R6.borraTodas_conj:&lt;br /&gt;
    borraTodas ?x (?xs @ ?ys) =&lt;br /&gt;
    borraTodas ?x ?xs @ borraTodas ?x ?ys *)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concatenacion)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borraTodas_conj)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei domlloriv&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a#(rev xs))&amp;quot; using A by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=(rev (borraTodas x xs) @ [a])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=((borraTodas x (rev xs))@[a])&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI:&amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C1 by (simp add:borraTodas_conj)&lt;br /&gt;
   next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C2 by (simp add:borraTodas_conj)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=327</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=327"/>
		<updated>2013-12-17T18:46:30Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 misma solución solamente quito el último also have para evitar redundar con finally&amp;quot;&lt;br /&gt;
lemma sust_append2: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x y xs ys&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume C1:&amp;quot;a=x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = y#sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = y # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei me gusta más sin abreviar&amp;quot;&lt;br /&gt;
lemma sust_append3: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
proof (induction xs)&lt;br /&gt;
  show &amp;quot;sust x y ([] @ ys) = sust x y [] @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix xs a&lt;br /&gt;
assume HI:&amp;quot;sust x y (xs @ ys) = sust x y xs @ sust x y ys&amp;quot;&lt;br /&gt;
show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot;&lt;br /&gt;
proof (cases)&lt;br /&gt;
assume A: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y (a # xs @ ys) = y # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a # xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
assume A: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y ((a # xs) @ ys) = a # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a#xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a#xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Juaruipav: Yo no llamaría a las dos hipótesis iguales, aunque no haya conflictos*)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
{*domllriv -&amp;gt; Me apunto a este pero a mi no me funciona. Fall add:sust_append*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma rev_sust2: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(y # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [y]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by (simp add:sust_append2)&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(a # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [a]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [a]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by (simp add:sust_append2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma rev_sust3: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
   assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(y#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[y])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[y]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A1 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(a#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[a])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[a]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A2 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  proof (induct zs)&lt;br /&gt;
    show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
   fix a zs&lt;br /&gt;
   assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
   show &amp;quot; rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
   proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev( sust x y (a #zs))= rev( y# sust x y zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= rev(sust x y zs) @ [y]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;...= sust x y (rev zs)@ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev( sust x y (a #zs))= rev( x# sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...= rev(sust x y zs) @ [x]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
   also have &amp;quot;...= sust x y (rev zs)@ [x]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borra (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borraTodas (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv agrego nombre a lemma para ejercicio 12.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borra_borraTodas:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma borrax_BorraTodasx_xs:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borra x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borradora:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C1 by simp &lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C2 by simp &lt;br /&gt;
  qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x (a # xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
show &amp;quot; borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
    proof(cases)&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
       next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 no va un finally sin un also have antes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a # xs)&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#(borra x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borra x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
lemma borraTodas_conmut:&lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
    show &amp;quot; borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
 fix a xs&lt;br /&gt;
 assume HI: &amp;quot; borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show  &amp;quot;borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show  &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a # xs)) = borra x (a#borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y xs&amp;quot; using A1 by simp&lt;br /&gt;
    also have &amp;quot;...=borra y ( borra x (a # xs))&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borra y (a # xs)) = borra y ( borra x (a # xs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
      proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;y=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) = borra x xs&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a # borra x xs)&amp;quot; using A3  by simp  &lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) =borra x (a#borra y xs)&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=(a#(borra x (borra y xs)))&amp;quot; using A2  by simp  &lt;br /&gt;
        also have &amp;quot;...=(a#(borra y (borra x xs)))&amp;quot; using HI by simp&lt;br /&gt;
        also have &amp;quot;...= borra y (a # borra x xs)&amp;quot; using A4 by simp&lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C1 by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  by (induct xs) (auto simp add: borradora)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed     &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;y=a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
     proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;x=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (borraTodas x (a # xs))&amp;quot; using A3 using A1 by (simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs))=borra y (borraTodas x (a#xs))&amp;quot; using A2 by simp&lt;br /&gt;
      qed&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
        proof (cases)&lt;br /&gt;
           assume A5:&amp;quot;x=a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x (a#xs))&amp;quot; using A5 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
        next&lt;br /&gt;
          assume A5:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (a#borraTodas x (xs))&amp;quot; using A4 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using A5 by simp&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;  borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C1 by( simp add:borradora)&lt;br /&gt;
  next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C2 by( simp add:borradora)&lt;br /&gt;
qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav domlloriv&amp;quot; &lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei domlloriv&amp;quot;&lt;br /&gt;
{*Domlloriv - A mi el quickcheck no me ha encontrado ningún contra ejemplo*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(*Quickcheck found a counterexample:&lt;br /&gt;
&lt;br /&gt;
x = a⇩2&lt;br /&gt;
y = a⇩1&lt;br /&gt;
zs = [a⇩1]&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
sust x y (borraTodas x zs) = [a⇩2]&lt;br /&gt;
borraTodas x zs = [a⇩1]*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
     assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (a#(borraTodas x zs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a#(sust x y (borraTodas x zs))&amp;quot; using A by simp&lt;br /&gt;
    also have &amp;quot;...=a#(borraTodas x zs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a zs&lt;br /&gt;
 assume HI: &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
(* Juaruipav: Falla con el siguiente mensaje:  1. sust x y (borraTodas x zs) = borraTodas x zs ⟹ x ≠ a ⟹ False&lt;br /&gt;
Relacionado con la salida del quickcheck*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaripav&amp;quot;&lt;br /&gt;
lemma borraTodas_conj:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) (auto)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraTodas_concatenacion&amp;quot;:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys&amp;quot;&lt;br /&gt;
  show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;(x=a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs @ borraTodas x ys&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;(x≠a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # (borraTodas x xs @ borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI: &amp;quot; borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys &amp;quot;&lt;br /&gt;
show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Es curioso como Isabelle me avisa como poder resolverlo con un lema anterior:&lt;br /&gt;
&lt;br /&gt;
Auto solve_direct: The current goal can be solved directly with&lt;br /&gt;
  R6.borraTodas_conj:&lt;br /&gt;
    borraTodas ?x (?xs @ ?ys) =&lt;br /&gt;
    borraTodas ?x ?xs @ borraTodas ?x ?ys *)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concatenacion)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borraTodas_conj)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei domlloriv&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a#(rev xs))&amp;quot; using A by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=(rev (borraTodas x xs) @ [a])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=((borraTodas x (rev xs))@[a])&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI:&amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C1 by (simp add:borraTodas_conj)&lt;br /&gt;
   next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C2 by (simp add:borraTodas_conj)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=326</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=326"/>
		<updated>2013-12-17T17:48:04Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 misma solución solamente quito el último also have para evitar redundar con finally&amp;quot;&lt;br /&gt;
lemma sust_append2: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x y xs ys&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume C1:&amp;quot;a=x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = y#sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = y # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei me gusta más sin abreviar&amp;quot;&lt;br /&gt;
lemma sust_append3: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
proof (induction xs)&lt;br /&gt;
  show &amp;quot;sust x y ([] @ ys) = sust x y [] @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix xs a&lt;br /&gt;
assume HI:&amp;quot;sust x y (xs @ ys) = sust x y xs @ sust x y ys&amp;quot;&lt;br /&gt;
show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot;&lt;br /&gt;
proof (cases)&lt;br /&gt;
assume A: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y (a # xs @ ys) = y # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a # xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
assume A: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y ((a # xs) @ ys) = a # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a#xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a#xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Juaruipav: Yo no llamaría a las dos hipótesis iguales, aunque no haya conflictos*)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
{*domllriv -&amp;gt; Me apunto a este pero a mi no me funciona. Fall add:sust_append*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma rev_sust2: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(y # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [y]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by (simp add:sust_append2)&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(a # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [a]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [a]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by (simp add:sust_append2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma rev_sust3: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
   assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(y#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[y])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[y]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A1 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(a#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[a])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[a]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A2 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  proof (induct zs)&lt;br /&gt;
    show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
   fix a zs&lt;br /&gt;
   assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
   show &amp;quot; rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
   proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev( sust x y (a #zs))= rev( y# sust x y zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= rev(sust x y zs) @ [y]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;...= sust x y (rev zs)@ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev( sust x y (a #zs))= rev( x# sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...= rev(sust x y zs) @ [x]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
   also have &amp;quot;...= sust x y (rev zs)@ [x]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borra (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borraTodas (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv agrego nombre a lemma para ejercicio 12.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borra_borraTodas:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma borrax_BorraTodasx_xs:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borra x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borradora:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C1 by simp &lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C2 by simp &lt;br /&gt;
  qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x (a # xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
show &amp;quot; borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
    proof(cases)&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
       next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 no va un finally sin un also have antes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a # xs)&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#(borra x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borra x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
lemma borraTodas_conmut:&lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
    show &amp;quot; borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
 fix a xs&lt;br /&gt;
 assume HI: &amp;quot; borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show  &amp;quot;borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show  &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a # xs)) = borra x (a#borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y xs&amp;quot; using A1 by simp&lt;br /&gt;
    also have &amp;quot;...=borra y ( borra x (a # xs))&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borra y (a # xs)) = borra y ( borra x (a # xs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
      proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;y=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) = borra x xs&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a # borra x xs)&amp;quot; using A3  by simp  &lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) =borra x (a#borra y xs)&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=(a#(borra x (borra y xs)))&amp;quot; using A2  by simp  &lt;br /&gt;
        also have &amp;quot;...=(a#(borra y (borra x xs)))&amp;quot; using HI by simp&lt;br /&gt;
        also have &amp;quot;...= borra y (a # borra x xs)&amp;quot; using A4 by simp&lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C1 by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  by (induct xs) (auto simp add: borradora)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed     &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;y=a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
     proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;x=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (borraTodas x (a # xs))&amp;quot; using A3 using A1 by (simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs))=borra y (borraTodas x (a#xs))&amp;quot; using A2 by simp&lt;br /&gt;
      qed&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
        proof (cases)&lt;br /&gt;
           assume A5:&amp;quot;x=a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x (a#xs))&amp;quot; using A5 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
        next&lt;br /&gt;
          assume A5:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (a#borraTodas x (xs))&amp;quot; using A4 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using A5 by simp&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;  borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C1 by( simp add:borradora)&lt;br /&gt;
  next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C2 by( simp add:borradora)&lt;br /&gt;
qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav domlloriv&amp;quot; &lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei domlloriv&amp;quot;&lt;br /&gt;
{*Domlloriv - A mi el quickcheck no me ha encontrado ningún contra ejemplo*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(*Quickcheck found a counterexample:&lt;br /&gt;
&lt;br /&gt;
x = a⇩2&lt;br /&gt;
y = a⇩1&lt;br /&gt;
zs = [a⇩1]&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
sust x y (borraTodas x zs) = [a⇩2]&lt;br /&gt;
borraTodas x zs = [a⇩1]*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
     assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (a#(borraTodas x zs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a#(sust x y (borraTodas x zs))&amp;quot; using A by simp&lt;br /&gt;
    also have &amp;quot;...=a#(borraTodas x zs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a zs&lt;br /&gt;
 assume HI: &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
(* Juaruipav: Falla con el siguiente mensaje:  1. sust x y (borraTodas x zs) = borraTodas x zs ⟹ x ≠ a ⟹ False&lt;br /&gt;
Relacionado con la salida del quickcheck*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaripav&amp;quot;&lt;br /&gt;
lemma borraTodas_conj:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) (auto)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraTodas_concatenacion&amp;quot;:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys&amp;quot;&lt;br /&gt;
  show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;(x=a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs @ borraTodas x ys&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;(x≠a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # (borraTodas x xs @ borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI: &amp;quot; borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys &amp;quot;&lt;br /&gt;
show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Es curioso como Isabelle me avisa como poder resolverlo con un lema anterior:&lt;br /&gt;
&lt;br /&gt;
Auto solve_direct: The current goal can be solved directly with&lt;br /&gt;
  R6.borraTodas_conj:&lt;br /&gt;
    borraTodas ?x (?xs @ ?ys) =&lt;br /&gt;
    borraTodas ?x ?xs @ borraTodas ?x ?ys *)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concatenacion)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borraTodas_conj)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a#(rev xs))&amp;quot; using A by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=(rev (borraTodas x xs) @ [a])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=((borraTodas x (rev xs))@[a])&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI:&amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C1 by (simp add:borraTodas_conj)&lt;br /&gt;
   next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C2 by (simp add:borraTodas_conj)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=325</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=325"/>
		<updated>2013-12-17T17:45:37Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 misma solución solamente quito el último also have para evitar redundar con finally&amp;quot;&lt;br /&gt;
lemma sust_append2: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x y xs ys&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume C1:&amp;quot;a=x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = y#sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = y # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei me gusta más sin abreviar&amp;quot;&lt;br /&gt;
lemma sust_append3: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
proof (induction xs)&lt;br /&gt;
  show &amp;quot;sust x y ([] @ ys) = sust x y [] @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix xs a&lt;br /&gt;
assume HI:&amp;quot;sust x y (xs @ ys) = sust x y xs @ sust x y ys&amp;quot;&lt;br /&gt;
show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot;&lt;br /&gt;
proof (cases)&lt;br /&gt;
assume A: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y (a # xs @ ys) = y # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a # xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
assume A: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y ((a # xs) @ ys) = a # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a#xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a#xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Juaruipav: Yo no llamaría a las dos hipótesis iguales, aunque no haya conflictos*)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
{*domllriv -&amp;gt; Me apunto a este pero a mi no me funciona. Fall add:sust_append*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma rev_sust2: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(y # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [y]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by (simp add:sust_append2)&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(a # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [a]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [a]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by (simp add:sust_append2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma rev_sust3: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
   assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(y#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[y])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[y]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A1 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(a#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[a])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[a]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A2 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  proof (induct zs)&lt;br /&gt;
    show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
   fix a zs&lt;br /&gt;
   assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
   show &amp;quot; rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
   proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev( sust x y (a #zs))= rev( y# sust x y zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= rev(sust x y zs) @ [y]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;...= sust x y (rev zs)@ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev( sust x y (a #zs))= rev( x# sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...= rev(sust x y zs) @ [x]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
   also have &amp;quot;...= sust x y (rev zs)@ [x]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borra (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borraTodas (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv agrego nombre a lemma para ejercicio 12.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borra_borraTodas:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma borrax_BorraTodasx_xs:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borra x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borradora:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C1 by simp &lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C2 by simp &lt;br /&gt;
  qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x (a # xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
show &amp;quot; borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
    proof(cases)&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
       next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 no va un finally sin un also have antes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a # xs)&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#(borra x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borra x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
lemma borraTodas_conmut:&lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
    show &amp;quot; borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
 fix a xs&lt;br /&gt;
 assume HI: &amp;quot; borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show  &amp;quot;borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show  &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a # xs)) = borra x (a#borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y xs&amp;quot; using A1 by simp&lt;br /&gt;
    also have &amp;quot;...=borra y ( borra x (a # xs))&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borra y (a # xs)) = borra y ( borra x (a # xs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
      proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;y=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) = borra x xs&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a # borra x xs)&amp;quot; using A3  by simp  &lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) =borra x (a#borra y xs)&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=(a#(borra x (borra y xs)))&amp;quot; using A2  by simp  &lt;br /&gt;
        also have &amp;quot;...=(a#(borra y (borra x xs)))&amp;quot; using HI by simp&lt;br /&gt;
        also have &amp;quot;...= borra y (a # borra x xs)&amp;quot; using A4 by simp&lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C1 by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  by (induct xs) (auto simp add: borradora)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed     &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;y=a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
     proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;x=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (borraTodas x (a # xs))&amp;quot; using A3 using A1 by (simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs))=borra y (borraTodas x (a#xs))&amp;quot; using A2 by simp&lt;br /&gt;
      qed&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
        proof (cases)&lt;br /&gt;
           assume A5:&amp;quot;x=a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x (a#xs))&amp;quot; using A5 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
        next&lt;br /&gt;
          assume A5:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (a#borraTodas x (xs))&amp;quot; using A4 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using A5 by simp&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;  borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C1 by( simp add:borradora)&lt;br /&gt;
  next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C2 by( simp add:borradora)&lt;br /&gt;
qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav domlloriv&amp;quot; &lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(*Quickcheck found a counterexample:&lt;br /&gt;
&lt;br /&gt;
x = a⇩2&lt;br /&gt;
y = a⇩1&lt;br /&gt;
zs = [a⇩1]&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
sust x y (borraTodas x zs) = [a⇩2]&lt;br /&gt;
borraTodas x zs = [a⇩1]*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
     assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (a#(borraTodas x zs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a#(sust x y (borraTodas x zs))&amp;quot; using A by simp&lt;br /&gt;
    also have &amp;quot;...=a#(borraTodas x zs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a zs&lt;br /&gt;
 assume HI: &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
(* Juaruipav: Falla con el siguiente mensaje:  1. sust x y (borraTodas x zs) = borraTodas x zs ⟹ x ≠ a ⟹ False&lt;br /&gt;
Relacionado con la salida del quickcheck*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaripav&amp;quot;&lt;br /&gt;
lemma borraTodas_conj:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) (auto)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraTodas_concatenacion&amp;quot;:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys&amp;quot;&lt;br /&gt;
  show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;(x=a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs @ borraTodas x ys&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;(x≠a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # (borraTodas x xs @ borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI: &amp;quot; borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys &amp;quot;&lt;br /&gt;
show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Es curioso como Isabelle me avisa como poder resolverlo con un lema anterior:&lt;br /&gt;
&lt;br /&gt;
Auto solve_direct: The current goal can be solved directly with&lt;br /&gt;
  R6.borraTodas_conj:&lt;br /&gt;
    borraTodas ?x (?xs @ ?ys) =&lt;br /&gt;
    borraTodas ?x ?xs @ borraTodas ?x ?ys *)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concatenacion)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borraTodas_conj)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a#(rev xs))&amp;quot; using A by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=(rev (borraTodas x xs) @ [a])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=((borraTodas x (rev xs))@[a])&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI:&amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C1 by (simp add:borraTodas_conj)&lt;br /&gt;
   next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C2 by (simp add:borraTodas_conj)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=324</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=324"/>
		<updated>2013-12-17T17:44:13Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 misma solución solamente quito el último also have para evitar redundar con finally&amp;quot;&lt;br /&gt;
lemma sust_append2: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x y xs ys&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume C1:&amp;quot;a=x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = y#sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = y # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei me gusta más sin abreviar&amp;quot;&lt;br /&gt;
lemma sust_append3: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
proof (induction xs)&lt;br /&gt;
  show &amp;quot;sust x y ([] @ ys) = sust x y [] @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix xs a&lt;br /&gt;
assume HI:&amp;quot;sust x y (xs @ ys) = sust x y xs @ sust x y ys&amp;quot;&lt;br /&gt;
show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot;&lt;br /&gt;
proof (cases)&lt;br /&gt;
assume A: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y (a # xs @ ys) = y # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a # xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
assume A: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y ((a # xs) @ ys) = a # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a#xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a#xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Juaruipav: Yo no llamaría a las dos hipótesis iguales, aunque no haya conflictos*)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
{*domllriv -&amp;gt; Me apunto a este pero a mi no me funciona. Fall add:sust_append*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma rev_sust2: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(y # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [y]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by (simp add:sust_append2)&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(a # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [a]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [a]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by (simp add:sust_append2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma rev_sust3: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
   assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(y#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[y])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[y]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A1 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(a#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[a])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[a]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A2 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  proof (induct zs)&lt;br /&gt;
    show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
   fix a zs&lt;br /&gt;
   assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
   show &amp;quot; rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
   proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev( sust x y (a #zs))= rev( y# sust x y zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= rev(sust x y zs) @ [y]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;...= sust x y (rev zs)@ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev( sust x y (a #zs))= rev( x# sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...= rev(sust x y zs) @ [x]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
   also have &amp;quot;...= sust x y (rev zs)@ [x]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borra (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borraTodas (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv agrego nombre a lemma para ejercicio 12.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borra_borraTodas:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma borrax_BorraTodasx_xs:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borra x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borradora:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C1 by simp &lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C2 by simp &lt;br /&gt;
  qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x (a # xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
show &amp;quot; borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
    proof(cases)&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
       next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 no va un finally sin un also have antes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a # xs)&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#(borra x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borra x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
lemma borraTodas_conmut:&lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
    show &amp;quot; borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
 fix a xs&lt;br /&gt;
 assume HI: &amp;quot; borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show  &amp;quot;borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show  &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a # xs)) = borra x (a#borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y xs&amp;quot; using A1 by simp&lt;br /&gt;
    also have &amp;quot;...=borra y ( borra x (a # xs))&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borra y (a # xs)) = borra y ( borra x (a # xs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
      proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;y=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) = borra x xs&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a # borra x xs)&amp;quot; using A3  by simp  &lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) =borra x (a#borra y xs)&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=(a#(borra x (borra y xs)))&amp;quot; using A2  by simp  &lt;br /&gt;
        also have &amp;quot;...=(a#(borra y (borra x xs)))&amp;quot; using HI by simp&lt;br /&gt;
        also have &amp;quot;...= borra y (a # borra x xs)&amp;quot; using A4 by simp&lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C1 by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  by (induct xs) (auto simp add: borradora)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed     &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;y=a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
     proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;x=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (borraTodas x (a # xs))&amp;quot; using A3 using A1 by (simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs))=borra y (borraTodas x (a#xs))&amp;quot; using A2 by simp&lt;br /&gt;
      qed&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
        proof (cases)&lt;br /&gt;
           assume A5:&amp;quot;x=a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x (a#xs))&amp;quot; using A5 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
        next&lt;br /&gt;
          assume A5:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (a#borraTodas x (xs))&amp;quot; using A4 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using A5 by simp&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;  borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C1 by( simp add:borradora)&lt;br /&gt;
  next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C2 by( simp add:borradora)&lt;br /&gt;
qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav domlloriv&amp;quot; &lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(*Quickcheck found a counterexample:&lt;br /&gt;
&lt;br /&gt;
x = a⇩2&lt;br /&gt;
y = a⇩1&lt;br /&gt;
zs = [a⇩1]&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
sust x y (borraTodas x zs) = [a⇩2]&lt;br /&gt;
borraTodas x zs = [a⇩1]*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
     assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (a#(borraTodas x zs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a#(sust x y (borraTodas x zs))&amp;quot; using A by simp&lt;br /&gt;
    also have &amp;quot;...=a#(borraTodas x zs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a zs&lt;br /&gt;
 assume HI: &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
(* Juaruipav: Falla con el siguiente mensaje:  1. sust x y (borraTodas x zs) = borraTodas x zs ⟹ x ≠ a ⟹ False&lt;br /&gt;
Relacionado con la salida del quickcheck*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaripav&amp;quot;&lt;br /&gt;
lemma borraTodas_conj:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) (auto)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraTodas_concatenacion&amp;quot;:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys&amp;quot;&lt;br /&gt;
  show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;(x=a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs @ borraTodas x ys&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;(x≠a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # (borraTodas x xs @ borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI: &amp;quot; borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys &amp;quot;&lt;br /&gt;
show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Es curioso como Isabelle me avisa como poder resolverlo con un lema anterior:&lt;br /&gt;
&lt;br /&gt;
Auto solve_direct: The current goal can be solved directly with&lt;br /&gt;
  R6.borraTodas_conj:&lt;br /&gt;
    borraTodas ?x (?xs @ ?ys) =&lt;br /&gt;
    borraTodas ?x ?xs @ borraTodas ?x ?ys *)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concatenacion)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borraTodas_conj)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a#(rev xs))&amp;quot; using A by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=(rev (borraTodas x xs) @ [a])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=((borraTodas x (rev xs))@[a])&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI:&amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C1 by (simp add:borraTodas_conj)&lt;br /&gt;
   next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C2 by (simp add:borraTodas_conj)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=323</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=323"/>
		<updated>2013-12-17T17:42:12Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 misma solución solamente quito el último also have para evitar redundar con finally&amp;quot;&lt;br /&gt;
lemma sust_append2: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x y xs ys&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume C1:&amp;quot;a=x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = y#sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = y # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei me gusta más sin abreviar&amp;quot;&lt;br /&gt;
lemma sust_append3: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
proof (induction xs)&lt;br /&gt;
  show &amp;quot;sust x y ([] @ ys) = sust x y [] @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix xs a&lt;br /&gt;
assume HI:&amp;quot;sust x y (xs @ ys) = sust x y xs @ sust x y ys&amp;quot;&lt;br /&gt;
show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot;&lt;br /&gt;
proof (cases)&lt;br /&gt;
assume A: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y (a # xs @ ys) = y # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a # xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
assume A: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y ((a # xs) @ ys) = a # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a#xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a#xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Juaruipav: Yo no llamaría a las dos hipótesis iguales, aunque no haya conflictos*)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
{*domllriv -&amp;gt; Me apunto a este pero a mi no me funciona. Fall add:sust_append*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma rev_sust2: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(y # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [y]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by (simp add:sust_append2)&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(a # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [a]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [a]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by (simp add:sust_append2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma rev_sust3: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
   assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(y#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[y])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[y]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A1 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(a#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[a])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[a]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A2 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  proof (induct zs)&lt;br /&gt;
    show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
   fix a zs&lt;br /&gt;
   assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
   show &amp;quot; rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
   proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev( sust x y (a #zs))= rev( y# sust x y zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= rev(sust x y zs) @ [y]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;...= sust x y (rev zs)@ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev( sust x y (a #zs))= rev( x# sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...= rev(sust x y zs) @ [x]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
   also have &amp;quot;...= sust x y (rev zs)@ [x]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borra (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borraTodas (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv agrego nombre a lemma para ejercicio 12.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borra_borraTodas:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma borrax_BorraTodasx_xs:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borra x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borradora:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C1 by simp &lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C2 by simp &lt;br /&gt;
  qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x (a # xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
show &amp;quot; borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
    proof(cases)&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
       next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 no va un finally sin un also have antes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a # xs)&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#(borra x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borra x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
lemma borraTodas_conmut:&lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
    show &amp;quot; borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
 fix a xs&lt;br /&gt;
 assume HI: &amp;quot; borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show  &amp;quot;borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show  &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a # xs)) = borra x (a#borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y xs&amp;quot; using A1 by simp&lt;br /&gt;
    also have &amp;quot;...=borra y ( borra x (a # xs))&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borra y (a # xs)) = borra y ( borra x (a # xs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
      proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;y=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) = borra x xs&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a # borra x xs)&amp;quot; using A3  by simp  &lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) =borra x (a#borra y xs)&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=(a#(borra x (borra y xs)))&amp;quot; using A2  by simp  &lt;br /&gt;
        also have &amp;quot;...=(a#(borra y (borra x xs)))&amp;quot; using HI by simp&lt;br /&gt;
        also have &amp;quot;...= borra y (a # borra x xs)&amp;quot; using A4 by simp&lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C1 by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  by (induct xs) (auto simp add: borradora)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed     &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;y=a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
     proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;x=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (borraTodas x (a # xs))&amp;quot; using A3 using A1 by (simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs))=borra y (borraTodas x (a#xs))&amp;quot; using A2 by simp&lt;br /&gt;
      qed&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
        proof (cases)&lt;br /&gt;
           assume A5:&amp;quot;x=a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x (a#xs))&amp;quot; using A5 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
        next&lt;br /&gt;
          assume A5:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (a#borraTodas x (xs))&amp;quot; using A4 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using A5 by simp&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;  borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C1 by( simp add:borradora)&lt;br /&gt;
  next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C2 by( simp add:borradora)&lt;br /&gt;
qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(*Quickcheck found a counterexample:&lt;br /&gt;
&lt;br /&gt;
x = a⇩2&lt;br /&gt;
y = a⇩1&lt;br /&gt;
zs = [a⇩1]&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
sust x y (borraTodas x zs) = [a⇩2]&lt;br /&gt;
borraTodas x zs = [a⇩1]*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
     assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (a#(borraTodas x zs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a#(sust x y (borraTodas x zs))&amp;quot; using A by simp&lt;br /&gt;
    also have &amp;quot;...=a#(borraTodas x zs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a zs&lt;br /&gt;
 assume HI: &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
(* Juaruipav: Falla con el siguiente mensaje:  1. sust x y (borraTodas x zs) = borraTodas x zs ⟹ x ≠ a ⟹ False&lt;br /&gt;
Relacionado con la salida del quickcheck*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaripav&amp;quot;&lt;br /&gt;
lemma borraTodas_conj:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) (auto)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraTodas_concatenacion&amp;quot;:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys&amp;quot;&lt;br /&gt;
  show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;(x=a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs @ borraTodas x ys&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;(x≠a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # (borraTodas x xs @ borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI: &amp;quot; borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys &amp;quot;&lt;br /&gt;
show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Es curioso como Isabelle me avisa como poder resolverlo con un lema anterior:&lt;br /&gt;
&lt;br /&gt;
Auto solve_direct: The current goal can be solved directly with&lt;br /&gt;
  R6.borraTodas_conj:&lt;br /&gt;
    borraTodas ?x (?xs @ ?ys) =&lt;br /&gt;
    borraTodas ?x ?xs @ borraTodas ?x ?ys *)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concatenacion)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borraTodas_conj)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a#(rev xs))&amp;quot; using A by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=(rev (borraTodas x xs) @ [a])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=((borraTodas x (rev xs))@[a])&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI:&amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C1 by (simp add:borraTodas_conj)&lt;br /&gt;
   next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C2 by (simp add:borraTodas_conj)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=322</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=322"/>
		<updated>2013-12-17T17:35:41Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 misma solución solamente quito el último also have para evitar redundar con finally&amp;quot;&lt;br /&gt;
lemma sust_append2: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x y xs ys&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume C1:&amp;quot;a=x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = y#sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = y # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei me gusta más sin abreviar&amp;quot;&lt;br /&gt;
lemma sust_append3: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
proof (induction xs)&lt;br /&gt;
  show &amp;quot;sust x y ([] @ ys) = sust x y [] @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix xs a&lt;br /&gt;
assume HI:&amp;quot;sust x y (xs @ ys) = sust x y xs @ sust x y ys&amp;quot;&lt;br /&gt;
show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot;&lt;br /&gt;
proof (cases)&lt;br /&gt;
assume A: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y (a # xs @ ys) = y # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a # xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
assume A: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y ((a # xs) @ ys) = a # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a#xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a#xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Juaruipav: Yo no llamaría a las dos hipótesis iguales, aunque no haya conflictos*)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
{*domllriv -&amp;gt; Me apunto a este pero a mi no me funciona. Fall add:sust_append*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma rev_sust2: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(y # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [y]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by (simp add:sust_append2)&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(a # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [a]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [a]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by (simp add:sust_append2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma rev_sust3: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
   assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(y#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[y])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[y]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A1 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(a#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[a])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[a]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A2 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  proof (induct zs)&lt;br /&gt;
    show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
   fix a zs&lt;br /&gt;
   assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
   show &amp;quot; rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
   proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev( sust x y (a #zs))= rev( y# sust x y zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= rev(sust x y zs) @ [y]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;...= sust x y (rev zs)@ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev( sust x y (a #zs))= rev( x# sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...= rev(sust x y zs) @ [x]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
   also have &amp;quot;...= sust x y (rev zs)@ [x]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borra (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borraTodas (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 domlloriv agrego nombre a lemma para ejercicio 12.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borra_borraTodas:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma borrax_BorraTodasx_xs:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borra x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borradora:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C1 by simp &lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C2 by simp &lt;br /&gt;
  qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x (a # xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
show &amp;quot; borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
    proof(cases)&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
       next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 no va un finally sin un also have antes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a # xs)&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#(borra x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borra x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
lemma borraTodas_conmut:&lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
    show &amp;quot; borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
 fix a xs&lt;br /&gt;
 assume HI: &amp;quot; borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show  &amp;quot;borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show  &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a # xs)) = borra x (a#borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y xs&amp;quot; using A1 by simp&lt;br /&gt;
    also have &amp;quot;...=borra y ( borra x (a # xs))&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borra y (a # xs)) = borra y ( borra x (a # xs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
      proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;y=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) = borra x xs&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a # borra x xs)&amp;quot; using A3  by simp  &lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) =borra x (a#borra y xs)&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=(a#(borra x (borra y xs)))&amp;quot; using A2  by simp  &lt;br /&gt;
        also have &amp;quot;...=(a#(borra y (borra x xs)))&amp;quot; using HI by simp&lt;br /&gt;
        also have &amp;quot;...= borra y (a # borra x xs)&amp;quot; using A4 by simp&lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C1 by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  by (induct xs) (auto simp add: borradora)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed     &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;y=a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
     proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;x=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (borraTodas x (a # xs))&amp;quot; using A3 using A1 by (simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs))=borra y (borraTodas x (a#xs))&amp;quot; using A2 by simp&lt;br /&gt;
      qed&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
        proof (cases)&lt;br /&gt;
           assume A5:&amp;quot;x=a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x (a#xs))&amp;quot; using A5 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
        next&lt;br /&gt;
          assume A5:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (a#borraTodas x (xs))&amp;quot; using A4 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using A5 by simp&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;  borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C1 by( simp add:borradora)&lt;br /&gt;
  next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C2 by( simp add:borradora)&lt;br /&gt;
qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(*Quickcheck found a counterexample:&lt;br /&gt;
&lt;br /&gt;
x = a⇩2&lt;br /&gt;
y = a⇩1&lt;br /&gt;
zs = [a⇩1]&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
sust x y (borraTodas x zs) = [a⇩2]&lt;br /&gt;
borraTodas x zs = [a⇩1]*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
     assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (a#(borraTodas x zs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a#(sust x y (borraTodas x zs))&amp;quot; using A by simp&lt;br /&gt;
    also have &amp;quot;...=a#(borraTodas x zs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a zs&lt;br /&gt;
 assume HI: &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
(* Juaruipav: Falla con el siguiente mensaje:  1. sust x y (borraTodas x zs) = borraTodas x zs ⟹ x ≠ a ⟹ False&lt;br /&gt;
Relacionado con la salida del quickcheck*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaripav&amp;quot;&lt;br /&gt;
lemma borraTodas_conj:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) (auto)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraTodas_concatenacion&amp;quot;:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys&amp;quot;&lt;br /&gt;
  show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;(x=a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs @ borraTodas x ys&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;(x≠a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # (borraTodas x xs @ borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI: &amp;quot; borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys &amp;quot;&lt;br /&gt;
show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Es curioso como Isabelle me avisa como poder resolverlo con un lema anterior:&lt;br /&gt;
&lt;br /&gt;
Auto solve_direct: The current goal can be solved directly with&lt;br /&gt;
  R6.borraTodas_conj:&lt;br /&gt;
    borraTodas ?x (?xs @ ?ys) =&lt;br /&gt;
    borraTodas ?x ?xs @ borraTodas ?x ?ys *)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concatenacion)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borraTodas_conj)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a#(rev xs))&amp;quot; using A by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=(rev (borraTodas x xs) @ [a])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=((borraTodas x (rev xs))@[a])&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI:&amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C1 by (simp add:borraTodas_conj)&lt;br /&gt;
   next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C2 by (simp add:borraTodas_conj)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=321</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=321"/>
		<updated>2013-12-17T17:14:01Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 misma solución solamente quito el último also have para evitar redundar con finally&amp;quot;&lt;br /&gt;
lemma sust_append2: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x y xs ys&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume C1:&amp;quot;a=x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = y#sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = y # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei me gusta más sin abreviar&amp;quot;&lt;br /&gt;
lemma sust_append3: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
proof (induction xs)&lt;br /&gt;
  show &amp;quot;sust x y ([] @ ys) = sust x y [] @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix xs a&lt;br /&gt;
assume HI:&amp;quot;sust x y (xs @ ys) = sust x y xs @ sust x y ys&amp;quot;&lt;br /&gt;
show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot;&lt;br /&gt;
proof (cases)&lt;br /&gt;
assume A: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y (a # xs @ ys) = y # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a # xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
assume A: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y ((a # xs) @ ys) = a # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a#xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a#xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Juaruipav: Yo no llamaría a las dos hipótesis iguales, aunque no haya conflictos*)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
{*domllriv -&amp;gt; Me apunto a este pero a mi no me funciona. Fall add:sust_append*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma rev_sust2: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(y # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [y]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by (simp add:sust_append2)&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(a # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [a]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [a]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by (simp add:sust_append2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma rev_sust3: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
   assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(y#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[y])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[y]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A1 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(a#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[a])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[a]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A2 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  proof (induct zs)&lt;br /&gt;
    show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
   fix a zs&lt;br /&gt;
   assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
   show &amp;quot; rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
   proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev( sust x y (a #zs))= rev( y# sust x y zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= rev(sust x y zs) @ [y]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;...= sust x y (rev zs)@ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev( sust x y (a #zs))= rev( x# sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...= rev(sust x y zs) @ [x]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
   also have &amp;quot;...= sust x y (rev zs)@ [x]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borra (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borraTodas (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 agrego nombre a lemma para ejercicio 12.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borra_borraTodas:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma borrax_BorraTodasx_xs:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borra x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borradora:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C1 by simp &lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C2 by simp &lt;br /&gt;
  qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x (a # xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
show &amp;quot; borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
    proof(cases)&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
       next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 no va un finally sin un also have antes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a # xs)&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#(borra x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borra x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
lemma borraTodas_conmut:&lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
    show &amp;quot; borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
 fix a xs&lt;br /&gt;
 assume HI: &amp;quot; borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show  &amp;quot;borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show  &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a # xs)) = borra x (a#borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y xs&amp;quot; using A1 by simp&lt;br /&gt;
    also have &amp;quot;...=borra y ( borra x (a # xs))&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borra y (a # xs)) = borra y ( borra x (a # xs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
      proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;y=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) = borra x xs&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a # borra x xs)&amp;quot; using A3  by simp  &lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) =borra x (a#borra y xs)&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=(a#(borra x (borra y xs)))&amp;quot; using A2  by simp  &lt;br /&gt;
        also have &amp;quot;...=(a#(borra y (borra x xs)))&amp;quot; using HI by simp&lt;br /&gt;
        also have &amp;quot;...= borra y (a # borra x xs)&amp;quot; using A4 by simp&lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C1 by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  by (induct xs) (auto simp add: borradora)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed     &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;y=a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
     proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;x=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (borraTodas x (a # xs))&amp;quot; using A3 using A1 by (simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs))=borra y (borraTodas x (a#xs))&amp;quot; using A2 by simp&lt;br /&gt;
      qed&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
        proof (cases)&lt;br /&gt;
           assume A5:&amp;quot;x=a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x (a#xs))&amp;quot; using A5 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
        next&lt;br /&gt;
          assume A5:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (a#borraTodas x (xs))&amp;quot; using A4 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using A5 by simp&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;  borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C1 by( simp add:borradora)&lt;br /&gt;
  next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C2 by( simp add:borradora)&lt;br /&gt;
qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(*Quickcheck found a counterexample:&lt;br /&gt;
&lt;br /&gt;
x = a⇩2&lt;br /&gt;
y = a⇩1&lt;br /&gt;
zs = [a⇩1]&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
sust x y (borraTodas x zs) = [a⇩2]&lt;br /&gt;
borraTodas x zs = [a⇩1]*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
     assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (a#(borraTodas x zs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a#(sust x y (borraTodas x zs))&amp;quot; using A by simp&lt;br /&gt;
    also have &amp;quot;...=a#(borraTodas x zs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a zs&lt;br /&gt;
 assume HI: &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
(* Juaruipav: Falla con el siguiente mensaje:  1. sust x y (borraTodas x zs) = borraTodas x zs ⟹ x ≠ a ⟹ False&lt;br /&gt;
Relacionado con la salida del quickcheck*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaripav&amp;quot;&lt;br /&gt;
lemma borraTodas_conj:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) (auto)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraTodas_concatenacion&amp;quot;:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys&amp;quot;&lt;br /&gt;
  show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;(x=a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs @ borraTodas x ys&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;(x≠a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # (borraTodas x xs @ borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI: &amp;quot; borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys &amp;quot;&lt;br /&gt;
show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Es curioso como Isabelle me avisa como poder resolverlo con un lema anterior:&lt;br /&gt;
&lt;br /&gt;
Auto solve_direct: The current goal can be solved directly with&lt;br /&gt;
  R6.borraTodas_conj:&lt;br /&gt;
    borraTodas ?x (?xs @ ?ys) =&lt;br /&gt;
    borraTodas ?x ?xs @ borraTodas ?x ?ys *)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concatenacion)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borraTodas_conj)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a#(rev xs))&amp;quot; using A by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=(rev (borraTodas x xs) @ [a])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=((borraTodas x (rev xs))@[a])&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI:&amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C1 by (simp add:borraTodas_conj)&lt;br /&gt;
   next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C2 by (simp add:borraTodas_conj)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=320</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=320"/>
		<updated>2013-12-17T17:10:30Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 misma solución solamente quito el último also have para evitar redundar con finally&amp;quot;&lt;br /&gt;
lemma sust_append2: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x y xs ys&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume C1:&amp;quot;a=x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = y#sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = y # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei me gusta más sin abreviar&amp;quot;&lt;br /&gt;
lemma sust_append3: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
proof (induction xs)&lt;br /&gt;
  show &amp;quot;sust x y ([] @ ys) = sust x y [] @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix xs a&lt;br /&gt;
assume HI:&amp;quot;sust x y (xs @ ys) = sust x y xs @ sust x y ys&amp;quot;&lt;br /&gt;
show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot;&lt;br /&gt;
proof (cases)&lt;br /&gt;
assume A: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y (a # xs @ ys) = y # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a # xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
assume A: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y ((a # xs) @ ys) = a # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a#xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a#xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Juaruipav: Yo no llamaría a las dos hipótesis iguales, aunque no haya conflictos*)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
{*domllriv -&amp;gt; Me apunto a este pero a mi no me funciona*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma rev_sust2: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(y # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [y]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by (simp add:sust_append2)&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(a # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [a]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [a]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by (simp add:sust_append2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma rev_sust3: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
   assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(y#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[y])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[y]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A1 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(a#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[a])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[a]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A2 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  proof (induct zs)&lt;br /&gt;
    show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
   fix a zs&lt;br /&gt;
   assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
   show &amp;quot; rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
   proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev( sust x y (a #zs))= rev( y# sust x y zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= rev(sust x y zs) @ [y]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;...= sust x y (rev zs)@ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev( sust x y (a #zs))= rev( x# sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...= rev(sust x y zs) @ [x]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
   also have &amp;quot;...= sust x y (rev zs)@ [x]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borra (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borraTodas (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 agrego nombre a lemma para ejercicio 12.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borra_borraTodas:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma borrax_BorraTodasx_xs:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borra x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borradora:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C1 by simp &lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C2 by simp &lt;br /&gt;
  qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x (a # xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
show &amp;quot; borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
    proof(cases)&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
       next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 no va un finally sin un also have antes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a # xs)&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#(borra x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borra x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
lemma borraTodas_conmut:&lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
    show &amp;quot; borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
 fix a xs&lt;br /&gt;
 assume HI: &amp;quot; borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show  &amp;quot;borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show  &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a # xs)) = borra x (a#borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y xs&amp;quot; using A1 by simp&lt;br /&gt;
    also have &amp;quot;...=borra y ( borra x (a # xs))&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borra y (a # xs)) = borra y ( borra x (a # xs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
      proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;y=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) = borra x xs&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a # borra x xs)&amp;quot; using A3  by simp  &lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) =borra x (a#borra y xs)&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=(a#(borra x (borra y xs)))&amp;quot; using A2  by simp  &lt;br /&gt;
        also have &amp;quot;...=(a#(borra y (borra x xs)))&amp;quot; using HI by simp&lt;br /&gt;
        also have &amp;quot;...= borra y (a # borra x xs)&amp;quot; using A4 by simp&lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C1 by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  by (induct xs) (auto simp add: borradora)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed     &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;y=a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
     proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;x=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (borraTodas x (a # xs))&amp;quot; using A3 using A1 by (simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs))=borra y (borraTodas x (a#xs))&amp;quot; using A2 by simp&lt;br /&gt;
      qed&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
        proof (cases)&lt;br /&gt;
           assume A5:&amp;quot;x=a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x (a#xs))&amp;quot; using A5 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
        next&lt;br /&gt;
          assume A5:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (a#borraTodas x (xs))&amp;quot; using A4 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using A5 by simp&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;  borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C1 by( simp add:borradora)&lt;br /&gt;
  next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C2 by( simp add:borradora)&lt;br /&gt;
qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(*Quickcheck found a counterexample:&lt;br /&gt;
&lt;br /&gt;
x = a⇩2&lt;br /&gt;
y = a⇩1&lt;br /&gt;
zs = [a⇩1]&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
sust x y (borraTodas x zs) = [a⇩2]&lt;br /&gt;
borraTodas x zs = [a⇩1]*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
     assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (a#(borraTodas x zs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a#(sust x y (borraTodas x zs))&amp;quot; using A by simp&lt;br /&gt;
    also have &amp;quot;...=a#(borraTodas x zs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a zs&lt;br /&gt;
 assume HI: &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
(* Juaruipav: Falla con el siguiente mensaje:  1. sust x y (borraTodas x zs) = borraTodas x zs ⟹ x ≠ a ⟹ False&lt;br /&gt;
Relacionado con la salida del quickcheck*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaripav&amp;quot;&lt;br /&gt;
lemma borraTodas_conj:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) (auto)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraTodas_concatenacion&amp;quot;:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys&amp;quot;&lt;br /&gt;
  show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;(x=a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs @ borraTodas x ys&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;(x≠a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # (borraTodas x xs @ borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI: &amp;quot; borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys &amp;quot;&lt;br /&gt;
show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Es curioso como Isabelle me avisa como poder resolverlo con un lema anterior:&lt;br /&gt;
&lt;br /&gt;
Auto solve_direct: The current goal can be solved directly with&lt;br /&gt;
  R6.borraTodas_conj:&lt;br /&gt;
    borraTodas ?x (?xs @ ?ys) =&lt;br /&gt;
    borraTodas ?x ?xs @ borraTodas ?x ?ys *)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concatenacion)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borraTodas_conj)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a#(rev xs))&amp;quot; using A by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=(rev (borraTodas x xs) @ [a])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=((borraTodas x (rev xs))@[a])&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI:&amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C1 by (simp add:borraTodas_conj)&lt;br /&gt;
   next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C2 by (simp add:borraTodas_conj)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=319</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=319"/>
		<updated>2013-12-17T17:06:22Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 misma solución solamente quito el último also have para evitar redundar con finally&amp;quot;&lt;br /&gt;
lemma sust_append2: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x y xs ys&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume C1:&amp;quot;a=x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = y#sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = y # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # (sust x y xs)@(sust x y ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show&amp;quot;?P x y (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei me gusta más sin abreviar&amp;quot;&lt;br /&gt;
lemma sust_append3: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
proof (induction xs)&lt;br /&gt;
  show &amp;quot;sust x y ([] @ ys) = sust x y [] @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix xs a&lt;br /&gt;
assume HI:&amp;quot;sust x y (xs @ ys) = sust x y xs @ sust x y ys&amp;quot;&lt;br /&gt;
show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot;&lt;br /&gt;
proof (cases)&lt;br /&gt;
assume A: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y (a # xs @ ys) = y # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a # xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a # xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
assume A: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
 then have &amp;quot;sust x y ((a # xs) @ ys) = a # sust x y (xs @ ys)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;...= sust x y (a#xs) @ sust x y ys&amp;quot; using A by simp&lt;br /&gt;
 finally show &amp;quot;sust x y ((a # xs) @ ys) = sust x y (a#xs) @ sust x y ys&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Juaruipav: Yo no llamaría a las dos hipótesis iguales, aunque no haya conflictos*)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma rev_sust2: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(y # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [y]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by (simp add:sust_append2)&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev(sust x y (a#zs)) = rev(a # sust x y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = rev(sust x y zs) @ [a]&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = sust x y (rev zs) @ [a]&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by (simp add:sust_append2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma rev_sust3: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
   assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(y#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[y])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[y]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A1 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev (sust x y (a # zs))= rev(a#sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = (rev(sust x y zs)@[a])&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev zs)@[a]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev(a # zs))&amp;quot; using A2 by (simp add:sust_append)&lt;br /&gt;
   finally show &amp;quot;rev (sust x y (a # zs))=sust x y (rev(a # zs))&amp;quot; by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
  proof (induct zs)&lt;br /&gt;
    show &amp;quot;rev (sust x y []) = sust x y (rev [])&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
   fix a zs&lt;br /&gt;
   assume HI:&amp;quot; rev (sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
   show &amp;quot; rev (sust x y (a # zs)) = sust x y (rev (a # zs))&amp;quot;&lt;br /&gt;
   proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev( sust x y (a #zs))= rev( y# sust x y zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= rev(sust x y zs) @ [y]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;...= sust x y (rev zs)@ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
  also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
   then have &amp;quot;rev( sust x y (a #zs))= rev( x# sust x y zs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;...= rev(sust x y zs) @ [x]&amp;quot;  by (simp only: rev.simps(2))&lt;br /&gt;
   also have &amp;quot;...= sust x y (rev zs)@ [x]&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;...= (sust x y (rev zs)) @ (sust x y [a])&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;... = sust x y (rev zs@[a])&amp;quot; by (simp add:sust_append)&lt;br /&gt;
   also have &amp;quot;...=sust x y (rev (a#zs))&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  finally show ?thesis by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borra (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borraTodas (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 agrego nombre a lemma para ejercicio 12.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borra_borraTodas:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma borrax_BorraTodasx_xs:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borraTodas x (a # xs)) = borra x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borra x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borradora:&lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C1 by simp &lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using HI using C2 by simp &lt;br /&gt;
  qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#(borraTodas x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borraTodas x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x (a # xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
    also have &amp;quot;… = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x (a # xs)&amp;quot; using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
show &amp;quot; borraTodas x (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
    proof(cases)&lt;br /&gt;
    assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
       next&lt;br /&gt;
    assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
       show &amp;quot;borraTodas x (borraTodas x (a # xs)) = borraTodas x (a # xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 no va un finally sin un also have antes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a # xs)&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#(borra x xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x (borra x xs)&amp;quot; using A2  by simp  &lt;br /&gt;
    also have &amp;quot;...=a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a#xs)&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot; juaruipav&amp;quot;&lt;br /&gt;
lemma borraTodas_conmut:&lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
    show &amp;quot; borraTodas x (borra x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
 fix a xs&lt;br /&gt;
 assume HI: &amp;quot; borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;borraTodas x (borra x (a # xs)) = borraTodas x (a # xs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
  next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra x (a#xs))=borraTodas x (a #xs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv irealetei diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show  &amp;quot;borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show  &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a # xs)) = borra x (a#borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y xs&amp;quot; using A1 by simp&lt;br /&gt;
    also have &amp;quot;...=borra y ( borra x (a # xs))&amp;quot; using A1 by simp&lt;br /&gt;
    finally show &amp;quot;borra x (borra y (a # xs)) = borra y ( borra x (a # xs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
      proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;y=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) = borra x xs&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a # borra x xs)&amp;quot; using A3  by simp  &lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borra x (borra y (a # xs)) =borra x (a#borra y xs)&amp;quot;  by simp&lt;br /&gt;
        also have &amp;quot;...=(a#(borra x (borra y xs)))&amp;quot; using A2  by simp  &lt;br /&gt;
        also have &amp;quot;...=(a#(borra y (borra x xs)))&amp;quot; using HI by simp&lt;br /&gt;
        also have &amp;quot;...= borra y (a # borra x xs)&amp;quot; using A4 by simp&lt;br /&gt;
        finally show &amp;quot;borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using A2 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borra x (borra y []) = borra y (borra x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C1 by simp&lt;br /&gt;
next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot; borra x (borra y (a # xs)) = borra y (borra x (a # xs))&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  by (induct xs) (auto simp add: borradora)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed     &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A1:&amp;quot;y=a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
     proof (cases)&lt;br /&gt;
        assume A3:&amp;quot;x=a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (borraTodas x (a # xs))&amp;quot; using A3 using A1 by (simp add:borrax_BorraTodasx_xs)&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
      next&lt;br /&gt;
        assume A2:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
        then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x xs&amp;quot; using A1 by simp&lt;br /&gt;
        also have &amp;quot;...=borra y (a#borraTodas x xs)&amp;quot; using A1 by simp&lt;br /&gt;
        finally show &amp;quot;borraTodas x (borra y (a # xs))=borra y (borraTodas x (a#xs))&amp;quot; using A2 by simp&lt;br /&gt;
      qed&lt;br /&gt;
      next&lt;br /&gt;
        assume A4:&amp;quot;y≠a&amp;quot;&lt;br /&gt;
        show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
        proof (cases)&lt;br /&gt;
           assume A5:&amp;quot;x=a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (borraTodas x (a#xs))&amp;quot; using A5 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; by simp&lt;br /&gt;
        next&lt;br /&gt;
          assume A5:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
           then have &amp;quot;borraTodas x (borra y (a # xs))=borraTodas x (a#borra y xs)&amp;quot;using A4 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borraTodas x (borra y xs)&amp;quot; using A5 by simp&lt;br /&gt;
           also have &amp;quot;...=a#borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
           also have &amp;quot;...=borra y (a#borraTodas x (xs))&amp;quot; using A4 by simp&lt;br /&gt;
           finally show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using A5 by simp&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot; borraTodas x (borra y []) = borra y (borraTodas x [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot; borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;  borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
    show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C1 by( simp add:borradora)&lt;br /&gt;
  next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
     show &amp;quot;borraTodas x (borra y (a # xs)) = borra y (borraTodas x (a # xs))&amp;quot; using HI using C2 by( simp add:borradora)&lt;br /&gt;
qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot; &lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(*Quickcheck found a counterexample:&lt;br /&gt;
&lt;br /&gt;
x = a⇩2&lt;br /&gt;
y = a⇩1&lt;br /&gt;
zs = [a⇩1]&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
sust x y (borraTodas x zs) = [a⇩2]&lt;br /&gt;
borraTodas x zs = [a⇩1]*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a zs&lt;br /&gt;
  assume HI:&amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
  show &amp;quot;sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
     assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;sust x y (borraTodas x (a # zs))=sust x y (a#(borraTodas x zs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a#(sust x y (borraTodas x zs))&amp;quot; using A by simp&lt;br /&gt;
    also have &amp;quot;...=a#(borraTodas x zs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sust x y (borraTodas x (a # zs))= borraTodas x (a # zs)&amp;quot; using A by simp&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x []) = borraTodas x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a zs&lt;br /&gt;
 assume HI: &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot;&lt;br /&gt;
 proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
 show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot; sust x y (borraTodas x (a # zs)) = borraTodas x (a # zs)&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
(* Juaruipav: Falla con el siguiente mensaje:  1. sust x y (borraTodas x zs) = borraTodas x zs ⟹ x ≠ a ⟹ False&lt;br /&gt;
Relacionado con la salida del quickcheck*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaripav&amp;quot;&lt;br /&gt;
lemma borraTodas_conj:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) (auto)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraTodas_concatenacion&amp;quot;:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys&amp;quot;&lt;br /&gt;
  show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;(x=a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x xs @ borraTodas x ys&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;(x≠a)&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x ((a # xs) @ ys)=a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=a # (borraTodas x xs @ borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot; borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using A by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; borraTodas x ([] @ ys) = borraTodas x [] @ borraTodas x ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI: &amp;quot; borraTodas x (xs @ ys) = borraTodas x xs @ borraTodas x ys &amp;quot;&lt;br /&gt;
show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
 assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
 assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  show &amp;quot;borraTodas x ((a # xs) @ ys) = borraTodas x (a # xs) @ borraTodas x ys&amp;quot; using HI using C2 by simp&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* Es curioso como Isabelle me avisa como poder resolverlo con un lema anterior:&lt;br /&gt;
&lt;br /&gt;
Auto solve_direct: The current goal can be solved directly with&lt;br /&gt;
  R6.borraTodas_conj:&lt;br /&gt;
    borraTodas ?x (?xs @ ?ys) =&lt;br /&gt;
    borraTodas ?x ?xs @ borraTodas ?x ?ys *)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concatenacion)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:borraTodas_conj)&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot; rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume A:&amp;quot;x=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...=borraTodas x (a#(rev xs))&amp;quot; using A by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  next&lt;br /&gt;
    assume A:&amp;quot;x≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;rev (borraTodas x (a # xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=(rev (borraTodas x xs) @ [a])&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;...=((borraTodas x (rev xs))@[a])&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;using A by (simp add:borraTodas_concatenacion)&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juaruipav&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
proof(induct xs)&lt;br /&gt;
  show &amp;quot;rev (borraTodas x []) = borraTodas x (rev [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix a xs&lt;br /&gt;
assume HI:&amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot;&lt;br /&gt;
proof(cases)&lt;br /&gt;
   assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C1 by (simp add:borraTodas_conj)&lt;br /&gt;
   next&lt;br /&gt;
   assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;rev (borraTodas x (a # xs)) = borraTodas x (rev (a # xs))&amp;quot; using HI using C2 by (simp add:borraTodas_conj)&lt;br /&gt;
qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=301</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=301"/>
		<updated>2013-12-15T18:38:18Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borra (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borraTodas (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
    &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=300</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=300"/>
		<updated>2013-12-15T18:30:47Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borra (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borraTodas (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
    &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=299</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=299"/>
		<updated>2013-12-15T18:29:37Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borra (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borraTodas (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
    &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=298</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=298"/>
		<updated>2013-12-15T18:27:56Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borra (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borraTodas (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
    &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=297</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=297"/>
		<updated>2013-12-15T18:26:51Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borra (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borraTodas (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
    &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=296</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=296"/>
		<updated>2013-12-15T18:23:13Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borra (2::nat) [1,2,3,2]&amp;quot;--&amp;quot;[1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
    &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=295</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=295"/>
		<updated>2013-12-15T18:19:26Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
    &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=294</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=294"/>
		<updated>2013-12-15T18:17:48Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
    &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=293</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=293"/>
		<updated>2013-12-15T17:49:54Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
    &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=292</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_6&amp;diff=292"/>
		<updated>2013-12-15T17:48:41Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::nat) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;sust x y (z#zs) = (if z=x then y#sust x y zs else z#sust x y zs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::nat) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;[2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot; (is &amp;quot;?P x y xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y [] ys&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs ys &amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;a=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = y # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (y # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;a≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y ((a#xs)@ys) = a # sust x y (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a # sust x y xs) @ sust x y ys&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (a#xs) @ sust x y ys&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs) ys&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
by (induct zs) (auto simp add:sust_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix z :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (z#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;z=x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(y # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [y]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [y]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C1 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;z≠x&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev(sust x y (z#zs)) = rev(z # (sust x y zs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (sust x y zs) @ [z]&amp;quot; by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev zs) @ [z]&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = sust x y (rev (z#zs))&amp;quot; using C2 by (simp add:sust_append)&lt;br /&gt;
  finally show &amp;quot;?P x y (z#zs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  x = a⇣1&lt;br /&gt;
  y = a⇣2&lt;br /&gt;
  u = a⇣2&lt;br /&gt;
  v = a⇣1&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  z = a⇣2&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::nat) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borra x (y#ys) = (if x=y then ys else y # borra x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::nat) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraTodas x (y#ys) = (if x=y then borraTodas x ys else y # borraTodas x ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas 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 8.2. Demostrar o refutar detalladamente &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borraTodas x (a#xs)) = borra x (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borra x (borraTodas x xs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas 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 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borraTodas x (a#xs)) = a # borraTodas x (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas 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 10.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra x (a#xs)) = a # borraTodas x (borra x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x xs&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (a#xs)&amp;quot; using C2 by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
    &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o automáticamente&lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra 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;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y xs&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C1 by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borra x (borra y (a#xs)) = borra x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
   also have &amp;quot;... = borra y xs&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = borra x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C5 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borra x (borra y (a#xs)) = a # borra x (borra y xs)&amp;quot; using C4  by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borra x xs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borra x xs)&amp;quot; using C6 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borra x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
by (induct xs)(auto simp add:borra_borraTodas)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot; (is &amp;quot;?P x y xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a ∧ y=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C1 by (simp add:borra_borraTodas)&lt;br /&gt;
  finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;¬(x=a ∧ y=a)&amp;quot;&lt;br /&gt;
  show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
  proof cases&lt;br /&gt;
   assume C3: &amp;quot;x=a&amp;quot;&lt;br /&gt;
   then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; using C2  by simp&lt;br /&gt;
   also have &amp;quot;... = borraTodas x (borra y xs)&amp;quot; using C3 by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
   also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C3 by simp&lt;br /&gt;
   finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
   assume C4: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
   show &amp;quot;?P x y (a#xs)&amp;quot;&lt;br /&gt;
   proof cases&lt;br /&gt;
    assume C5: &amp;quot;y=a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x xs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (a # borraTodas x xs)&amp;quot; using C5 by simp&lt;br /&gt;
    also have &amp;quot;... = borra y (borraTodas x (a#xs))&amp;quot; using C4 by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; by simp&lt;br /&gt;
   next&lt;br /&gt;
    assume C6: &amp;quot;y≠a&amp;quot;&lt;br /&gt;
    then have &amp;quot;borraTodas x (borra y (a#xs)) = borraTodas x (a # borra y xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = a # borraTodas x (borra y xs)&amp;quot; using C4 by simp&lt;br /&gt;
    also have &amp;quot;... = a # borra y (borraTodas x xs)&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;?P x y (a#xs)&amp;quot; using C6 C4 by simp&lt;br /&gt;
   qed&lt;br /&gt;
  qed&lt;br /&gt;
 qed&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;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
  y = a⇣1&lt;br /&gt;
  x = a⇣2&lt;br /&gt;
  xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 y = a⇣1&lt;br /&gt;
 x = a⇣2&lt;br /&gt;
 xs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.1. Demostrar o refutar automáticamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma sust_borraTodas:&lt;br /&gt;
  &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot; (is &amp;quot;?P x y zs&amp;quot;)&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
 show &amp;quot;?P x y []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix zs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x y zs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x y (a#zs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;sust x y (borraTodas x (a#zs)) = sust x y (a # borraTodas x zs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # sust x y (borraTodas x zs)&amp;quot; using C2 by simp&lt;br /&gt;
  also have &amp;quot;... = a # borraTodas x zs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x y (a#zs)&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar:&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 y = a⇣2&lt;br /&gt;
 z = a⇣1&lt;br /&gt;
 zs = [a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo&lt;br /&gt;
 x = a⇣1&lt;br /&gt;
 xs = [a⇣1, a⇣2, a⇣1]&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_concat:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot; (is &amp;quot;?P x xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs ys&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs) ys&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C1 by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;borraTodas x ((a#xs)@ys) = a # borraTodas x (xs@ys)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = a # (borraTodas x xs)@(borraTodas x ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs) ys&amp;quot; using C2 by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.1. Demostrar o refutar automáticamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: borraTodas_concat)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19.2. Demostrar o refutar detalladamente&lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot; (is &amp;quot;?P x xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;?P x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix a :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;?P x xs&amp;quot;&lt;br /&gt;
 show &amp;quot;?P x (a#xs)&amp;quot;&lt;br /&gt;
 proof cases&lt;br /&gt;
  assume C1: &amp;quot;x=a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x (rev [a])&amp;quot; using C1 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev (a#xs))&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume C2: &amp;quot;x≠a&amp;quot;&lt;br /&gt;
  then have &amp;quot;rev (borraTodas x (a#xs)) = rev (a # borraTodas x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (borraTodas x xs) @ [a]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs) @ borraTodas x [a]&amp;quot; using HI C2 by simp&lt;br /&gt;
  also have &amp;quot;... = borraTodas x (rev xs @ [a])&amp;quot; by (simp add: borraTodas_concat)&lt;br /&gt;
  finally show &amp;quot;?P x (a#xs)&amp;quot; by simp&lt;br /&gt;
 qed&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_5&amp;diff=281</id>
		<title>Relación 5</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_5&amp;diff=281"/>
		<updated>2013-12-12T08:42:19Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R5: Cuantificadores sobre listas *}&lt;br /&gt;
&lt;br /&gt;
theory R5&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav marescpla julrobrel&amp;quot;&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]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[],[3]]&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav marescpla julrobrel&amp;quot;&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; --&amp;quot;(xs)=xs  julrobrel&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&amp;quot; -- &amp;quot;TRUE&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[],[3]]&amp;quot; -- &amp;quot;FALSE&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;
-- &amp;quot;irealetei diecabmen1 pabflomar domlloriv juaruipav marescpla julrobrel&amp;quot;&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;
-- &amp;quot;irealetei pabflomar maresccas4 juaruipav domlloriv&amp;quot;&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  a 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) (a#xs) = ((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; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos (λx. P x ∧ Q x) (a#xs) =  (todos P (a # xs) ∧ todos Q (a # xs))&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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;
  show &amp;quot;?P []&amp;quot; by simp&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 (λx. P x ∧ Q x) (a # xs) =  (( 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; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla&amp;quot;&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 Q xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
show &amp;quot;?P Q []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
fix x xs&lt;br /&gt;
assume HI: &amp;quot;?P Q xs&amp;quot;&lt;br /&gt;
have &amp;quot;todos (λx. P x ∧ Q x) (x#xs) =((λx. P x ∧ Q x) x ∧ todos (λx. P x ∧ Q x) xs)&amp;quot; by (simp only: todos.simps(2))&lt;br /&gt;
also have &amp;quot; ... = ((λx. P x ∧ Q x) x ∧ todos P xs ∧ todos Q xs)&amp;quot; using HI by simp&lt;br /&gt;
also have &amp;quot; ...= ((P x) ∧ (Q x) ∧ todos P xs ∧ todos Q xs) &amp;quot; by simp&lt;br /&gt;
also have &amp;quot;... =((P x) ∧ todos P xs ∧ (Q x)∧ todos Q xs)&amp;quot;  by auto&lt;br /&gt;
also have &amp;quot; ...= (todos P (x#xs)  ∧ todos Q (x#xs))&amp;quot; by simp&lt;br /&gt;
finally show &amp;quot;?P Q (x#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel: sin usar auto&amp;quot;&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 a 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) (a#xs) = ((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; using HI by simp&lt;br /&gt;
  also have &amp;quot;...=((P a) ∧ ((Q a) ∧ (todos P xs)) ∧ (todos Q xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...=((P a) ∧ ((todos P xs) ∧ (Q a)) ∧ (todos Q xs))&amp;quot; by (simp add:conj_commute)&lt;br /&gt;
  also have &amp;quot;...=((todos P [a]) ∧ (todos P xs) ∧ (todos Q [a]) ∧ (todos Q xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;todos (λx. P x ∧ Q x) (a#xs) = (todos P (a#xs) ∧ todos Q (a#xs))&amp;quot; by simp&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav marescpla julrobrel&amp;quot;&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;
-- &amp;quot;irealetei pabflomar maresccas4 domllorv juaruipav julrobrel&amp;quot;&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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 marescpla&amp;quot;&lt;br /&gt;
lemma todos_append: &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot; (is &amp;quot;?P x y&amp;quot;)&lt;br /&gt;
proof (induct x)&lt;br /&gt;
  show &amp;quot;?P [] y&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a x&lt;br /&gt;
  assume HI: &amp;quot;?P x 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;?P (a#x) y&amp;quot; by auto&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;
--&amp;quot;maresccas4 julrobrel&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
apply (induct xs)&lt;br /&gt;
apply (simp_all add:todos_append)&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 irealetei juaruipav domlloriv marescpla&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: todos_append)&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;
--&amp;quot;irealetei maresccas4&amp;quot;&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 xs a&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;... = ( P a ∧ todos P (rev xs))&amp;quot; by (simp add:todos_append) auto&lt;br /&gt;
 also have &amp;quot;... = ( P a ∧ todos P xs)&amp;quot; using HI by simp&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;
(* pabflomar: Irene, la primera línea es prescindible &lt;br /&gt;
   irealetei: Ya pero lo veo más claro así ^_^O *)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar domlloriv&amp;quot;&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)) = (P a ∧ todos P (rev xs))&amp;quot; by (simp add:todos_append) auto&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P xs)&amp;quot; using HI by simp&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;
-- &amp;quot;diecabmen1&amp;quot;&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&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (todos P (rev xs) ∧ todos P [a])&amp;quot; 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;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav marescpla&amp;quot;&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; 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[a]∧todos P xs)&amp;quot; by auto&lt;br /&gt;
   also have &amp;quot;...= todos P ([a]@xs)&amp;quot; by (simp add:todos_append)&lt;br /&gt;
   also have &amp;quot;...= todos P (a#xs)&amp;quot; by simp&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;
--&amp;quot;ya veo que me he vuelto a complicar la vida (marescpla) jajaja&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel: sin usar auto&amp;quot;&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 @ rev [a])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...=(todos P (rev xs) ∧ todos P (rev [a]))&amp;quot; by (simp add: todos_append)&lt;br /&gt;
  also have &amp;quot;...=(todos P xs ∧ P a)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;...=(P a ∧ todos P xs)&amp;quot; by (simp add: conj_commute)&lt;br /&gt;
  also have &amp;quot;...=(todos P [a] ∧ todos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...=(todos P ([a]@xs))&amp;quot; by simp&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;
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;
--&amp;quot;irealetei&amp;quot;&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; 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 = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot; algunos (λx. P x ∧ Q x) (a # xs) =((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; using HI by simp&lt;br /&gt;
--&amp;quot;Me da que esto es falso&amp;quot;&lt;br /&gt;
qed*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(* irealetei: Me ha gustado la solución de maresccas4 diecabmen1 y me uno *)&lt;br /&gt;
(* juaruipav: Antes de empezar la demostración, quickcheck te avisa del contraejemplo*)&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei pabflomar juaruipav domlloriv marescpla julrobrel&amp;quot;&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;
(* Contraejemplo:&lt;br /&gt;
  P = {a⇣1}&lt;br /&gt;
  Q = {a⇣2}&lt;br /&gt;
  xs = {a⇣1, a⇣2}&lt;br /&gt;
*)&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;
-- &amp;quot;irealetei maresccas4 pabflomar domlloriv juaruipav marescpla julrobrel&amp;quot;&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 datalladamente&lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1 maresccas4 juaruipav domlloriv marescpla&amp;quot;&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)) =  algunos P (f a # (map f xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P (f a) ∨ algunos P (map f xs))&amp;quot; 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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* pabflomar: A mi al menos me resulta más cómoda mi versión, con menos &amp;quot;pasos intermedios&amp;quot; *)&lt;br /&gt;
&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; 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;
  finally show &amp;quot;algunos P (map f (a # xs)) = algunos (P ∘ f) (a # xs) &amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P ∘ 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)) = algunos P (f a # (map f xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...=((P ∘ f) a ∨ algunos P (map f xs))&amp;quot; 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;
  finally show &amp;quot;algunos P (map f (a#xs)) = algunos (P ∘ f) (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&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;
-- &amp;quot;irealetei diecabmen1 maresccas4 pabflomar domlloriv juaruipav marescpla julrobrel&amp;quot;&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;
-- &amp;quot;irealetei maresccas4 pabflomar juaruipav domlloriv marescpla julrobrel&amp;quot;&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) = (algunos P (a # xs) ∨ algunos P ys)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma algunos_append:&lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot; (is &amp;quot;?P xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs ys&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P ((a#xs) @ ys) = algunos P (a # xs @ ys) &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (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;?P (a#xs) ys&amp;quot; by simp&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;
-- &amp;quot;irealetei diecabmen1 pabflomar juaruipav domlloriv marescpla julrobrel&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:algunos_append)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
apply (induct xs)&lt;br /&gt;
apply (simp_all add:algunos_append)&lt;br /&gt;
by 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;
--&amp;quot;irealetei maresccas4 domlloriv&amp;quot;&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;... = (P a ∨ algunos P (rev xs))&amp;quot; by (simp add:algunos_append) auto&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 (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* ṕabflomar: Yo sigo empeñado en lo mismo, la primera linea sobra, ¿qué mas da el orden en el que verifiques el primer elemento de una lista?*)&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)) = (P a ∨ algunos P (rev xs))&amp;quot; by (simp add:algunos_append) auto&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 (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 marescpla&amp;quot;&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&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (algunos P (rev xs) ∨ algunos P [a])&amp;quot; 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;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
(* juaruipav: Versión con más &amp;quot;pasos intermedios&amp;quot; (eso que no le gusta a pabflomar),&lt;br /&gt;
yo lo veo más útil a la hora de interpretar el código. En otro caso utilizariamos la versión automática *)&lt;br /&gt;
&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; 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 auto&lt;br /&gt;
   also have &amp;quot;...= algunos P ([a]@xs)&amp;quot; by (simp add:todos_append)&lt;br /&gt;
   also have &amp;quot;...= algunos P (a#xs)&amp;quot; by simp&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;
--&amp;quot;julrobrel: sin auto&amp;quot;&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; 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 (simp add:disj_commute)&lt;br /&gt;
  also have &amp;quot;...=(algunos P (a#xs))&amp;quot; by simp&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;
&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;
--&amp;quot;irealetei diecabmen1 maresccas4 marescpla julrobrel domlloriv&amp;quot;&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;
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; 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 = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot; algunos (λx. P x ∨ Q x) (a # xs) = ((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; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (P a  ∨ algunos P xs ∨ Q a ∨ algunos Q xs)&amp;quot; by auto&lt;br /&gt;
  finally show &amp;quot; algunos (λx. P x ∨ Q x) (a # xs) = (algunos P (a # xs) ∨ algunos Q (a # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;marescpla: encima de largo, me da error xD pero bueno&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = algunos (λx. P x) xs ∨ algunos (λx. Q x) 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&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;algunos (λx. P x ∨ Q x) (x#xs) = ((λx. P x ∨ Q x) x ∨ algunos (λx. P x ∨ Q x) xs)&amp;quot; by (simp only: algunos.simps(2))&lt;br /&gt;
also have &amp;quot;... = ((λx. P x ∨ Q x) x ∨ algunos (λx. P x) xs ∨ algunos (λx. Q x) xs)&amp;quot;using HI by simp&lt;br /&gt;
also have &amp;quot;...=((P x)  ∨ (Q x) ∨ algunos (λx. P x) xs ∨ algunos (λx. Q x) xs)&amp;quot; by simp&lt;br /&gt;
also have &amp;quot;...=((P x) ∨ algunos (λx. P x) xs ∨ (Q x) ∨ algunos (λx. Q x) xs)&amp;quot; by auto&lt;br /&gt;
also have &amp;quot;...=(algunos (λx. P x) (x#xs) ∨ algunos (λx. Q x) (x#xs))&amp;quot; by simp&lt;br /&gt;
finally show &amp;quot;?P (x#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel: sin usar auto&amp;quot;&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; 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 =(algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos (λx. P x ∨ Q x) (a#xs)=(algunos (λx. P x ∨ Q x) [a] ∨ algunos (λx. P x ∨ Q x) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...=(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; using HI by simp&lt;br /&gt;
  also have &amp;quot;...=(P a ∨ (Q a ∨ algunos P xs) ∨ algunos Q xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...=(P a ∨ (algunos P xs ∨ Q a) ∨ algunos Q xs)&amp;quot; by (simp add:disj_commute)&lt;br /&gt;
  also have &amp;quot;...=(P a ∨ algunos P xs ∨ Q a ∨ algunos Q xs)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;algunos (λx. P x ∨ Q x) (a#xs)=(algunos P (a#xs) ∨ algunos Q (a#xs))&amp;quot; by simp&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;
-- &amp;quot;irealetei diecabmen1 maresccas4 juaruipav pabflomar marescpla julrobrel domlloriv&amp;quot;&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;
     &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.2. Demostrar o refutar datalladamente&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4 domlloriv&amp;quot;&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;
  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;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ (¬ todos (λx. ¬ P x) xs))&amp;quot; using HI 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 ∧ todos (λx. ¬ P x) xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (a # xs) = (¬ todos (λx. ¬ P x) (a # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 marescpla&amp;quot;&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;
  show &amp;quot;?P []&amp;quot; by simp&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (P a ∨ (¬ todos (λx. (¬ P x)) xs))&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav pabflomar&amp;quot;&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;
  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;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (P a ∨ (¬ todos (λx. ¬ P x) 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; by simp&lt;br /&gt;
qed&lt;br /&gt;
   &lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;  &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;
  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;algunos P (a # xs) = (algunos P [a] ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...=(P a ∨ (¬ todos (λx. (¬ P x)) xs))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;...=(¬(¬P a ∧ todos (λx. (¬ P x)) xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (a # xs) =(¬ (todos (λx. (¬ P x)) (a#xs)))&amp;quot; by simp&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;
--&amp;quot;irealetei diecabmen1 maresccas4 pabflomar marescpla julrobrel domlloriv&amp;quot;&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 (a # xs) = (a=x ∨ estaEn x xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;estaEn (2::nat) [3,2,4]&amp;quot; -- &amp;quot;True&amp;quot;&lt;br /&gt;
value &amp;quot;estaEn (1::nat) [3,2,4]&amp;quot; -- &amp;quot;False&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;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun igual :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ bool&amp;quot; where&lt;br /&gt;
&amp;quot;igual x y = (x=y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(algunos (igual x) xs) = (estaEn x xs)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(algunos (igual x) xs) = (estaEn x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; algunos (igual x) [] = estaEn x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;algunos (igual x) xs = estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos (igual x) (a # xs) = (igual x a ∨ algunos (igual x) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (igual x a ∨ estaEn x xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;algunos (igual x) (a # xs) = (estaEn x (a#xs))&amp;quot; by simp auto  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 marescpla julrobrel domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. (x=a)) xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. (x=a)) 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&lt;br /&gt;
next&lt;br /&gt;
  fix aa xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn a (aa#xs) = (a=aa ∨ estaEn a xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (a=aa ∨ algunos (λx. (x=a)) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (aa#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos (λx. x=a) xs = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;algunos (λx. x=a) [] = estaEn a []&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix y xs&lt;br /&gt;
 assume HI: &amp;quot;algunos (λx. x=a) xs = estaEn a xs&amp;quot;&lt;br /&gt;
 have &amp;quot;algunos (λx. x=a) (y#xs) = (y=a ∨ algunos (λx. x=a) xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y=a ∨ estaEn a xs)&amp;quot; using HI by simp&lt;br /&gt;
 finally show &amp;quot;algunos (λx. x=a) (y#xs) = estaEn a (y#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* Equivalente a la de diecabmen1, sin predicados.*)&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. x=a) xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. x=a) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;estaEn a [] = algunos (λx. x = a) []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix aa xs&lt;br /&gt;
  assume HI: &amp;quot;estaEn a xs = algunos (λx. x = a) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn a (aa # xs) = ( a=aa ∨ estaEn a xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a=aa ∨ algunos (λx. x = a) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (aa # xs) = algunos (λx. x = a) (aa # xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel: sin usar auto&amp;quot;&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;
  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;algunos P (a # xs) = (algunos P [a] ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...=(P a ∨ (¬ todos (λx. (¬ P x)) xs))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;...=(¬(¬P a ∧ todos (λx. (¬ P x)) xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (a # xs) =(¬ (todos (λx. (¬ P x)) (a#xs)))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Definir la función primitiva recursiva &lt;br /&gt;
     sinDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (sinDuplicados xs) se verifica si la lista xs no contiene&lt;br /&gt;
  duplicados. Por ejemplo,  &lt;br /&gt;
     sinDuplicados [1::nat,4,2]   = True&lt;br /&gt;
     sinDuplicados [1::nat,4,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun sinDuplicados&amp;#039; :: &amp;quot;&amp;#039;a ⇒&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados&amp;#039; a [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados&amp;#039; a (x#xs) = (a≠x ∧ sinDuplicados&amp;#039; a xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sinDuplicados :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (x#xs) = (sinDuplicados&amp;#039; x xs ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sinDuplicados [1::nat,4,2]&amp;quot;&lt;br /&gt;
value &amp;quot;sinDuplicados [1::nat,4,2,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 pabflomar marescpla julrobrel domlloriv&amp;quot;&lt;br /&gt;
fun sinDuplicados2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (x#xs) = (¬estaEn x xs ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Definir la función primitiva recursiva &lt;br /&gt;
     borraDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (borraDuplicados xs) es la lista obtenida eliminando los&lt;br /&gt;
  elementos duplicados de la lista xs. Por ejemplo, &lt;br /&gt;
     borraDuplicados [1::nat,2,4,2,3] = [1,4,2,3]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borraDuplicados es equivalente a la predefinida &lt;br /&gt;
  remdups. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun borraDuplicados :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados (x#xs) = (if x ∈ set xs then borraDuplicados xs else x#borraDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borraDuplicados [1::nat,2,4,2,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei pabflomar marescpla julrobrel domlloriv&amp;quot;&lt;br /&gt;
fun borraDuplicados2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados2 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados2 (x#xs) = (if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* irealetei: así tambien lo hice, pero no me terminaba de gustar y lo cambié usando el &amp;quot;if&amp;quot;*)&lt;br /&gt;
fun borraDuplicados3 :: &amp;quot;&amp;#039;a list =&amp;gt; &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados3 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados3 (x#xs) = (case estaEn x xs of True =&amp;gt; borraDuplicados3 xs | False =&amp;gt; x#borraDuplicados3 xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16.1. Demostrar o refutar automáticamente&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4 irealetei pabflomar marescpla domlloriv julrobrel&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma length_borraDuplicados:&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16.2. Demostrar o refutar detalladamente&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma length_borraDuplicados2:&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length 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&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;length (a#xs) = Suc 0  + length xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;length (borraDuplicados (a#xs)) = length (if a ∈ set xs then borraDuplicados xs else a#borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
  have &amp;quot;length xs ≤ Suc 0  + length xs&amp;quot; using HI by simp&lt;br /&gt;
  have &amp;quot;length (a#borraDuplicados xs) ≤ Suc 0  + length xs &amp;quot;using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei marescpla domlloriv&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;length (borraDuplicados []) ≤ length []&amp;quot; by simp&lt;br /&gt;
next  &lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
 have &amp;quot;length (borraDuplicados (x#xs)) ≤ 1 +  length (borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... ≤ 1 + length xs&amp;quot; using HI by simp&lt;br /&gt;
 finally show &amp;quot;length (borraDuplicados (x#xs)) ≤ length (x#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;julrobrel&amp;quot;&lt;br /&gt;
lemma &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;length (borraDuplicados []) ≤ length []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
  have &amp;quot;length (borraDuplicados (a # xs)) ≤ 1 + length (borraDuplicados (xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...≤ 1 + length xs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;length (borraDuplicados (a # xs)) ≤ length (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.1. Demostrar o refutar automáticamente &lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei marescpla diecabmen1 julrobrel domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.2. Demostrar o refutar detalladamente&lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados: &lt;br /&gt;
  &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 []) = estaEn a []&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix x xs&lt;br /&gt;
 assume HI: &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
 have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a (borraDuplicados2 xs) else estaEn a (x#borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a xs else (x=a ∨ estaEn a xs))&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a xs else estaEn a (x#xs))&amp;quot; by simp&lt;br /&gt;
 finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maesccas4 irealetei diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados_porCasos:&lt;br /&gt;
 &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 []) = estaEn a []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x xs&lt;br /&gt;
 assume HI: &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume &amp;quot;estaEn x xs&amp;quot;&lt;br /&gt;
  then have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= estaEn a xs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; by auto&lt;br /&gt;
 next&lt;br /&gt;
  assume &amp;quot;¬estaEn x xs&amp;quot;&lt;br /&gt;
  then have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (x = a ∨ estaEn a (borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; using HI by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei diecabmen1 julrobrel domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
by  (induct xs) (auto simp add: estaEn_borraDuplicados)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
 have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else sinDuplicados (x#borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else (¬estaEn x (borraDuplicados2 xs) ∧ sinDuplicados (borraDuplicados2 xs)))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else (¬estaEn x xs ∧ sinDuplicados (borraDuplicados2 xs)))&amp;quot; by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
 then show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma sinDuplicados_borraDuplicados_porCasos:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume h1: &amp;quot;estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (borraDuplicados2 xs)&amp;quot; using  h1 by simp&lt;br /&gt;
  finally show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI  by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume h2: &amp;quot;¬estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (x#borraDuplicados2 xs)&amp;quot; using h2 by simp&lt;br /&gt;
  also have &amp;quot;...= (¬estaEn x xs ∧ sinDuplicados (borraDuplicados2 xs))&amp;quot; by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (borraDuplicados2 xs)&amp;quot; using  h2 by simp&lt;br /&gt;
  finally show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;sinDuplicados (borraDuplicados [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  fix xs::&amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  assume HI:&amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume &amp;quot;estaEn a xs&amp;quot;&lt;br /&gt;
    then have &amp;quot;sinDuplicados (borraDuplicados (a # xs)) = sinDuplicados (borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = True&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume HI2:&amp;quot;¬estaEn a xs&amp;quot;&lt;br /&gt;
    then have &amp;quot;sinDuplicados (borraDuplicados (a # xs)) = sinDuplicados (a # borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (¬estaEn a (borraDuplicados xs) ∧ sinDuplicados(borraDuplicados xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (¬estaEn a (borraDuplicados xs) ∧ True)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...= (¬estaEn a xs)&amp;quot; by (simp add:estaEn_borraDuplicados)&lt;br /&gt;
    finally show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot; using HI2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar o refutar:&lt;br /&gt;
    borraDuplicados (rev xs) = rev (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei diecabmen1 julrobrel domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraDuplicados (rev xs) = rev (borraDuplicados xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  xs = {a⇣1, a⇣2, a⇣1}&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_5&amp;diff=270</id>
		<title>Relación 5</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_5&amp;diff=270"/>
		<updated>2013-12-10T16:06:51Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R5: Cuantificadores sobre listas *}&lt;br /&gt;
&lt;br /&gt;
theory R5&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[],[3]]&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&amp;quot; -- &amp;quot;TRUE&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[],[3]]&amp;quot; -- &amp;quot;FALSE&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;
-- &amp;quot;irealetei diecabmen1 pabflomar domlloriv juaruipav&amp;quot;&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;
-- &amp;quot;irealetei pabflomar maresccas4 juaruipav domlloriv&amp;quot;&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  a 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) (a#xs) = ((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; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos (λx. P x ∧ Q x) (a#xs) =  (todos P (a # xs) ∧ todos Q (a # xs))&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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;
  show &amp;quot;?P []&amp;quot; by simp&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 (λx. P x ∧ Q x) (a # xs) =  (( 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; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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;
-- &amp;quot;irealetei pabflomar maresccas4 domllorv juaruipav&amp;quot;&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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma todos_append: &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot; (is &amp;quot;?P x y&amp;quot;)&lt;br /&gt;
proof (induct x)&lt;br /&gt;
  show &amp;quot;?P [] y&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a x&lt;br /&gt;
  assume HI: &amp;quot;?P x 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;?P (a#x) y&amp;quot; by auto&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;
--&amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
apply (induct xs)&lt;br /&gt;
apply (simp_all add:todos_append)&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: todos_append)&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;
--&amp;quot;irealetei maresccas4&amp;quot;&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 xs a&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;... = ( P a ∧ todos P (rev xs))&amp;quot; by (simp add:todos_append) auto&lt;br /&gt;
 also have &amp;quot;... = ( P a ∧ todos P xs)&amp;quot; using HI by simp&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;
(* pabflomar: Irene, la primera línea es prescindible &lt;br /&gt;
   irealetei: Ya pero lo veo más claro así ^_^O *)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar domlloriv&amp;quot;&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)) = (P a ∧ todos P (rev xs))&amp;quot; by (simp add:todos_append) auto&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P xs)&amp;quot; using HI by simp&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;
-- &amp;quot;diecabmen1&amp;quot;&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&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (todos P (rev xs) ∧ todos P [a])&amp;quot; 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;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&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; 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[a]∧todos P xs)&amp;quot; by auto&lt;br /&gt;
   also have &amp;quot;...= todos P ([a]@xs)&amp;quot; by (simp add:todos_append)&lt;br /&gt;
   also have &amp;quot;...= todos P (a#xs)&amp;quot; by simp&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;
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;
--&amp;quot;irealetei&amp;quot;&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; 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 = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot; algunos (λx. P x ∧ Q x) (a # xs) =((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; using HI by simp&lt;br /&gt;
--&amp;quot;Me da que esto es falso&amp;quot;&lt;br /&gt;
qed*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(* irealetei: Me ha gustado la solución de maresccas4 diecabmen1 y me uno *)&lt;br /&gt;
(* juaruipav: Antes de empezar la demostración, quickcheck te avisa del contraejemplo*)&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei pabflomar juaruipav domlloriv&amp;quot;&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;
(* Contraejemplo:&lt;br /&gt;
  P = {a⇣1}&lt;br /&gt;
  Q = {a⇣2}&lt;br /&gt;
  xs = {a⇣1, a⇣2}&lt;br /&gt;
*)&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;
-- &amp;quot;irealetei maresccas4 pabflomar domlloriv juaruipav&amp;quot;&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 datalladamente&lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1 maresccas4 juaruipav domlloriv&amp;quot;&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)) =  algunos P (f a # (map f xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P (f a) ∨ algunos P (map f xs))&amp;quot; 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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* pabflomar: A mi al menos me resulta más cómoda mi versión, con menos &amp;quot;pasos intermedios&amp;quot; *)&lt;br /&gt;
&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; 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;
  finally show &amp;quot;algunos P (map f (a # xs)) = algunos (P ∘ f) (a # xs) &amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&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;
-- &amp;quot;irealetei diecabmen1 maresccas4 pabflomar domlloriv juaruipav&amp;quot;&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;
-- &amp;quot;irealetei maresccas4 pabflomar juaruipav domlloriv&amp;quot;&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) = (algunos P (a # xs) ∨ algunos P ys)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma algunos_append:&lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot; (is &amp;quot;?P xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs ys&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P ((a#xs) @ ys) = algunos P (a # xs @ ys) &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (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;?P (a#xs) ys&amp;quot; by simp&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;
-- &amp;quot;irealetei diecabmen1 pabflomar juaruipav&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:algunos_append)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
apply (induct xs)&lt;br /&gt;
apply (simp_all add:algunos_append)&lt;br /&gt;
by 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;
--&amp;quot;irealetei maresccas4&amp;quot;&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;... = (P a ∨ algunos P (rev xs))&amp;quot; by (simp add:algunos_append) auto&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 (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* ṕabflomar: Yo sigo empeñado en lo mismo, la primera linea sobra, ¿qué mas da el orden en el que verifiques el primer elemento de una lista?*)&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)) = (P a ∨ algunos P (rev xs))&amp;quot; by (simp add:algunos_append) auto&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 (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (algunos P (rev xs) ∨ algunos P [a])&amp;quot; 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;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
(* juaruipav: Versión con más &amp;quot;pasos intermedios&amp;quot; (eso que no le gusta a pabflomar),&lt;br /&gt;
yo lo veo más útil a la hora de interpretar el código. En otro caso utilizariamos la versión automática *)&lt;br /&gt;
&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; 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 auto&lt;br /&gt;
   also have &amp;quot;...= algunos P ([a]@xs)&amp;quot; by (simp add:todos_append)&lt;br /&gt;
   also have &amp;quot;...= algunos P (a#xs)&amp;quot; by simp&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;
&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;
--&amp;quot;irealetei diecabmen1 maresccas4&amp;quot;&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;
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; 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 = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot; algunos (λx. P x ∨ Q x) (a # xs) = ((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; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (P a  ∨ algunos P xs ∨ Q a ∨ algunos Q xs)&amp;quot; by auto&lt;br /&gt;
  finally show &amp;quot; algunos (λx. P x ∨ Q x) (a # xs) = (algunos P (a # xs) ∨ algunos Q (a # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&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;
-- &amp;quot;irealetei diecabmen1 maresccas4 juaruipav pabflomar&amp;quot;&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;
     &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.2. Demostrar o refutar datalladamente&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4&amp;quot;&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;
  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;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ (¬ todos (λx. ¬ P x) xs))&amp;quot; using HI 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 ∧ todos (λx. ¬ P x) xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (a # xs) = (¬ todos (λx. ¬ P x) (a # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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;
  show &amp;quot;?P []&amp;quot; by simp&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (P a ∨ (¬ todos (λx. (¬ P x)) xs))&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav pabflomar&amp;quot;&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;
  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;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (P a ∨ (¬ todos (λx. ¬ P x) 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; by simp&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;
--&amp;quot;irealetei diecabmen1 maresccas4 pabflomar&amp;quot;&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 (a # xs) = (a=x ∨ estaEn x xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;estaEn (2::nat) [3,2,4]&amp;quot; -- &amp;quot;True&amp;quot;&lt;br /&gt;
value &amp;quot;estaEn (1::nat) [3,2,4]&amp;quot; -- &amp;quot;False&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;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun igual :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ bool&amp;quot; where&lt;br /&gt;
&amp;quot;igual x y = (x=y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(algunos (igual x) xs) = (estaEn x xs)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(algunos (igual x) xs) = (estaEn x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; algunos (igual x) [] = estaEn x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;algunos (igual x) xs = estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos (igual x) (a # xs) = (igual x a ∨ algunos (igual x) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (igual x a ∨ estaEn x xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;algunos (igual x) (a # xs) = (estaEn x (a#xs))&amp;quot; by simp auto  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. (x=a)) xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. (x=a)) 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&lt;br /&gt;
next&lt;br /&gt;
  fix aa xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn a (aa#xs) = (a=aa ∨ estaEn a xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (a=aa ∨ algunos (λx. (x=a)) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (aa#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos (λx. x=a) xs = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;algunos (λx. x=a) [] = estaEn a []&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix y xs&lt;br /&gt;
 assume HI: &amp;quot;algunos (λx. x=a) xs = estaEn a xs&amp;quot;&lt;br /&gt;
 have &amp;quot;algunos (λx. x=a) (y#xs) = (y=a ∨ algunos (λx. x=a) xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y=a ∨ estaEn a xs)&amp;quot; using HI by simp&lt;br /&gt;
 finally show &amp;quot;algunos (λx. x=a) (y#xs) = estaEn a (y#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* Equivalente a la de diecabmen1, sin predicados.*)&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. x=a) xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. x=a) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;estaEn a [] = algunos (λx. x = a) []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix aa xs&lt;br /&gt;
  assume HI: &amp;quot;estaEn a xs = algunos (λx. x = a) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn a (aa # xs) = ( a=aa ∨ estaEn a xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a=aa ∨ algunos (λx. x = a) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (aa # xs) = algunos (λx. x = a) (aa # xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Definir la función primitiva recursiva &lt;br /&gt;
     sinDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (sinDuplicados xs) se verifica si la lista xs no contiene&lt;br /&gt;
  duplicados. Por ejemplo,  &lt;br /&gt;
     sinDuplicados [1::nat,4,2]   = True&lt;br /&gt;
     sinDuplicados [1::nat,4,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun sinDuplicados&amp;#039; :: &amp;quot;&amp;#039;a ⇒&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados&amp;#039; a [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados&amp;#039; a (x#xs) = (a≠x ∧ sinDuplicados&amp;#039; a xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sinDuplicados :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (x#xs) = (sinDuplicados&amp;#039; x xs ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sinDuplicados [1::nat,4,2]&amp;quot;&lt;br /&gt;
value &amp;quot;sinDuplicados [1::nat,4,2,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
fun sinDuplicados2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (x#xs) = (¬estaEn x xs ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Definir la función primitiva recursiva &lt;br /&gt;
     borraDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (borraDuplicados xs) es la lista obtenida eliminando los&lt;br /&gt;
  elementos duplicados de la lista xs. Por ejemplo, &lt;br /&gt;
     borraDuplicados [1::nat,2,4,2,3] = [1,4,2,3]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borraDuplicados es equivalente a la predefinida &lt;br /&gt;
  remdups. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun borraDuplicados :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados (x#xs) = (if x ∈ set xs then borraDuplicados xs else x#borraDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borraDuplicados [1::nat,2,4,2,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
fun borraDuplicados2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados2 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados2 (x#xs) = (if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* irealetei: así tambien lo hice, pero no me terminaba de gustar y lo cambié usando el &amp;quot;if&amp;quot;*)&lt;br /&gt;
fun borraDuplicados3 :: &amp;quot;&amp;#039;a list =&amp;gt; &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados3 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados3 (x#xs) = (case estaEn x xs of True =&amp;gt; borraDuplicados3 xs | False =&amp;gt; x#borraDuplicados3 xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16.1. Demostrar o refutar automáticamente&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma length_borraDuplicados:&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16.2. Demostrar o refutar detalladamente&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma length_borraDuplicados2:&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length 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&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;length (a#xs) = Suc 0  + length xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;length (borraDuplicados (a#xs)) = length (if a ∈ set xs then borraDuplicados xs else a#borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
  have &amp;quot;length xs ≤ Suc 0  + length xs&amp;quot; using HI by simp&lt;br /&gt;
  have &amp;quot;length (a#borraDuplicados xs) ≤ Suc 0  + length xs &amp;quot;using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;length (borraDuplicados []) ≤ length []&amp;quot; by simp&lt;br /&gt;
next  &lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
 have &amp;quot;length (borraDuplicados (x#xs)) ≤ 1 +  length (borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... ≤ 1 + length xs&amp;quot; using HI by simp&lt;br /&gt;
 finally show &amp;quot;length (borraDuplicados (x#xs)) ≤ length (x#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.1. Demostrar o refutar automáticamente &lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.2. Demostrar o refutar detalladamente&lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados: &lt;br /&gt;
  &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 []) = estaEn a []&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix x xs&lt;br /&gt;
 assume HI: &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
 have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a (borraDuplicados2 xs) else estaEn a (x#borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a xs else (x=a ∨ estaEn a xs))&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a xs else estaEn a (x#xs))&amp;quot; by simp&lt;br /&gt;
 finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maesccas4 irealetei&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados_porCasos:&lt;br /&gt;
 &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 []) = estaEn a []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x xs&lt;br /&gt;
 assume HI: &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume &amp;quot;estaEn x xs&amp;quot;&lt;br /&gt;
  then have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= estaEn a xs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; by auto&lt;br /&gt;
 next&lt;br /&gt;
  assume &amp;quot;¬estaEn x xs&amp;quot;&lt;br /&gt;
  then have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (x = a ∨ estaEn a (borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; using HI by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
by  (induct xs) (auto simp add: estaEn_borraDuplicados)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
 have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else sinDuplicados (x#borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else (¬estaEn x (borraDuplicados2 xs) ∧ sinDuplicados (borraDuplicados2 xs)))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else (¬estaEn x xs ∧ sinDuplicados (borraDuplicados2 xs)))&amp;quot; by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
 then show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma sinDuplicados_borraDuplicados_porCasos:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume h1: &amp;quot;estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (borraDuplicados2 xs)&amp;quot; using  h1 by simp&lt;br /&gt;
  finally show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI  by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume h2: &amp;quot;¬estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (x#borraDuplicados2 xs)&amp;quot; using h2 by simp&lt;br /&gt;
  also have &amp;quot;...= (¬estaEn x xs ∧ sinDuplicados (borraDuplicados2 xs))&amp;quot; by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (borraDuplicados2 xs)&amp;quot; using  h2 by simp&lt;br /&gt;
  finally show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;sinDuplicados (borraDuplicados [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  fix xs::&amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  assume HI:&amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume &amp;quot;estaEn a xs&amp;quot;&lt;br /&gt;
    then have &amp;quot;sinDuplicados (borraDuplicados (a # xs)) = sinDuplicados (borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = True&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume HI2:&amp;quot;¬estaEn a xs&amp;quot;&lt;br /&gt;
    then have &amp;quot;sinDuplicados (borraDuplicados (a # xs)) = sinDuplicados (a # borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (¬estaEn a (borraDuplicados xs) ∧ sinDuplicados(borraDuplicados xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (¬estaEn a (borraDuplicados xs) ∧ True)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...= (¬estaEn a xs)&amp;quot; by (simp add:estaEn_borraDuplicados)&lt;br /&gt;
    finally show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot; using HI2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar o refutar:&lt;br /&gt;
    borraDuplicados (rev xs) = rev (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraDuplicados (rev xs) = rev (borraDuplicados xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  xs = {a⇣1, a⇣2, a⇣1}&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_5&amp;diff=269</id>
		<title>Relación 5</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_5&amp;diff=269"/>
		<updated>2013-12-10T16:06:06Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R5: Cuantificadores sobre listas *}&lt;br /&gt;
&lt;br /&gt;
theory R5&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[],[3]]&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&amp;quot; -- &amp;quot;TRUE&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[],[3]]&amp;quot; -- &amp;quot;FALSE&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;
-- &amp;quot;irealetei diecabmen1 pabflomar domlloriv juaruipav&amp;quot;&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;
-- &amp;quot;irealetei pabflomar maresccas4 juaruipav domlloriv&amp;quot;&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  a 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) (a#xs) = ((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; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos (λx. P x ∧ Q x) (a#xs) =  (todos P (a # xs) ∧ todos Q (a # xs))&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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;
  show &amp;quot;?P []&amp;quot; by simp&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 (λx. P x ∧ Q x) (a # xs) =  (( 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; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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;
-- &amp;quot;irealetei pabflomar maresccas4 domllorv juaruipav&amp;quot;&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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma todos_append: &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot; (is &amp;quot;?P x y&amp;quot;)&lt;br /&gt;
proof (induct x)&lt;br /&gt;
  show &amp;quot;?P [] y&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a x&lt;br /&gt;
  assume HI: &amp;quot;?P x 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;?P (a#x) y&amp;quot; by auto&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;
--&amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
apply (induct xs)&lt;br /&gt;
apply (simp_all add:todos_append)&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: todos_append)&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;
--&amp;quot;irealetei maresccas4&amp;quot;&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 xs a&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;... = ( P a ∧ todos P (rev xs))&amp;quot; by (simp add:todos_append) auto&lt;br /&gt;
 also have &amp;quot;... = ( P a ∧ todos P xs)&amp;quot; using HI by simp&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;
(* pabflomar: Irene, la primera línea es prescindible &lt;br /&gt;
   irealetei: Ya pero lo veo más claro así ^_^O *)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar domlloriv&amp;quot;&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)) = (P a ∧ todos P (rev xs))&amp;quot; by (simp add:todos_append) auto&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P xs)&amp;quot; using HI by simp&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;
-- &amp;quot;diecabmen1&amp;quot;&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&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (todos P (rev xs) ∧ todos P [a])&amp;quot; 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;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&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; 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[a]∧todos P xs)&amp;quot; by auto&lt;br /&gt;
   also have &amp;quot;...= todos P ([a]@xs)&amp;quot; by (simp add:todos_append)&lt;br /&gt;
   also have &amp;quot;...= todos P (a#xs)&amp;quot; by simp&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;
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;
--&amp;quot;irealetei&amp;quot;&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; 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 = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot; algunos (λx. P x ∧ Q x) (a # xs) =((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; using HI by simp&lt;br /&gt;
--&amp;quot;Me da que esto es falso&amp;quot;&lt;br /&gt;
qed*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(* irealetei: Me ha gustado la solución de maresccas4 diecabmen1 y me uno *)&lt;br /&gt;
(* juaruipav: Antes de empezar la demostración, quickcheck te avisa del contraejemplo*)&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei pabflomar juaruipav domlloriv&amp;quot;&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;
(* Contraejemplo:&lt;br /&gt;
  P = {a⇣1}&lt;br /&gt;
  Q = {a⇣2}&lt;br /&gt;
  xs = {a⇣1, a⇣2}&lt;br /&gt;
*)&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;
-- &amp;quot;irealetei maresccas4 pabflomar domlloriv juaruipav&amp;quot;&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 datalladamente&lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1 maresccas4 juaruipav domlloriv&amp;quot;&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)) =  algunos P (f a # (map f xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P (f a) ∨ algunos P (map f xs))&amp;quot; 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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* pabflomar: A mi al menos me resulta más cómoda mi versión, con menos &amp;quot;pasos intermedios&amp;quot; *)&lt;br /&gt;
&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; 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;
  finally show &amp;quot;algunos P (map f (a # xs)) = algunos (P ∘ f) (a # xs) &amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&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;
-- &amp;quot;irealetei diecabmen1 maresccas4 pabflomar domlloriv juaruipav&amp;quot;&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;
-- &amp;quot;irealetei maresccas4 pabflomar juaruipav&amp;quot;&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) = (algunos P (a # xs) ∨ algunos P ys)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma algunos_append:&lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot; (is &amp;quot;?P xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs ys&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P ((a#xs) @ ys) = algunos P (a # xs @ ys) &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (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;?P (a#xs) ys&amp;quot; by simp&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;
-- &amp;quot;irealetei diecabmen1 pabflomar juaruipav&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:algunos_append)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
apply (induct xs)&lt;br /&gt;
apply (simp_all add:algunos_append)&lt;br /&gt;
by 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;
--&amp;quot;irealetei maresccas4&amp;quot;&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;... = (P a ∨ algunos P (rev xs))&amp;quot; by (simp add:algunos_append) auto&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 (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* ṕabflomar: Yo sigo empeñado en lo mismo, la primera linea sobra, ¿qué mas da el orden en el que verifiques el primer elemento de una lista?*)&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)) = (P a ∨ algunos P (rev xs))&amp;quot; by (simp add:algunos_append) auto&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 (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (algunos P (rev xs) ∨ algunos P [a])&amp;quot; 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;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
(* juaruipav: Versión con más &amp;quot;pasos intermedios&amp;quot; (eso que no le gusta a pabflomar),&lt;br /&gt;
yo lo veo más útil a la hora de interpretar el código. En otro caso utilizariamos la versión automática *)&lt;br /&gt;
&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; 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 auto&lt;br /&gt;
   also have &amp;quot;...= algunos P ([a]@xs)&amp;quot; by (simp add:todos_append)&lt;br /&gt;
   also have &amp;quot;...= algunos P (a#xs)&amp;quot; by simp&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;
&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;
--&amp;quot;irealetei diecabmen1 maresccas4&amp;quot;&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;
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; 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 = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot; algunos (λx. P x ∨ Q x) (a # xs) = ((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; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (P a  ∨ algunos P xs ∨ Q a ∨ algunos Q xs)&amp;quot; by auto&lt;br /&gt;
  finally show &amp;quot; algunos (λx. P x ∨ Q x) (a # xs) = (algunos P (a # xs) ∨ algunos Q (a # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&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;
-- &amp;quot;irealetei diecabmen1 maresccas4 juaruipav pabflomar&amp;quot;&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;
     &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.2. Demostrar o refutar datalladamente&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4&amp;quot;&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;
  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;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ (¬ todos (λx. ¬ P x) xs))&amp;quot; using HI 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 ∧ todos (λx. ¬ P x) xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (a # xs) = (¬ todos (λx. ¬ P x) (a # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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;
  show &amp;quot;?P []&amp;quot; by simp&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (P a ∨ (¬ todos (λx. (¬ P x)) xs))&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav pabflomar&amp;quot;&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;
  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;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (P a ∨ (¬ todos (λx. ¬ P x) 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; by simp&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;
--&amp;quot;irealetei diecabmen1 maresccas4 pabflomar&amp;quot;&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 (a # xs) = (a=x ∨ estaEn x xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;estaEn (2::nat) [3,2,4]&amp;quot; -- &amp;quot;True&amp;quot;&lt;br /&gt;
value &amp;quot;estaEn (1::nat) [3,2,4]&amp;quot; -- &amp;quot;False&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;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun igual :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ bool&amp;quot; where&lt;br /&gt;
&amp;quot;igual x y = (x=y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(algunos (igual x) xs) = (estaEn x xs)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(algunos (igual x) xs) = (estaEn x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; algunos (igual x) [] = estaEn x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;algunos (igual x) xs = estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos (igual x) (a # xs) = (igual x a ∨ algunos (igual x) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (igual x a ∨ estaEn x xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;algunos (igual x) (a # xs) = (estaEn x (a#xs))&amp;quot; by simp auto  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. (x=a)) xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. (x=a)) 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&lt;br /&gt;
next&lt;br /&gt;
  fix aa xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn a (aa#xs) = (a=aa ∨ estaEn a xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (a=aa ∨ algunos (λx. (x=a)) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (aa#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos (λx. x=a) xs = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;algunos (λx. x=a) [] = estaEn a []&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix y xs&lt;br /&gt;
 assume HI: &amp;quot;algunos (λx. x=a) xs = estaEn a xs&amp;quot;&lt;br /&gt;
 have &amp;quot;algunos (λx. x=a) (y#xs) = (y=a ∨ algunos (λx. x=a) xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y=a ∨ estaEn a xs)&amp;quot; using HI by simp&lt;br /&gt;
 finally show &amp;quot;algunos (λx. x=a) (y#xs) = estaEn a (y#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* Equivalente a la de diecabmen1, sin predicados.*)&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. x=a) xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. x=a) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;estaEn a [] = algunos (λx. x = a) []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix aa xs&lt;br /&gt;
  assume HI: &amp;quot;estaEn a xs = algunos (λx. x = a) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn a (aa # xs) = ( a=aa ∨ estaEn a xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a=aa ∨ algunos (λx. x = a) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (aa # xs) = algunos (λx. x = a) (aa # xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Definir la función primitiva recursiva &lt;br /&gt;
     sinDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (sinDuplicados xs) se verifica si la lista xs no contiene&lt;br /&gt;
  duplicados. Por ejemplo,  &lt;br /&gt;
     sinDuplicados [1::nat,4,2]   = True&lt;br /&gt;
     sinDuplicados [1::nat,4,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun sinDuplicados&amp;#039; :: &amp;quot;&amp;#039;a ⇒&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados&amp;#039; a [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados&amp;#039; a (x#xs) = (a≠x ∧ sinDuplicados&amp;#039; a xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sinDuplicados :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (x#xs) = (sinDuplicados&amp;#039; x xs ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sinDuplicados [1::nat,4,2]&amp;quot;&lt;br /&gt;
value &amp;quot;sinDuplicados [1::nat,4,2,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
fun sinDuplicados2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (x#xs) = (¬estaEn x xs ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Definir la función primitiva recursiva &lt;br /&gt;
     borraDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (borraDuplicados xs) es la lista obtenida eliminando los&lt;br /&gt;
  elementos duplicados de la lista xs. Por ejemplo, &lt;br /&gt;
     borraDuplicados [1::nat,2,4,2,3] = [1,4,2,3]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borraDuplicados es equivalente a la predefinida &lt;br /&gt;
  remdups. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun borraDuplicados :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados (x#xs) = (if x ∈ set xs then borraDuplicados xs else x#borraDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borraDuplicados [1::nat,2,4,2,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
fun borraDuplicados2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados2 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados2 (x#xs) = (if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* irealetei: así tambien lo hice, pero no me terminaba de gustar y lo cambié usando el &amp;quot;if&amp;quot;*)&lt;br /&gt;
fun borraDuplicados3 :: &amp;quot;&amp;#039;a list =&amp;gt; &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados3 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados3 (x#xs) = (case estaEn x xs of True =&amp;gt; borraDuplicados3 xs | False =&amp;gt; x#borraDuplicados3 xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16.1. Demostrar o refutar automáticamente&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma length_borraDuplicados:&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16.2. Demostrar o refutar detalladamente&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma length_borraDuplicados2:&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length 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&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;length (a#xs) = Suc 0  + length xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;length (borraDuplicados (a#xs)) = length (if a ∈ set xs then borraDuplicados xs else a#borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
  have &amp;quot;length xs ≤ Suc 0  + length xs&amp;quot; using HI by simp&lt;br /&gt;
  have &amp;quot;length (a#borraDuplicados xs) ≤ Suc 0  + length xs &amp;quot;using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;length (borraDuplicados []) ≤ length []&amp;quot; by simp&lt;br /&gt;
next  &lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
 have &amp;quot;length (borraDuplicados (x#xs)) ≤ 1 +  length (borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... ≤ 1 + length xs&amp;quot; using HI by simp&lt;br /&gt;
 finally show &amp;quot;length (borraDuplicados (x#xs)) ≤ length (x#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.1. Demostrar o refutar automáticamente &lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.2. Demostrar o refutar detalladamente&lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados: &lt;br /&gt;
  &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 []) = estaEn a []&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix x xs&lt;br /&gt;
 assume HI: &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
 have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a (borraDuplicados2 xs) else estaEn a (x#borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a xs else (x=a ∨ estaEn a xs))&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a xs else estaEn a (x#xs))&amp;quot; by simp&lt;br /&gt;
 finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maesccas4 irealetei&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados_porCasos:&lt;br /&gt;
 &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 []) = estaEn a []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x xs&lt;br /&gt;
 assume HI: &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume &amp;quot;estaEn x xs&amp;quot;&lt;br /&gt;
  then have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= estaEn a xs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; by auto&lt;br /&gt;
 next&lt;br /&gt;
  assume &amp;quot;¬estaEn x xs&amp;quot;&lt;br /&gt;
  then have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (x = a ∨ estaEn a (borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; using HI by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
by  (induct xs) (auto simp add: estaEn_borraDuplicados)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
 have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else sinDuplicados (x#borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else (¬estaEn x (borraDuplicados2 xs) ∧ sinDuplicados (borraDuplicados2 xs)))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else (¬estaEn x xs ∧ sinDuplicados (borraDuplicados2 xs)))&amp;quot; by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
 then show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma sinDuplicados_borraDuplicados_porCasos:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume h1: &amp;quot;estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (borraDuplicados2 xs)&amp;quot; using  h1 by simp&lt;br /&gt;
  finally show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI  by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume h2: &amp;quot;¬estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (x#borraDuplicados2 xs)&amp;quot; using h2 by simp&lt;br /&gt;
  also have &amp;quot;...= (¬estaEn x xs ∧ sinDuplicados (borraDuplicados2 xs))&amp;quot; by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (borraDuplicados2 xs)&amp;quot; using  h2 by simp&lt;br /&gt;
  finally show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;sinDuplicados (borraDuplicados [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  fix xs::&amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  assume HI:&amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume &amp;quot;estaEn a xs&amp;quot;&lt;br /&gt;
    then have &amp;quot;sinDuplicados (borraDuplicados (a # xs)) = sinDuplicados (borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = True&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume HI2:&amp;quot;¬estaEn a xs&amp;quot;&lt;br /&gt;
    then have &amp;quot;sinDuplicados (borraDuplicados (a # xs)) = sinDuplicados (a # borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (¬estaEn a (borraDuplicados xs) ∧ sinDuplicados(borraDuplicados xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (¬estaEn a (borraDuplicados xs) ∧ True)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...= (¬estaEn a xs)&amp;quot; by (simp add:estaEn_borraDuplicados)&lt;br /&gt;
    finally show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot; using HI2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar o refutar:&lt;br /&gt;
    borraDuplicados (rev xs) = rev (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraDuplicados (rev xs) = rev (borraDuplicados xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  xs = {a⇣1, a⇣2, a⇣1}&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_5&amp;diff=268</id>
		<title>Relación 5</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_5&amp;diff=268"/>
		<updated>2013-12-10T15:35:47Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R5: Cuantificadores sobre listas *}&lt;br /&gt;
&lt;br /&gt;
theory R5&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[],[3]]&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&amp;quot; -- &amp;quot;TRUE&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[],[3]]&amp;quot; -- &amp;quot;FALSE&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;
-- &amp;quot;irealetei diecabmen1 pabflomar domlloriv juaruipav&amp;quot;&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;
-- &amp;quot;irealetei pabflomar maresccas4 juaruipav domlloriv&amp;quot;&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  a 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) (a#xs) = ((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; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos (λx. P x ∧ Q x) (a#xs) =  (todos P (a # xs) ∧ todos Q (a # xs))&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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;
  show &amp;quot;?P []&amp;quot; by simp&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 (λx. P x ∧ Q x) (a # xs) =  (( 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; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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;
-- &amp;quot;irealetei pabflomar maresccas4 domllorv juaruipav&amp;quot;&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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma todos_append: &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot; (is &amp;quot;?P x y&amp;quot;)&lt;br /&gt;
proof (induct x)&lt;br /&gt;
  show &amp;quot;?P [] y&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a x&lt;br /&gt;
  assume HI: &amp;quot;?P x 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;?P (a#x) y&amp;quot; by auto&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;
--&amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
apply (induct xs)&lt;br /&gt;
apply (simp_all add:todos_append)&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: todos_append)&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;
--&amp;quot;irealetei maresccas4&amp;quot;&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 xs a&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;... = ( P a ∧ todos P (rev xs))&amp;quot; by (simp add:todos_append) auto&lt;br /&gt;
 also have &amp;quot;... = ( P a ∧ todos P xs)&amp;quot; using HI by simp&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;
(* pabflomar: Irene, la primera línea es prescindible &lt;br /&gt;
   irealetei: Ya pero lo veo más claro así ^_^O *)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar domlloriv&amp;quot;&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)) = (P a ∧ todos P (rev xs))&amp;quot; by (simp add:todos_append) auto&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P xs)&amp;quot; using HI by simp&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;
-- &amp;quot;diecabmen1&amp;quot;&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&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (todos P (rev xs) ∧ todos P [a])&amp;quot; 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;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&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; 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[a]∧todos P xs)&amp;quot; by auto&lt;br /&gt;
   also have &amp;quot;...= todos P ([a]@xs)&amp;quot; by (simp add:todos_append)&lt;br /&gt;
   also have &amp;quot;...= todos P (a#xs)&amp;quot; by simp&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;
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;
--&amp;quot;irealetei&amp;quot;&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; 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 = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot; algunos (λx. P x ∧ Q x) (a # xs) =((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; using HI by simp&lt;br /&gt;
--&amp;quot;Me da que esto es falso&amp;quot;&lt;br /&gt;
qed*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(* irealetei: Me ha gustado la solución de maresccas4 diecabmen1 y me uno *)&lt;br /&gt;
(* juaruipav: Antes de empezar la demostración, quickcheck te avisa del contraejemplo*)&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei pabflomar juaruipav domlloriv&amp;quot;&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;
(* Contraejemplo:&lt;br /&gt;
  P = {a⇣1}&lt;br /&gt;
  Q = {a⇣2}&lt;br /&gt;
  xs = {a⇣1, a⇣2}&lt;br /&gt;
*)&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;
-- &amp;quot;irealetei maresccas4 pabflomar domlloriv juaruipav&amp;quot;&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 datalladamente&lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1 maresccas4 juaruipav domlloriv&amp;quot;&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)) =  algunos P (f a # (map f xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P (f a) ∨ algunos P (map f xs))&amp;quot; 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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* pabflomar: A mi al menos me resulta más cómoda mi versión, con menos &amp;quot;pasos intermedios&amp;quot; *)&lt;br /&gt;
&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; 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;
  finally show &amp;quot;algunos P (map f (a # xs)) = algunos (P ∘ f) (a # xs) &amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&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;
-- &amp;quot;irealetei diecabmen1 maresccas4 pabflomar juaruipav&amp;quot;&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;
-- &amp;quot;irealetei maresccas4 pabflomar juaruipav&amp;quot;&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) = (algunos P (a # xs) ∨ algunos P ys)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma algunos_append:&lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot; (is &amp;quot;?P xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs ys&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P ((a#xs) @ ys) = algunos P (a # xs @ ys) &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (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;?P (a#xs) ys&amp;quot; by simp&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;
-- &amp;quot;irealetei diecabmen1 pabflomar juaruipav&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:algunos_append)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
apply (induct xs)&lt;br /&gt;
apply (simp_all add:algunos_append)&lt;br /&gt;
by 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;
--&amp;quot;irealetei maresccas4&amp;quot;&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;... = (P a ∨ algunos P (rev xs))&amp;quot; by (simp add:algunos_append) auto&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 (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* ṕabflomar: Yo sigo empeñado en lo mismo, la primera linea sobra, ¿qué mas da el orden en el que verifiques el primer elemento de una lista?*)&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)) = (P a ∨ algunos P (rev xs))&amp;quot; by (simp add:algunos_append) auto&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 (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (algunos P (rev xs) ∨ algunos P [a])&amp;quot; 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;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
(* juaruipav: Versión con más &amp;quot;pasos intermedios&amp;quot; (eso que no le gusta a pabflomar),&lt;br /&gt;
yo lo veo más útil a la hora de interpretar el código. En otro caso utilizariamos la versión automática *)&lt;br /&gt;
&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; 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 auto&lt;br /&gt;
   also have &amp;quot;...= algunos P ([a]@xs)&amp;quot; by (simp add:todos_append)&lt;br /&gt;
   also have &amp;quot;...= algunos P (a#xs)&amp;quot; by simp&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;
&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;
--&amp;quot;irealetei diecabmen1 maresccas4&amp;quot;&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;
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; 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 = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot; algunos (λx. P x ∨ Q x) (a # xs) = ((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; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (P a  ∨ algunos P xs ∨ Q a ∨ algunos Q xs)&amp;quot; by auto&lt;br /&gt;
  finally show &amp;quot; algunos (λx. P x ∨ Q x) (a # xs) = (algunos P (a # xs) ∨ algunos Q (a # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&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;
-- &amp;quot;irealetei diecabmen1 maresccas4 juaruipav pabflomar&amp;quot;&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;
     &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.2. Demostrar o refutar datalladamente&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4&amp;quot;&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;
  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;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ (¬ todos (λx. ¬ P x) xs))&amp;quot; using HI 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 ∧ todos (λx. ¬ P x) xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (a # xs) = (¬ todos (λx. ¬ P x) (a # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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;
  show &amp;quot;?P []&amp;quot; by simp&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (P a ∨ (¬ todos (λx. (¬ P x)) xs))&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav pabflomar&amp;quot;&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;
  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;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (P a ∨ (¬ todos (λx. ¬ P x) 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; by simp&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;
--&amp;quot;irealetei diecabmen1 maresccas4 pabflomar&amp;quot;&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 (a # xs) = (a=x ∨ estaEn x xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;estaEn (2::nat) [3,2,4]&amp;quot; -- &amp;quot;True&amp;quot;&lt;br /&gt;
value &amp;quot;estaEn (1::nat) [3,2,4]&amp;quot; -- &amp;quot;False&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;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun igual :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ bool&amp;quot; where&lt;br /&gt;
&amp;quot;igual x y = (x=y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(algunos (igual x) xs) = (estaEn x xs)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(algunos (igual x) xs) = (estaEn x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; algunos (igual x) [] = estaEn x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;algunos (igual x) xs = estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos (igual x) (a # xs) = (igual x a ∨ algunos (igual x) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (igual x a ∨ estaEn x xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;algunos (igual x) (a # xs) = (estaEn x (a#xs))&amp;quot; by simp auto  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. (x=a)) xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. (x=a)) 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&lt;br /&gt;
next&lt;br /&gt;
  fix aa xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn a (aa#xs) = (a=aa ∨ estaEn a xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (a=aa ∨ algunos (λx. (x=a)) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (aa#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos (λx. x=a) xs = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;algunos (λx. x=a) [] = estaEn a []&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix y xs&lt;br /&gt;
 assume HI: &amp;quot;algunos (λx. x=a) xs = estaEn a xs&amp;quot;&lt;br /&gt;
 have &amp;quot;algunos (λx. x=a) (y#xs) = (y=a ∨ algunos (λx. x=a) xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y=a ∨ estaEn a xs)&amp;quot; using HI by simp&lt;br /&gt;
 finally show &amp;quot;algunos (λx. x=a) (y#xs) = estaEn a (y#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* Equivalente a la de diecabmen1, sin predicados.*)&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. x=a) xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. x=a) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;estaEn a [] = algunos (λx. x = a) []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix aa xs&lt;br /&gt;
  assume HI: &amp;quot;estaEn a xs = algunos (λx. x = a) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn a (aa # xs) = ( a=aa ∨ estaEn a xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a=aa ∨ algunos (λx. x = a) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (aa # xs) = algunos (λx. x = a) (aa # xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Definir la función primitiva recursiva &lt;br /&gt;
     sinDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (sinDuplicados xs) se verifica si la lista xs no contiene&lt;br /&gt;
  duplicados. Por ejemplo,  &lt;br /&gt;
     sinDuplicados [1::nat,4,2]   = True&lt;br /&gt;
     sinDuplicados [1::nat,4,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun sinDuplicados&amp;#039; :: &amp;quot;&amp;#039;a ⇒&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados&amp;#039; a [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados&amp;#039; a (x#xs) = (a≠x ∧ sinDuplicados&amp;#039; a xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sinDuplicados :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (x#xs) = (sinDuplicados&amp;#039; x xs ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sinDuplicados [1::nat,4,2]&amp;quot;&lt;br /&gt;
value &amp;quot;sinDuplicados [1::nat,4,2,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
fun sinDuplicados2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (x#xs) = (¬estaEn x xs ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Definir la función primitiva recursiva &lt;br /&gt;
     borraDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (borraDuplicados xs) es la lista obtenida eliminando los&lt;br /&gt;
  elementos duplicados de la lista xs. Por ejemplo, &lt;br /&gt;
     borraDuplicados [1::nat,2,4,2,3] = [1,4,2,3]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borraDuplicados es equivalente a la predefinida &lt;br /&gt;
  remdups. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun borraDuplicados :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados (x#xs) = (if x ∈ set xs then borraDuplicados xs else x#borraDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borraDuplicados [1::nat,2,4,2,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
fun borraDuplicados2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados2 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados2 (x#xs) = (if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* irealetei: así tambien lo hice, pero no me terminaba de gustar y lo cambié usando el &amp;quot;if&amp;quot;*)&lt;br /&gt;
fun borraDuplicados3 :: &amp;quot;&amp;#039;a list =&amp;gt; &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados3 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados3 (x#xs) = (case estaEn x xs of True =&amp;gt; borraDuplicados3 xs | False =&amp;gt; x#borraDuplicados3 xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16.1. Demostrar o refutar automáticamente&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma length_borraDuplicados:&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16.2. Demostrar o refutar detalladamente&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma length_borraDuplicados2:&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length 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&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;length (a#xs) = Suc 0  + length xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;length (borraDuplicados (a#xs)) = length (if a ∈ set xs then borraDuplicados xs else a#borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
  have &amp;quot;length xs ≤ Suc 0  + length xs&amp;quot; using HI by simp&lt;br /&gt;
  have &amp;quot;length (a#borraDuplicados xs) ≤ Suc 0  + length xs &amp;quot;using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;length (borraDuplicados []) ≤ length []&amp;quot; by simp&lt;br /&gt;
next  &lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
 have &amp;quot;length (borraDuplicados (x#xs)) ≤ 1 +  length (borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... ≤ 1 + length xs&amp;quot; using HI by simp&lt;br /&gt;
 finally show &amp;quot;length (borraDuplicados (x#xs)) ≤ length (x#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.1. Demostrar o refutar automáticamente &lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.2. Demostrar o refutar detalladamente&lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados: &lt;br /&gt;
  &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 []) = estaEn a []&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix x xs&lt;br /&gt;
 assume HI: &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
 have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a (borraDuplicados2 xs) else estaEn a (x#borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a xs else (x=a ∨ estaEn a xs))&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a xs else estaEn a (x#xs))&amp;quot; by simp&lt;br /&gt;
 finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maesccas4 irealetei&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados_porCasos:&lt;br /&gt;
 &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 []) = estaEn a []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x xs&lt;br /&gt;
 assume HI: &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume &amp;quot;estaEn x xs&amp;quot;&lt;br /&gt;
  then have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= estaEn a xs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; by auto&lt;br /&gt;
 next&lt;br /&gt;
  assume &amp;quot;¬estaEn x xs&amp;quot;&lt;br /&gt;
  then have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (x = a ∨ estaEn a (borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; using HI by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
by  (induct xs) (auto simp add: estaEn_borraDuplicados)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
 have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else sinDuplicados (x#borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else (¬estaEn x (borraDuplicados2 xs) ∧ sinDuplicados (borraDuplicados2 xs)))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else (¬estaEn x xs ∧ sinDuplicados (borraDuplicados2 xs)))&amp;quot; by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
 then show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma sinDuplicados_borraDuplicados_porCasos:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume h1: &amp;quot;estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (borraDuplicados2 xs)&amp;quot; using  h1 by simp&lt;br /&gt;
  finally show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI  by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume h2: &amp;quot;¬estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (x#borraDuplicados2 xs)&amp;quot; using h2 by simp&lt;br /&gt;
  also have &amp;quot;...= (¬estaEn x xs ∧ sinDuplicados (borraDuplicados2 xs))&amp;quot; by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (borraDuplicados2 xs)&amp;quot; using  h2 by simp&lt;br /&gt;
  finally show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;sinDuplicados (borraDuplicados [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  fix xs::&amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  assume HI:&amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume &amp;quot;estaEn a xs&amp;quot;&lt;br /&gt;
    then have &amp;quot;sinDuplicados (borraDuplicados (a # xs)) = sinDuplicados (borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = True&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume HI2:&amp;quot;¬estaEn a xs&amp;quot;&lt;br /&gt;
    then have &amp;quot;sinDuplicados (borraDuplicados (a # xs)) = sinDuplicados (a # borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (¬estaEn a (borraDuplicados xs) ∧ sinDuplicados(borraDuplicados xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (¬estaEn a (borraDuplicados xs) ∧ True)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...= (¬estaEn a xs)&amp;quot; by (simp add:estaEn_borraDuplicados)&lt;br /&gt;
    finally show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot; using HI2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar o refutar:&lt;br /&gt;
    borraDuplicados (rev xs) = rev (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraDuplicados (rev xs) = rev (borraDuplicados xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  xs = {a⇣1, a⇣2, a⇣1}&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_5&amp;diff=267</id>
		<title>Relación 5</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_5&amp;diff=267"/>
		<updated>2013-12-10T15:34:29Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R5: Cuantificadores sobre listas *}&lt;br /&gt;
&lt;br /&gt;
theory R5&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[],[3]]&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&amp;quot; -- &amp;quot;TRUE&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[],[3]]&amp;quot; -- &amp;quot;FALSE&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;
-- &amp;quot;irealetei diecabmen1 pabflomar domlloriv juaruipav&amp;quot;&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;
-- &amp;quot;irealetei pabflomar maresccas4 juaruipav domlloriv&amp;quot;&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  a 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) (a#xs) = ((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; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos (λx. P x ∧ Q x) (a#xs) =  (todos P (a # xs) ∧ todos Q (a # xs))&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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;
  show &amp;quot;?P []&amp;quot; by simp&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 (λx. P x ∧ Q x) (a # xs) =  (( 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; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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;
-- &amp;quot;irealetei pabflomar maresccas4 domllorv juaruipav&amp;quot;&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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma todos_append: &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot; (is &amp;quot;?P x y&amp;quot;)&lt;br /&gt;
proof (induct x)&lt;br /&gt;
  show &amp;quot;?P [] y&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a x&lt;br /&gt;
  assume HI: &amp;quot;?P x 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;?P (a#x) y&amp;quot; by auto&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;
--&amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
apply (induct xs)&lt;br /&gt;
apply (simp_all add:todos_append)&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: todos_append)&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;
--&amp;quot;irealetei maresccas4&amp;quot;&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 xs a&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;... = ( P a ∧ todos P (rev xs))&amp;quot; by (simp add:todos_append) auto&lt;br /&gt;
 also have &amp;quot;... = ( P a ∧ todos P xs)&amp;quot; using HI by simp&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;
(* pabflomar: Irene, la primera línea es prescindible &lt;br /&gt;
   irealetei: Ya pero lo veo más claro así ^_^O *)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar domlloriv&amp;quot;&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)) = (P a ∧ todos P (rev xs))&amp;quot; by (simp add:todos_append) auto&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P xs)&amp;quot; using HI by simp&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;
-- &amp;quot;diecabmen1&amp;quot;&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&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (todos P (rev xs) ∧ todos P [a])&amp;quot; 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;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&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; 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[a]∧todos P xs)&amp;quot; by auto&lt;br /&gt;
   also have &amp;quot;...= todos P ([a]@xs)&amp;quot; by (simp add:todos_append)&lt;br /&gt;
   also have &amp;quot;...= todos P (a#xs)&amp;quot; by simp&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;
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;
--&amp;quot;irealetei&amp;quot;&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; 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 = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot; algunos (λx. P x ∧ Q x) (a # xs) =((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; using HI by simp&lt;br /&gt;
--&amp;quot;Me da que esto es falso&amp;quot;&lt;br /&gt;
qed*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(* irealetei: Me ha gustado la solución de maresccas4 diecabmen1 y me uno *)&lt;br /&gt;
(* juaruipav: Antes de empezar la demostración, quickcheck te avisa del contraejemplo*)&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei pabflomar juaruipav domlloriv&amp;quot;&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;
(* Contraejemplo:&lt;br /&gt;
  P = {a⇣1}&lt;br /&gt;
  Q = {a⇣2}&lt;br /&gt;
  xs = {a⇣1, a⇣2}&lt;br /&gt;
*)&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;
-- &amp;quot;irealetei maresccas4 pabflomar domlloriv juaruipav&amp;quot;&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 datalladamente&lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1 maresccas4 juaruipav&amp;quot;&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)) =  algunos P (f a # (map f xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P (f a) ∨ algunos P (map f xs))&amp;quot; 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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* pabflomar: A mi al menos me resulta más cómoda mi versión, con menos &amp;quot;pasos intermedios&amp;quot; *)&lt;br /&gt;
&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; 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;
  finally show &amp;quot;algunos P (map f (a # xs)) = algunos (P ∘ f) (a # xs) &amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&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;
-- &amp;quot;irealetei diecabmen1 maresccas4 pabflomar juaruipav&amp;quot;&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;
-- &amp;quot;irealetei maresccas4 pabflomar juaruipav&amp;quot;&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) = (algunos P (a # xs) ∨ algunos P ys)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma algunos_append:&lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot; (is &amp;quot;?P xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs ys&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P ((a#xs) @ ys) = algunos P (a # xs @ ys) &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (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;?P (a#xs) ys&amp;quot; by simp&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;
-- &amp;quot;irealetei diecabmen1 pabflomar juaruipav&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:algunos_append)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
apply (induct xs)&lt;br /&gt;
apply (simp_all add:algunos_append)&lt;br /&gt;
by 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;
--&amp;quot;irealetei maresccas4&amp;quot;&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;... = (P a ∨ algunos P (rev xs))&amp;quot; by (simp add:algunos_append) auto&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 (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* ṕabflomar: Yo sigo empeñado en lo mismo, la primera linea sobra, ¿qué mas da el orden en el que verifiques el primer elemento de una lista?*)&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)) = (P a ∨ algunos P (rev xs))&amp;quot; by (simp add:algunos_append) auto&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 (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (algunos P (rev xs) ∨ algunos P [a])&amp;quot; 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;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
(* juaruipav: Versión con más &amp;quot;pasos intermedios&amp;quot; (eso que no le gusta a pabflomar),&lt;br /&gt;
yo lo veo más útil a la hora de interpretar el código. En otro caso utilizariamos la versión automática *)&lt;br /&gt;
&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; 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 auto&lt;br /&gt;
   also have &amp;quot;...= algunos P ([a]@xs)&amp;quot; by (simp add:todos_append)&lt;br /&gt;
   also have &amp;quot;...= algunos P (a#xs)&amp;quot; by simp&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;
&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;
--&amp;quot;irealetei diecabmen1 maresccas4&amp;quot;&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;
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; 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 = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot; algunos (λx. P x ∨ Q x) (a # xs) = ((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; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (P a  ∨ algunos P xs ∨ Q a ∨ algunos Q xs)&amp;quot; by auto&lt;br /&gt;
  finally show &amp;quot; algunos (λx. P x ∨ Q x) (a # xs) = (algunos P (a # xs) ∨ algunos Q (a # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&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;
-- &amp;quot;irealetei diecabmen1 maresccas4 juaruipav pabflomar&amp;quot;&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;
     &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.2. Demostrar o refutar datalladamente&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4&amp;quot;&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;
  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;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ (¬ todos (λx. ¬ P x) xs))&amp;quot; using HI 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 ∧ todos (λx. ¬ P x) xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (a # xs) = (¬ todos (λx. ¬ P x) (a # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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;
  show &amp;quot;?P []&amp;quot; by simp&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (P a ∨ (¬ todos (λx. (¬ P x)) xs))&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav pabflomar&amp;quot;&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;
  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;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (P a ∨ (¬ todos (λx. ¬ P x) 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; by simp&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;
--&amp;quot;irealetei diecabmen1 maresccas4 pabflomar&amp;quot;&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 (a # xs) = (a=x ∨ estaEn x xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;estaEn (2::nat) [3,2,4]&amp;quot; -- &amp;quot;True&amp;quot;&lt;br /&gt;
value &amp;quot;estaEn (1::nat) [3,2,4]&amp;quot; -- &amp;quot;False&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;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun igual :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ bool&amp;quot; where&lt;br /&gt;
&amp;quot;igual x y = (x=y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(algunos (igual x) xs) = (estaEn x xs)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(algunos (igual x) xs) = (estaEn x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; algunos (igual x) [] = estaEn x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;algunos (igual x) xs = estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos (igual x) (a # xs) = (igual x a ∨ algunos (igual x) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (igual x a ∨ estaEn x xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;algunos (igual x) (a # xs) = (estaEn x (a#xs))&amp;quot; by simp auto  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. (x=a)) xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. (x=a)) 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&lt;br /&gt;
next&lt;br /&gt;
  fix aa xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn a (aa#xs) = (a=aa ∨ estaEn a xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (a=aa ∨ algunos (λx. (x=a)) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (aa#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos (λx. x=a) xs = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;algunos (λx. x=a) [] = estaEn a []&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix y xs&lt;br /&gt;
 assume HI: &amp;quot;algunos (λx. x=a) xs = estaEn a xs&amp;quot;&lt;br /&gt;
 have &amp;quot;algunos (λx. x=a) (y#xs) = (y=a ∨ algunos (λx. x=a) xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y=a ∨ estaEn a xs)&amp;quot; using HI by simp&lt;br /&gt;
 finally show &amp;quot;algunos (λx. x=a) (y#xs) = estaEn a (y#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* Equivalente a la de diecabmen1, sin predicados.*)&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. x=a) xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. x=a) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;estaEn a [] = algunos (λx. x = a) []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix aa xs&lt;br /&gt;
  assume HI: &amp;quot;estaEn a xs = algunos (λx. x = a) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn a (aa # xs) = ( a=aa ∨ estaEn a xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a=aa ∨ algunos (λx. x = a) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (aa # xs) = algunos (λx. x = a) (aa # xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Definir la función primitiva recursiva &lt;br /&gt;
     sinDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (sinDuplicados xs) se verifica si la lista xs no contiene&lt;br /&gt;
  duplicados. Por ejemplo,  &lt;br /&gt;
     sinDuplicados [1::nat,4,2]   = True&lt;br /&gt;
     sinDuplicados [1::nat,4,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun sinDuplicados&amp;#039; :: &amp;quot;&amp;#039;a ⇒&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados&amp;#039; a [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados&amp;#039; a (x#xs) = (a≠x ∧ sinDuplicados&amp;#039; a xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sinDuplicados :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (x#xs) = (sinDuplicados&amp;#039; x xs ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sinDuplicados [1::nat,4,2]&amp;quot;&lt;br /&gt;
value &amp;quot;sinDuplicados [1::nat,4,2,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
fun sinDuplicados2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (x#xs) = (¬estaEn x xs ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Definir la función primitiva recursiva &lt;br /&gt;
     borraDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (borraDuplicados xs) es la lista obtenida eliminando los&lt;br /&gt;
  elementos duplicados de la lista xs. Por ejemplo, &lt;br /&gt;
     borraDuplicados [1::nat,2,4,2,3] = [1,4,2,3]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borraDuplicados es equivalente a la predefinida &lt;br /&gt;
  remdups. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun borraDuplicados :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados (x#xs) = (if x ∈ set xs then borraDuplicados xs else x#borraDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borraDuplicados [1::nat,2,4,2,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
fun borraDuplicados2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados2 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados2 (x#xs) = (if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* irealetei: así tambien lo hice, pero no me terminaba de gustar y lo cambié usando el &amp;quot;if&amp;quot;*)&lt;br /&gt;
fun borraDuplicados3 :: &amp;quot;&amp;#039;a list =&amp;gt; &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados3 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados3 (x#xs) = (case estaEn x xs of True =&amp;gt; borraDuplicados3 xs | False =&amp;gt; x#borraDuplicados3 xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16.1. Demostrar o refutar automáticamente&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma length_borraDuplicados:&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16.2. Demostrar o refutar detalladamente&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma length_borraDuplicados2:&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length 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&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;length (a#xs) = Suc 0  + length xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;length (borraDuplicados (a#xs)) = length (if a ∈ set xs then borraDuplicados xs else a#borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
  have &amp;quot;length xs ≤ Suc 0  + length xs&amp;quot; using HI by simp&lt;br /&gt;
  have &amp;quot;length (a#borraDuplicados xs) ≤ Suc 0  + length xs &amp;quot;using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;length (borraDuplicados []) ≤ length []&amp;quot; by simp&lt;br /&gt;
next  &lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
 have &amp;quot;length (borraDuplicados (x#xs)) ≤ 1 +  length (borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... ≤ 1 + length xs&amp;quot; using HI by simp&lt;br /&gt;
 finally show &amp;quot;length (borraDuplicados (x#xs)) ≤ length (x#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.1. Demostrar o refutar automáticamente &lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.2. Demostrar o refutar detalladamente&lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados: &lt;br /&gt;
  &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 []) = estaEn a []&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix x xs&lt;br /&gt;
 assume HI: &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
 have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a (borraDuplicados2 xs) else estaEn a (x#borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a xs else (x=a ∨ estaEn a xs))&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a xs else estaEn a (x#xs))&amp;quot; by simp&lt;br /&gt;
 finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maesccas4 irealetei&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados_porCasos:&lt;br /&gt;
 &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 []) = estaEn a []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x xs&lt;br /&gt;
 assume HI: &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume &amp;quot;estaEn x xs&amp;quot;&lt;br /&gt;
  then have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= estaEn a xs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; by auto&lt;br /&gt;
 next&lt;br /&gt;
  assume &amp;quot;¬estaEn x xs&amp;quot;&lt;br /&gt;
  then have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (x = a ∨ estaEn a (borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; using HI by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
by  (induct xs) (auto simp add: estaEn_borraDuplicados)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
 have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else sinDuplicados (x#borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else (¬estaEn x (borraDuplicados2 xs) ∧ sinDuplicados (borraDuplicados2 xs)))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else (¬estaEn x xs ∧ sinDuplicados (borraDuplicados2 xs)))&amp;quot; by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
 then show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma sinDuplicados_borraDuplicados_porCasos:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume h1: &amp;quot;estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (borraDuplicados2 xs)&amp;quot; using  h1 by simp&lt;br /&gt;
  finally show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI  by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume h2: &amp;quot;¬estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (x#borraDuplicados2 xs)&amp;quot; using h2 by simp&lt;br /&gt;
  also have &amp;quot;...= (¬estaEn x xs ∧ sinDuplicados (borraDuplicados2 xs))&amp;quot; by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (borraDuplicados2 xs)&amp;quot; using  h2 by simp&lt;br /&gt;
  finally show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;sinDuplicados (borraDuplicados [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  fix xs::&amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  assume HI:&amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume &amp;quot;estaEn a xs&amp;quot;&lt;br /&gt;
    then have &amp;quot;sinDuplicados (borraDuplicados (a # xs)) = sinDuplicados (borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = True&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume HI2:&amp;quot;¬estaEn a xs&amp;quot;&lt;br /&gt;
    then have &amp;quot;sinDuplicados (borraDuplicados (a # xs)) = sinDuplicados (a # borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (¬estaEn a (borraDuplicados xs) ∧ sinDuplicados(borraDuplicados xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (¬estaEn a (borraDuplicados xs) ∧ True)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...= (¬estaEn a xs)&amp;quot; by (simp add:estaEn_borraDuplicados)&lt;br /&gt;
    finally show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot; using HI2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar o refutar:&lt;br /&gt;
    borraDuplicados (rev xs) = rev (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraDuplicados (rev xs) = rev (borraDuplicados xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  xs = {a⇣1, a⇣2, a⇣1}&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_5&amp;diff=266</id>
		<title>Relación 5</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_5&amp;diff=266"/>
		<updated>2013-12-10T15:33:02Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R5: Cuantificadores sobre listas *}&lt;br /&gt;
&lt;br /&gt;
theory R5&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[],[3]]&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&amp;quot; -- &amp;quot;TRUE&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[],[3]]&amp;quot; -- &amp;quot;FALSE&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;
-- &amp;quot;irealetei diecabmen1 pabflomar domlloriv juaruipav&amp;quot;&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;
-- &amp;quot;irealetei pabflomar maresccas4 juaruipav domlloriv&amp;quot;&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  a 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) (a#xs) = ((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; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos (λx. P x ∧ Q x) (a#xs) =  (todos P (a # xs) ∧ todos Q (a # xs))&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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;
  show &amp;quot;?P []&amp;quot; by simp&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 (λx. P x ∧ Q x) (a # xs) =  (( 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; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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;
-- &amp;quot;irealetei pabflomar maresccas4 domllorv juaruipav&amp;quot;&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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma todos_append: &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot; (is &amp;quot;?P x y&amp;quot;)&lt;br /&gt;
proof (induct x)&lt;br /&gt;
  show &amp;quot;?P [] y&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a x&lt;br /&gt;
  assume HI: &amp;quot;?P x 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;?P (a#x) y&amp;quot; by auto&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;
--&amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
apply (induct xs)&lt;br /&gt;
apply (simp_all add:todos_append)&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: todos_append)&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;
--&amp;quot;irealetei maresccas4&amp;quot;&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 xs a&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;... = ( P a ∧ todos P (rev xs))&amp;quot; by (simp add:todos_append) auto&lt;br /&gt;
 also have &amp;quot;... = ( P a ∧ todos P xs)&amp;quot; using HI by simp&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;
(* pabflomar: Irene, la primera línea es prescindible &lt;br /&gt;
   irealetei: Ya pero lo veo más claro así ^_^O *)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar domlloriv&amp;quot;&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)) = (P a ∧ todos P (rev xs))&amp;quot; by (simp add:todos_append) auto&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P xs)&amp;quot; using HI by simp&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;
-- &amp;quot;diecabmen1&amp;quot;&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&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (todos P (rev xs) ∧ todos P [a])&amp;quot; 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;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&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; 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[a]∧todos P xs)&amp;quot; by auto&lt;br /&gt;
   also have &amp;quot;...= todos P ([a]@xs)&amp;quot; by (simp add:todos_append)&lt;br /&gt;
   also have &amp;quot;...= todos P (a#xs)&amp;quot; by simp&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;
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;
--&amp;quot;irealetei&amp;quot;&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; 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 = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot; algunos (λx. P x ∧ Q x) (a # xs) =((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; using HI by simp&lt;br /&gt;
--&amp;quot;Me da que esto es falso&amp;quot;&lt;br /&gt;
qed*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(* irealetei: Me ha gustado la solución de maresccas4 diecabmen1 y me uno *)&lt;br /&gt;
(* juaruipav: Antes de empezar la demostración, quickcheck te avisa del contraejemplo*)&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei pabflomar juaruipav domlloriv&amp;quot;&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;
(* Contraejemplo:&lt;br /&gt;
  P = {a⇣1}&lt;br /&gt;
  Q = {a⇣2}&lt;br /&gt;
  xs = {a⇣1, a⇣2}&lt;br /&gt;
*)&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;
-- &amp;quot;irealetei maresccas4 pabflomar juaruipav&amp;quot;&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 datalladamente&lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1 maresccas4 juaruipav&amp;quot;&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)) =  algunos P (f a # (map f xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P (f a) ∨ algunos P (map f xs))&amp;quot; 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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* pabflomar: A mi al menos me resulta más cómoda mi versión, con menos &amp;quot;pasos intermedios&amp;quot; *)&lt;br /&gt;
&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; 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;
  finally show &amp;quot;algunos P (map f (a # xs)) = algunos (P ∘ f) (a # xs) &amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&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;
-- &amp;quot;irealetei diecabmen1 maresccas4 pabflomar juaruipav&amp;quot;&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;
-- &amp;quot;irealetei maresccas4 pabflomar juaruipav&amp;quot;&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) = (algunos P (a # xs) ∨ algunos P ys)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma algunos_append:&lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot; (is &amp;quot;?P xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs ys&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P ((a#xs) @ ys) = algunos P (a # xs @ ys) &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (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;?P (a#xs) ys&amp;quot; by simp&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;
-- &amp;quot;irealetei diecabmen1 pabflomar juaruipav&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:algunos_append)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
apply (induct xs)&lt;br /&gt;
apply (simp_all add:algunos_append)&lt;br /&gt;
by 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;
--&amp;quot;irealetei maresccas4&amp;quot;&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;... = (P a ∨ algunos P (rev xs))&amp;quot; by (simp add:algunos_append) auto&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 (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* ṕabflomar: Yo sigo empeñado en lo mismo, la primera linea sobra, ¿qué mas da el orden en el que verifiques el primer elemento de una lista?*)&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)) = (P a ∨ algunos P (rev xs))&amp;quot; by (simp add:algunos_append) auto&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 (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (algunos P (rev xs) ∨ algunos P [a])&amp;quot; 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;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
(* juaruipav: Versión con más &amp;quot;pasos intermedios&amp;quot; (eso que no le gusta a pabflomar),&lt;br /&gt;
yo lo veo más útil a la hora de interpretar el código. En otro caso utilizariamos la versión automática *)&lt;br /&gt;
&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; 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 auto&lt;br /&gt;
   also have &amp;quot;...= algunos P ([a]@xs)&amp;quot; by (simp add:todos_append)&lt;br /&gt;
   also have &amp;quot;...= algunos P (a#xs)&amp;quot; by simp&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;
&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;
--&amp;quot;irealetei diecabmen1 maresccas4&amp;quot;&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;
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; 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 = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot; algunos (λx. P x ∨ Q x) (a # xs) = ((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; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (P a  ∨ algunos P xs ∨ Q a ∨ algunos Q xs)&amp;quot; by auto&lt;br /&gt;
  finally show &amp;quot; algunos (λx. P x ∨ Q x) (a # xs) = (algunos P (a # xs) ∨ algunos Q (a # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&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;
-- &amp;quot;irealetei diecabmen1 maresccas4 juaruipav pabflomar&amp;quot;&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;
     &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.2. Demostrar o refutar datalladamente&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4&amp;quot;&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;
  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;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ (¬ todos (λx. ¬ P x) xs))&amp;quot; using HI 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 ∧ todos (λx. ¬ P x) xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (a # xs) = (¬ todos (λx. ¬ P x) (a # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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;
  show &amp;quot;?P []&amp;quot; by simp&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (P a ∨ (¬ todos (λx. (¬ P x)) xs))&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav pabflomar&amp;quot;&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;
  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;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (P a ∨ (¬ todos (λx. ¬ P x) 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; by simp&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;
--&amp;quot;irealetei diecabmen1 maresccas4 pabflomar&amp;quot;&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 (a # xs) = (a=x ∨ estaEn x xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;estaEn (2::nat) [3,2,4]&amp;quot; -- &amp;quot;True&amp;quot;&lt;br /&gt;
value &amp;quot;estaEn (1::nat) [3,2,4]&amp;quot; -- &amp;quot;False&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;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun igual :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ bool&amp;quot; where&lt;br /&gt;
&amp;quot;igual x y = (x=y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(algunos (igual x) xs) = (estaEn x xs)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(algunos (igual x) xs) = (estaEn x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; algunos (igual x) [] = estaEn x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;algunos (igual x) xs = estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos (igual x) (a # xs) = (igual x a ∨ algunos (igual x) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (igual x a ∨ estaEn x xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;algunos (igual x) (a # xs) = (estaEn x (a#xs))&amp;quot; by simp auto  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. (x=a)) xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. (x=a)) 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&lt;br /&gt;
next&lt;br /&gt;
  fix aa xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn a (aa#xs) = (a=aa ∨ estaEn a xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (a=aa ∨ algunos (λx. (x=a)) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (aa#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos (λx. x=a) xs = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;algunos (λx. x=a) [] = estaEn a []&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix y xs&lt;br /&gt;
 assume HI: &amp;quot;algunos (λx. x=a) xs = estaEn a xs&amp;quot;&lt;br /&gt;
 have &amp;quot;algunos (λx. x=a) (y#xs) = (y=a ∨ algunos (λx. x=a) xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y=a ∨ estaEn a xs)&amp;quot; using HI by simp&lt;br /&gt;
 finally show &amp;quot;algunos (λx. x=a) (y#xs) = estaEn a (y#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* Equivalente a la de diecabmen1, sin predicados.*)&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. x=a) xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. x=a) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;estaEn a [] = algunos (λx. x = a) []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix aa xs&lt;br /&gt;
  assume HI: &amp;quot;estaEn a xs = algunos (λx. x = a) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn a (aa # xs) = ( a=aa ∨ estaEn a xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a=aa ∨ algunos (λx. x = a) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (aa # xs) = algunos (λx. x = a) (aa # xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Definir la función primitiva recursiva &lt;br /&gt;
     sinDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (sinDuplicados xs) se verifica si la lista xs no contiene&lt;br /&gt;
  duplicados. Por ejemplo,  &lt;br /&gt;
     sinDuplicados [1::nat,4,2]   = True&lt;br /&gt;
     sinDuplicados [1::nat,4,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun sinDuplicados&amp;#039; :: &amp;quot;&amp;#039;a ⇒&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados&amp;#039; a [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados&amp;#039; a (x#xs) = (a≠x ∧ sinDuplicados&amp;#039; a xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sinDuplicados :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (x#xs) = (sinDuplicados&amp;#039; x xs ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sinDuplicados [1::nat,4,2]&amp;quot;&lt;br /&gt;
value &amp;quot;sinDuplicados [1::nat,4,2,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
fun sinDuplicados2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (x#xs) = (¬estaEn x xs ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Definir la función primitiva recursiva &lt;br /&gt;
     borraDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (borraDuplicados xs) es la lista obtenida eliminando los&lt;br /&gt;
  elementos duplicados de la lista xs. Por ejemplo, &lt;br /&gt;
     borraDuplicados [1::nat,2,4,2,3] = [1,4,2,3]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borraDuplicados es equivalente a la predefinida &lt;br /&gt;
  remdups. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun borraDuplicados :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados (x#xs) = (if x ∈ set xs then borraDuplicados xs else x#borraDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borraDuplicados [1::nat,2,4,2,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
fun borraDuplicados2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados2 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados2 (x#xs) = (if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* irealetei: así tambien lo hice, pero no me terminaba de gustar y lo cambié usando el &amp;quot;if&amp;quot;*)&lt;br /&gt;
fun borraDuplicados3 :: &amp;quot;&amp;#039;a list =&amp;gt; &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados3 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados3 (x#xs) = (case estaEn x xs of True =&amp;gt; borraDuplicados3 xs | False =&amp;gt; x#borraDuplicados3 xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16.1. Demostrar o refutar automáticamente&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma length_borraDuplicados:&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16.2. Demostrar o refutar detalladamente&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma length_borraDuplicados2:&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length 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&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;length (a#xs) = Suc 0  + length xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;length (borraDuplicados (a#xs)) = length (if a ∈ set xs then borraDuplicados xs else a#borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
  have &amp;quot;length xs ≤ Suc 0  + length xs&amp;quot; using HI by simp&lt;br /&gt;
  have &amp;quot;length (a#borraDuplicados xs) ≤ Suc 0  + length xs &amp;quot;using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;length (borraDuplicados []) ≤ length []&amp;quot; by simp&lt;br /&gt;
next  &lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
 have &amp;quot;length (borraDuplicados (x#xs)) ≤ 1 +  length (borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... ≤ 1 + length xs&amp;quot; using HI by simp&lt;br /&gt;
 finally show &amp;quot;length (borraDuplicados (x#xs)) ≤ length (x#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.1. Demostrar o refutar automáticamente &lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.2. Demostrar o refutar detalladamente&lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados: &lt;br /&gt;
  &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 []) = estaEn a []&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix x xs&lt;br /&gt;
 assume HI: &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
 have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a (borraDuplicados2 xs) else estaEn a (x#borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a xs else (x=a ∨ estaEn a xs))&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a xs else estaEn a (x#xs))&amp;quot; by simp&lt;br /&gt;
 finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maesccas4 irealetei&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados_porCasos:&lt;br /&gt;
 &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 []) = estaEn a []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x xs&lt;br /&gt;
 assume HI: &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume &amp;quot;estaEn x xs&amp;quot;&lt;br /&gt;
  then have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= estaEn a xs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; by auto&lt;br /&gt;
 next&lt;br /&gt;
  assume &amp;quot;¬estaEn x xs&amp;quot;&lt;br /&gt;
  then have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (x = a ∨ estaEn a (borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; using HI by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
by  (induct xs) (auto simp add: estaEn_borraDuplicados)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
 have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else sinDuplicados (x#borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else (¬estaEn x (borraDuplicados2 xs) ∧ sinDuplicados (borraDuplicados2 xs)))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else (¬estaEn x xs ∧ sinDuplicados (borraDuplicados2 xs)))&amp;quot; by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
 then show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma sinDuplicados_borraDuplicados_porCasos:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume h1: &amp;quot;estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (borraDuplicados2 xs)&amp;quot; using  h1 by simp&lt;br /&gt;
  finally show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI  by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume h2: &amp;quot;¬estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (x#borraDuplicados2 xs)&amp;quot; using h2 by simp&lt;br /&gt;
  also have &amp;quot;...= (¬estaEn x xs ∧ sinDuplicados (borraDuplicados2 xs))&amp;quot; by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (borraDuplicados2 xs)&amp;quot; using  h2 by simp&lt;br /&gt;
  finally show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;sinDuplicados (borraDuplicados [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  fix xs::&amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  assume HI:&amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume &amp;quot;estaEn a xs&amp;quot;&lt;br /&gt;
    then have &amp;quot;sinDuplicados (borraDuplicados (a # xs)) = sinDuplicados (borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = True&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume HI2:&amp;quot;¬estaEn a xs&amp;quot;&lt;br /&gt;
    then have &amp;quot;sinDuplicados (borraDuplicados (a # xs)) = sinDuplicados (a # borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (¬estaEn a (borraDuplicados xs) ∧ sinDuplicados(borraDuplicados xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (¬estaEn a (borraDuplicados xs) ∧ True)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...= (¬estaEn a xs)&amp;quot; by (simp add:estaEn_borraDuplicados)&lt;br /&gt;
    finally show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot; using HI2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar o refutar:&lt;br /&gt;
    borraDuplicados (rev xs) = rev (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraDuplicados (rev xs) = rev (borraDuplicados xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  xs = {a⇣1, a⇣2, a⇣1}&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_5&amp;diff=265</id>
		<title>Relación 5</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_5&amp;diff=265"/>
		<updated>2013-12-10T15:29:47Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R5: Cuantificadores sobre listas *}&lt;br /&gt;
&lt;br /&gt;
theory R5&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[],[3]]&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&amp;quot; -- &amp;quot;TRUE&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[],[3]]&amp;quot; -- &amp;quot;FALSE&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;
-- &amp;quot;irealetei diecabmen1 pabflomar domlloriv juaruipav&amp;quot;&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;
-- &amp;quot;irealetei pabflomar maresccas4 juaruipav domlloriv&amp;quot;&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  a 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) (a#xs) = ((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; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos (λx. P x ∧ Q x) (a#xs) =  (todos P (a # xs) ∧ todos Q (a # xs))&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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;
  show &amp;quot;?P []&amp;quot; by simp&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 (λx. P x ∧ Q x) (a # xs) =  (( 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; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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;
-- &amp;quot;irealetei pabflomar maresccas4 domllorv juaruipav&amp;quot;&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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma todos_append: &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot; (is &amp;quot;?P x y&amp;quot;)&lt;br /&gt;
proof (induct x)&lt;br /&gt;
  show &amp;quot;?P [] y&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a x&lt;br /&gt;
  assume HI: &amp;quot;?P x 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;?P (a#x) y&amp;quot; by auto&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;
--&amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
apply (induct xs)&lt;br /&gt;
apply (simp_all add:todos_append)&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: todos_append)&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;
--&amp;quot;irealetei maresccas4&amp;quot;&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 xs a&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;... = ( P a ∧ todos P (rev xs))&amp;quot; by (simp add:todos_append) auto&lt;br /&gt;
 also have &amp;quot;... = ( P a ∧ todos P xs)&amp;quot; using HI by simp&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;
(* pabflomar: Irene, la primera línea es prescindible &lt;br /&gt;
   irealetei: Ya pero lo veo más claro así ^_^O *)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&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)) = (P a ∧ todos P (rev xs))&amp;quot; by (simp add:todos_append) auto&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P xs)&amp;quot; using HI by simp&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;
-- &amp;quot;diecabmen1&amp;quot;&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&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (todos P (rev xs) ∧ todos P [a])&amp;quot; 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;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&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; 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[a]∧todos P xs)&amp;quot; by auto&lt;br /&gt;
   also have &amp;quot;...= todos P ([a]@xs)&amp;quot; by (simp add:todos_append)&lt;br /&gt;
   also have &amp;quot;...= todos P (a#xs)&amp;quot; by simp&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;
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;
--&amp;quot;irealetei&amp;quot;&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; 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 = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot; algunos (λx. P x ∧ Q x) (a # xs) =((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; using HI by simp&lt;br /&gt;
--&amp;quot;Me da que esto es falso&amp;quot;&lt;br /&gt;
qed*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(* irealetei: Me ha gustado la solución de maresccas4 diecabmen1 y me uno *)&lt;br /&gt;
(* juaruipav: Antes de empezar la demostración, quickcheck te avisa del contraejemplo*)&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei pabflomar juaruipav&amp;quot;&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;
(* Contraejemplo:&lt;br /&gt;
  P = {a⇣1}&lt;br /&gt;
  Q = {a⇣2}&lt;br /&gt;
  xs = {a⇣1, a⇣2}&lt;br /&gt;
*)&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;
-- &amp;quot;irealetei maresccas4 pabflomar juaruipav&amp;quot;&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 datalladamente&lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1 maresccas4 juaruipav&amp;quot;&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)) =  algunos P (f a # (map f xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P (f a) ∨ algunos P (map f xs))&amp;quot; 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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* pabflomar: A mi al menos me resulta más cómoda mi versión, con menos &amp;quot;pasos intermedios&amp;quot; *)&lt;br /&gt;
&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; 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;
  finally show &amp;quot;algunos P (map f (a # xs)) = algunos (P ∘ f) (a # xs) &amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&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;
-- &amp;quot;irealetei diecabmen1 maresccas4 pabflomar juaruipav&amp;quot;&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;
-- &amp;quot;irealetei maresccas4 pabflomar juaruipav&amp;quot;&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) = (algunos P (a # xs) ∨ algunos P ys)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma algunos_append:&lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot; (is &amp;quot;?P xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs ys&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P ((a#xs) @ ys) = algunos P (a # xs @ ys) &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (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;?P (a#xs) ys&amp;quot; by simp&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;
-- &amp;quot;irealetei diecabmen1 pabflomar juaruipav&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:algunos_append)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
apply (induct xs)&lt;br /&gt;
apply (simp_all add:algunos_append)&lt;br /&gt;
by 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;
--&amp;quot;irealetei maresccas4&amp;quot;&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;... = (P a ∨ algunos P (rev xs))&amp;quot; by (simp add:algunos_append) auto&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 (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* ṕabflomar: Yo sigo empeñado en lo mismo, la primera linea sobra, ¿qué mas da el orden en el que verifiques el primer elemento de una lista?*)&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)) = (P a ∨ algunos P (rev xs))&amp;quot; by (simp add:algunos_append) auto&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 (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (algunos P (rev xs) ∨ algunos P [a])&amp;quot; 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;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
(* juaruipav: Versión con más &amp;quot;pasos intermedios&amp;quot; (eso que no le gusta a pabflomar),&lt;br /&gt;
yo lo veo más útil a la hora de interpretar el código. En otro caso utilizariamos la versión automática *)&lt;br /&gt;
&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; 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 auto&lt;br /&gt;
   also have &amp;quot;...= algunos P ([a]@xs)&amp;quot; by (simp add:todos_append)&lt;br /&gt;
   also have &amp;quot;...= algunos P (a#xs)&amp;quot; by simp&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;
&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;
--&amp;quot;irealetei diecabmen1 maresccas4&amp;quot;&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;
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; 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 = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot; algunos (λx. P x ∨ Q x) (a # xs) = ((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; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (P a  ∨ algunos P xs ∨ Q a ∨ algunos Q xs)&amp;quot; by auto&lt;br /&gt;
  finally show &amp;quot; algunos (λx. P x ∨ Q x) (a # xs) = (algunos P (a # xs) ∨ algunos Q (a # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&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;
-- &amp;quot;irealetei diecabmen1 maresccas4 juaruipav pabflomar&amp;quot;&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;
     &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.2. Demostrar o refutar datalladamente&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4&amp;quot;&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;
  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;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ (¬ todos (λx. ¬ P x) xs))&amp;quot; using HI 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 ∧ todos (λx. ¬ P x) xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (a # xs) = (¬ todos (λx. ¬ P x) (a # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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;
  show &amp;quot;?P []&amp;quot; by simp&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (P a ∨ (¬ todos (λx. (¬ P x)) xs))&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav pabflomar&amp;quot;&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;
  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;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (P a ∨ (¬ todos (λx. ¬ P x) 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; by simp&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;
--&amp;quot;irealetei diecabmen1 maresccas4 pabflomar&amp;quot;&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 (a # xs) = (a=x ∨ estaEn x xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;estaEn (2::nat) [3,2,4]&amp;quot; -- &amp;quot;True&amp;quot;&lt;br /&gt;
value &amp;quot;estaEn (1::nat) [3,2,4]&amp;quot; -- &amp;quot;False&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;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun igual :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ bool&amp;quot; where&lt;br /&gt;
&amp;quot;igual x y = (x=y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(algunos (igual x) xs) = (estaEn x xs)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(algunos (igual x) xs) = (estaEn x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; algunos (igual x) [] = estaEn x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;algunos (igual x) xs = estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos (igual x) (a # xs) = (igual x a ∨ algunos (igual x) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (igual x a ∨ estaEn x xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;algunos (igual x) (a # xs) = (estaEn x (a#xs))&amp;quot; by simp auto  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. (x=a)) xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. (x=a)) 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&lt;br /&gt;
next&lt;br /&gt;
  fix aa xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn a (aa#xs) = (a=aa ∨ estaEn a xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (a=aa ∨ algunos (λx. (x=a)) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (aa#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos (λx. x=a) xs = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;algunos (λx. x=a) [] = estaEn a []&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix y xs&lt;br /&gt;
 assume HI: &amp;quot;algunos (λx. x=a) xs = estaEn a xs&amp;quot;&lt;br /&gt;
 have &amp;quot;algunos (λx. x=a) (y#xs) = (y=a ∨ algunos (λx. x=a) xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y=a ∨ estaEn a xs)&amp;quot; using HI by simp&lt;br /&gt;
 finally show &amp;quot;algunos (λx. x=a) (y#xs) = estaEn a (y#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* Equivalente a la de diecabmen1, sin predicados.*)&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. x=a) xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. x=a) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;estaEn a [] = algunos (λx. x = a) []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix aa xs&lt;br /&gt;
  assume HI: &amp;quot;estaEn a xs = algunos (λx. x = a) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn a (aa # xs) = ( a=aa ∨ estaEn a xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (a=aa ∨ algunos (λx. x = a) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (aa # xs) = algunos (λx. x = a) (aa # xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Definir la función primitiva recursiva &lt;br /&gt;
     sinDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (sinDuplicados xs) se verifica si la lista xs no contiene&lt;br /&gt;
  duplicados. Por ejemplo,  &lt;br /&gt;
     sinDuplicados [1::nat,4,2]   = True&lt;br /&gt;
     sinDuplicados [1::nat,4,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun sinDuplicados&amp;#039; :: &amp;quot;&amp;#039;a ⇒&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados&amp;#039; a [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados&amp;#039; a (x#xs) = (a≠x ∧ sinDuplicados&amp;#039; a xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sinDuplicados :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (x#xs) = (sinDuplicados&amp;#039; x xs ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sinDuplicados [1::nat,4,2]&amp;quot;&lt;br /&gt;
value &amp;quot;sinDuplicados [1::nat,4,2,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
fun sinDuplicados2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (x#xs) = (¬estaEn x xs ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Definir la función primitiva recursiva &lt;br /&gt;
     borraDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (borraDuplicados xs) es la lista obtenida eliminando los&lt;br /&gt;
  elementos duplicados de la lista xs. Por ejemplo, &lt;br /&gt;
     borraDuplicados [1::nat,2,4,2,3] = [1,4,2,3]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borraDuplicados es equivalente a la predefinida &lt;br /&gt;
  remdups. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun borraDuplicados :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados (x#xs) = (if x ∈ set xs then borraDuplicados xs else x#borraDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borraDuplicados [1::nat,2,4,2,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
fun borraDuplicados2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados2 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados2 (x#xs) = (if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* irealetei: así tambien lo hice, pero no me terminaba de gustar y lo cambié usando el &amp;quot;if&amp;quot;*)&lt;br /&gt;
fun borraDuplicados3 :: &amp;quot;&amp;#039;a list =&amp;gt; &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados3 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados3 (x#xs) = (case estaEn x xs of True =&amp;gt; borraDuplicados3 xs | False =&amp;gt; x#borraDuplicados3 xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16.1. Demostrar o refutar automáticamente&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma length_borraDuplicados:&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16.2. Demostrar o refutar detalladamente&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma length_borraDuplicados2:&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length 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&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;length (a#xs) = Suc 0  + length xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;length (borraDuplicados (a#xs)) = length (if a ∈ set xs then borraDuplicados xs else a#borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
  have &amp;quot;length xs ≤ Suc 0  + length xs&amp;quot; using HI by simp&lt;br /&gt;
  have &amp;quot;length (a#borraDuplicados xs) ≤ Suc 0  + length xs &amp;quot;using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;length (borraDuplicados []) ≤ length []&amp;quot; by simp&lt;br /&gt;
next  &lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
 have &amp;quot;length (borraDuplicados (x#xs)) ≤ 1 +  length (borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... ≤ 1 + length xs&amp;quot; using HI by simp&lt;br /&gt;
 finally show &amp;quot;length (borraDuplicados (x#xs)) ≤ length (x#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.1. Demostrar o refutar automáticamente &lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.2. Demostrar o refutar detalladamente&lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados: &lt;br /&gt;
  &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 []) = estaEn a []&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix x xs&lt;br /&gt;
 assume HI: &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
 have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a (borraDuplicados2 xs) else estaEn a (x#borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a xs else (x=a ∨ estaEn a xs))&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a xs else estaEn a (x#xs))&amp;quot; by simp&lt;br /&gt;
 finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maesccas4 irealetei&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados_porCasos:&lt;br /&gt;
 &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 []) = estaEn a []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x xs&lt;br /&gt;
 assume HI: &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume &amp;quot;estaEn x xs&amp;quot;&lt;br /&gt;
  then have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= estaEn a xs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; by auto&lt;br /&gt;
 next&lt;br /&gt;
  assume &amp;quot;¬estaEn x xs&amp;quot;&lt;br /&gt;
  then have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (x = a ∨ estaEn a (borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; using HI by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
by  (induct xs) (auto simp add: estaEn_borraDuplicados)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
 have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else sinDuplicados (x#borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else (¬estaEn x (borraDuplicados2 xs) ∧ sinDuplicados (borraDuplicados2 xs)))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else (¬estaEn x xs ∧ sinDuplicados (borraDuplicados2 xs)))&amp;quot; by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
 then show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma sinDuplicados_borraDuplicados_porCasos:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume h1: &amp;quot;estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (borraDuplicados2 xs)&amp;quot; using  h1 by simp&lt;br /&gt;
  finally show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI  by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume h2: &amp;quot;¬estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (x#borraDuplicados2 xs)&amp;quot; using h2 by simp&lt;br /&gt;
  also have &amp;quot;...= (¬estaEn x xs ∧ sinDuplicados (borraDuplicados2 xs))&amp;quot; by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (borraDuplicados2 xs)&amp;quot; using  h2 by simp&lt;br /&gt;
  finally show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;sinDuplicados (borraDuplicados [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  fix xs::&amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  assume HI:&amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume &amp;quot;estaEn a xs&amp;quot;&lt;br /&gt;
    then have &amp;quot;sinDuplicados (borraDuplicados (a # xs)) = sinDuplicados (borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = True&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume HI2:&amp;quot;¬estaEn a xs&amp;quot;&lt;br /&gt;
    then have &amp;quot;sinDuplicados (borraDuplicados (a # xs)) = sinDuplicados (a # borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (¬estaEn a (borraDuplicados xs) ∧ sinDuplicados(borraDuplicados xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (¬estaEn a (borraDuplicados xs) ∧ True)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...= (¬estaEn a xs)&amp;quot; by (simp add:estaEn_borraDuplicados)&lt;br /&gt;
    finally show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot; using HI2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar o refutar:&lt;br /&gt;
    borraDuplicados (rev xs) = rev (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraDuplicados (rev xs) = rev (borraDuplicados xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  xs = {a⇣1, a⇣2, a⇣1}&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_5&amp;diff=261</id>
		<title>Relación 5</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_5&amp;diff=261"/>
		<updated>2013-12-09T21:23:02Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R5: Cuantificadores sobre listas *}&lt;br /&gt;
&lt;br /&gt;
theory R5&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[],[3]]&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&amp;quot; -- &amp;quot;TRUE&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[],[3]]&amp;quot; -- &amp;quot;FALSE&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;
-- &amp;quot;irealetei diecabmen1 pabflomar domlloriv juaruipav&amp;quot;&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;
-- &amp;quot;irealetei pabflomar maresccas4 juaruipav domlloriv&amp;quot;&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  a 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) (a#xs) = ((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; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos (λx. P x ∧ Q x) (a#xs) =  (todos P (a # xs) ∧ todos Q (a # xs))&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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;
  show &amp;quot;?P []&amp;quot; by simp&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 (λx. P x ∧ Q x) (a # xs) =  (( 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; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv juaruipav&amp;quot;&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;
-- &amp;quot;irealetei pabflomar maresccas4 domllorv juaruipav&amp;quot;&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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma todos_append: &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot; (is &amp;quot;?P x y&amp;quot;)&lt;br /&gt;
proof (induct x)&lt;br /&gt;
  show &amp;quot;?P [] y&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a x&lt;br /&gt;
  assume HI: &amp;quot;?P x 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;?P (a#x) y&amp;quot; by auto&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;
--&amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
apply (induct xs)&lt;br /&gt;
apply (simp_all add:todos_append)&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 irealetei juaruipav&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: todos_append)&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;
--&amp;quot;irealetei maresccas4&amp;quot;&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 xs a&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;... = ( P a ∧ todos P (rev xs))&amp;quot; by (simp add:todos_append) auto&lt;br /&gt;
 also have &amp;quot;... = ( P a ∧ todos P xs)&amp;quot; using HI by simp&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;
(* pabflomar: Irene, la primera línea es prescindible &lt;br /&gt;
   irealetei: Ya pero lo veo más claro así ^_^O *)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&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)) = (P a ∧ todos P (rev xs))&amp;quot; by (simp add:todos_append) auto&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P xs)&amp;quot; using HI by simp&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;
-- &amp;quot;diecabmen1&amp;quot;&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&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (todos P (rev xs) ∧ todos P [a])&amp;quot; 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;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&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; 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[a]∧todos P xs)&amp;quot; by auto&lt;br /&gt;
   also have &amp;quot;...= todos P ([a]@xs)&amp;quot; by (simp add:todos_append)&lt;br /&gt;
   also have &amp;quot;...= todos P (a#xs)&amp;quot; by simp&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;
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;
--&amp;quot;irealetei&amp;quot;&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; 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 = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot; algunos (λx. P x ∧ Q x) (a # xs) =((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; using HI by simp&lt;br /&gt;
--&amp;quot;Me da que esto es falso&amp;quot;&lt;br /&gt;
qed*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(* irealetei: Me ha gustado la solución de maresccas4 diecabmen1 y me uno *)&lt;br /&gt;
(* juaruipav: Antes de empezar la demostración, quickcheck te avisa del contraejemplo*)&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei pabflomar juaruipav&amp;quot;&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;
(* Contraejemplo:&lt;br /&gt;
  P = {a⇣1}&lt;br /&gt;
  Q = {a⇣2}&lt;br /&gt;
  xs = {a⇣1, a⇣2}&lt;br /&gt;
*)&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;
-- &amp;quot;irealetei maresccas4 pabflomar juaruipav&amp;quot;&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 datalladamente&lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1 maresccas4 juaruipav&amp;quot;&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)) =  algunos P (f a # (map f xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P (f a) ∨ algunos P (map f xs))&amp;quot; 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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* pabflomar: A mi al menos me resulta más cómoda mi versión, con menos &amp;quot;pasos intermedios&amp;quot; *)&lt;br /&gt;
&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; 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;
  finally show &amp;quot;algunos P (map f (a # xs)) = algunos (P ∘ f) (a # xs) &amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&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;
-- &amp;quot;irealetei diecabmen1 maresccas4 pabflomar juaruipav&amp;quot;&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;
-- &amp;quot;irealetei maresccas4 pabflomar juaruipav&amp;quot;&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) = (algunos P (a # xs) ∨ algunos P ys)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma algunos_append:&lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot; (is &amp;quot;?P xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs ys&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P ((a#xs) @ ys) = algunos P (a # xs @ ys) &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (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;?P (a#xs) ys&amp;quot; by simp&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;
-- &amp;quot;irealetei diecabmen1 pabflomar juaruipav&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:algunos_append)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
apply (induct xs)&lt;br /&gt;
apply (simp_all add:algunos_append)&lt;br /&gt;
by 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;
--&amp;quot;irealetei maresccas4&amp;quot;&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;... = (P a ∨ algunos P (rev xs))&amp;quot; by (simp add:algunos_append) auto&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 (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
(* ṕabflomar: Yo sigo empeñado en lo mismo, la primera linea sobra, ¿qué mas da el orden en el que verifiques el primer elemento de una lista?*)&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)) = (P a ∨ algunos P (rev xs))&amp;quot; by (simp add:algunos_append) auto&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 (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (algunos P (rev xs) ∨ algunos P [a])&amp;quot; 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;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&lt;br /&gt;
(* juaruipav: Versión con más &amp;quot;pasos intermedios&amp;quot; (eso que no le gusta a pabflomar),&lt;br /&gt;
yo lo veo más útil a la hora de interpretar el código. En otro caso utilizariamos la versión automática *)&lt;br /&gt;
&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; 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 auto&lt;br /&gt;
   also have &amp;quot;...= algunos P ([a]@xs)&amp;quot; by (simp add:todos_append)&lt;br /&gt;
   also have &amp;quot;...= algunos P (a#xs)&amp;quot; by simp&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;
&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;
--&amp;quot;irealetei diecabmen1 maresccas4&amp;quot;&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;
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; 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 = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot; algunos (λx. P x ∨ Q x) (a # xs) = ((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; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (P a  ∨ algunos P xs ∨ Q a ∨ algunos Q xs)&amp;quot; by auto&lt;br /&gt;
  finally show &amp;quot; algunos (λx. P x ∨ Q x) (a # xs) = (algunos P (a # xs) ∨ algunos Q (a # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&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;
-- &amp;quot;irealetei diecabmen1 maresccas4 juaruipav&amp;quot;&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;
     &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.2. Demostrar o refutar datalladamente&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4&amp;quot;&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;
  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;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ (¬ todos (λx. ¬ P x) xs))&amp;quot; using HI 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 ∧ todos (λx. ¬ P x) xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (a # xs) = (¬ todos (λx. ¬ P x) (a # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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;
  show &amp;quot;?P []&amp;quot; by simp&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (P a ∨ (¬ todos (λx. (¬ P x)) xs))&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&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;
  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;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (P a ∨ (¬ todos (λx. ¬ P x) 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; by simp&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;
--&amp;quot;irealetei diecabmen1 maresccas4&amp;quot;&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 (a # xs) = (a=x ∨ estaEn x xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;estaEn (2::nat) [3,2,4]&amp;quot; -- &amp;quot;True&amp;quot;&lt;br /&gt;
value &amp;quot;estaEn (1::nat) [3,2,4]&amp;quot; -- &amp;quot;False&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;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun igual :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ bool&amp;quot; where&lt;br /&gt;
&amp;quot;igual x y = (x=y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(algunos (igual x) xs) = (estaEn x xs)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(algunos (igual x) xs) = (estaEn x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; algunos (igual x) [] = estaEn x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;algunos (igual x) xs = estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos (igual x) (a # xs) = (igual x a ∨ algunos (igual x) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (igual x a ∨ estaEn x xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;algunos (igual x) (a # xs) = (estaEn x (a#xs))&amp;quot; by simp auto  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. (x=a)) xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. (x=a)) 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&lt;br /&gt;
next&lt;br /&gt;
  fix aa xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn a (aa#xs) = (a=aa ∨ estaEn a xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (a=aa ∨ algunos (λx. (x=a)) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (aa#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos (λx. x=a) xs = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;algunos (λx. x=a) [] = estaEn a []&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix y xs&lt;br /&gt;
 assume HI: &amp;quot;algunos (λx. x=a) xs = estaEn a xs&amp;quot;&lt;br /&gt;
 have &amp;quot;algunos (λx. x=a) (y#xs) = (y=a ∨ algunos (λx. x=a) xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y=a ∨ estaEn a xs)&amp;quot; using HI by simp&lt;br /&gt;
 finally show &amp;quot;algunos (λx. x=a) (y#xs) = estaEn a (y#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Definir la función primitiva recursiva &lt;br /&gt;
     sinDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (sinDuplicados xs) se verifica si la lista xs no contiene&lt;br /&gt;
  duplicados. Por ejemplo,  &lt;br /&gt;
     sinDuplicados [1::nat,4,2]   = True&lt;br /&gt;
     sinDuplicados [1::nat,4,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun sinDuplicados&amp;#039; :: &amp;quot;&amp;#039;a ⇒&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados&amp;#039; a [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados&amp;#039; a (x#xs) = (a≠x ∧ sinDuplicados&amp;#039; a xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sinDuplicados :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (x#xs) = (sinDuplicados&amp;#039; x xs ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sinDuplicados [1::nat,4,2]&amp;quot;&lt;br /&gt;
value &amp;quot;sinDuplicados [1::nat,4,2,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
fun sinDuplicados2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (x#xs) = (¬estaEn x xs ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Definir la función primitiva recursiva &lt;br /&gt;
     borraDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (borraDuplicados xs) es la lista obtenida eliminando los&lt;br /&gt;
  elementos duplicados de la lista xs. Por ejemplo, &lt;br /&gt;
     borraDuplicados [1::nat,2,4,2,3] = [1,4,2,3]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borraDuplicados es equivalente a la predefinida &lt;br /&gt;
  remdups. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun borraDuplicados :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados (x#xs) = (if x ∈ set xs then borraDuplicados xs else x#borraDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borraDuplicados [1::nat,2,4,2,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
fun borraDuplicados2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados2 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados2 (x#xs) = (if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* irealetei: así tambien lo hice, pero no me terminaba de gustar y lo cambié usando el &amp;quot;if&amp;quot;*)&lt;br /&gt;
fun borraDuplicados3 :: &amp;quot;&amp;#039;a list =&amp;gt; &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados3 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados3 (x#xs) = (case estaEn x xs of True =&amp;gt; borraDuplicados3 xs | False =&amp;gt; x#borraDuplicados3 xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16.1. Demostrar o refutar automáticamente&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma length_borraDuplicados:&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16.2. Demostrar o refutar detalladamente&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma length_borraDuplicados2:&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length 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&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;length (a#xs) = Suc 0  + length xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;length (borraDuplicados (a#xs)) = length (if a ∈ set xs then borraDuplicados xs else a#borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
  have &amp;quot;length xs ≤ Suc 0  + length xs&amp;quot; using HI by simp&lt;br /&gt;
  have &amp;quot;length (a#borraDuplicados xs) ≤ Suc 0  + length xs &amp;quot;using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;length (borraDuplicados []) ≤ length []&amp;quot; by simp&lt;br /&gt;
next  &lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
 have &amp;quot;length (borraDuplicados (x#xs)) ≤ 1 +  length (borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... ≤ 1 + length xs&amp;quot; using HI by simp&lt;br /&gt;
 finally show &amp;quot;length (borraDuplicados (x#xs)) ≤ length (x#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.1. Demostrar o refutar automáticamente &lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.2. Demostrar o refutar detalladamente&lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados: &lt;br /&gt;
  &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 []) = estaEn a []&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix x xs&lt;br /&gt;
 assume HI: &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
 have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a (borraDuplicados2 xs) else estaEn a (x#borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a xs else (x=a ∨ estaEn a xs))&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a xs else estaEn a (x#xs))&amp;quot; by simp&lt;br /&gt;
 finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maesccas4 irealetei&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados_porCasos:&lt;br /&gt;
 &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 []) = estaEn a []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x xs&lt;br /&gt;
 assume HI: &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume &amp;quot;estaEn x xs&amp;quot;&lt;br /&gt;
  then have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= estaEn a xs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; by auto&lt;br /&gt;
 next&lt;br /&gt;
  assume &amp;quot;¬estaEn x xs&amp;quot;&lt;br /&gt;
  then have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (x = a ∨ estaEn a (borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; using HI by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
by  (induct xs) (auto simp add: estaEn_borraDuplicados)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
 have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else sinDuplicados (x#borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else (¬estaEn x (borraDuplicados2 xs) ∧ sinDuplicados (borraDuplicados2 xs)))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else (¬estaEn x xs ∧ sinDuplicados (borraDuplicados2 xs)))&amp;quot; by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
 then show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma sinDuplicados_borraDuplicados_porCasos:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume h1: &amp;quot;estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (borraDuplicados2 xs)&amp;quot; using  h1 by simp&lt;br /&gt;
  finally show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI  by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume h2: &amp;quot;¬estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (x#borraDuplicados2 xs)&amp;quot; using h2 by simp&lt;br /&gt;
  also have &amp;quot;...= (¬estaEn x xs ∧ sinDuplicados (borraDuplicados2 xs))&amp;quot; by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (borraDuplicados2 xs)&amp;quot; using  h2 by simp&lt;br /&gt;
  finally show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;sinDuplicados (borraDuplicados [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a::&amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
  fix xs::&amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  assume HI:&amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
  show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot;&lt;br /&gt;
  proof (cases)&lt;br /&gt;
    assume &amp;quot;estaEn a xs&amp;quot;&lt;br /&gt;
    then have &amp;quot;sinDuplicados (borraDuplicados (a # xs)) = sinDuplicados (borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = True&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume HI2:&amp;quot;¬estaEn a xs&amp;quot;&lt;br /&gt;
    then have &amp;quot;sinDuplicados (borraDuplicados (a # xs)) = sinDuplicados (a # borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (¬estaEn a (borraDuplicados xs) ∧ sinDuplicados(borraDuplicados xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = (¬estaEn a (borraDuplicados xs) ∧ True)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;...= (¬estaEn a xs)&amp;quot; by (simp add:estaEn_borraDuplicados)&lt;br /&gt;
    finally show &amp;quot;sinDuplicados (borraDuplicados (a # xs))&amp;quot; using HI2 by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar o refutar:&lt;br /&gt;
    borraDuplicados (rev xs) = rev (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraDuplicados (rev xs) = rev (borraDuplicados xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  xs = {a⇣1, a⇣2, a⇣1}&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_5&amp;diff=254</id>
		<title>Relación 5</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_5&amp;diff=254"/>
		<updated>2013-12-09T12:22:54Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R5: Cuantificadores sobre listas *}&lt;br /&gt;
&lt;br /&gt;
theory R5&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv&amp;quot;&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]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[],[3]]&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4 domlloriv&amp;quot;&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;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&amp;quot; -- &amp;quot;TRUE&amp;quot;&lt;br /&gt;
value &amp;quot;algunos (λx. 1&amp;lt;length x) [[],[3]]&amp;quot; -- &amp;quot;FALSE&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;
-- &amp;quot;irealetei diecabmen1 pabflomar domlloriv&amp;quot;&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;
-- &amp;quot;irealetei pabflomar maresccas4&amp;quot;&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  a 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) (a#xs) = ((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; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos (λx. P x ∧ Q x) (a#xs) =  (todos P (a # xs) ∧ todos Q (a # xs))&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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;
  show &amp;quot;?P []&amp;quot; by simp&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 (λx. P x ∧ Q x) (a # xs) =  (( 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; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&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;
-- &amp;quot;irealetei diecabmen1 pabflomar maresccas4&amp;quot;&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;
-- &amp;quot;irealetei pabflomar maresccas4&amp;quot;&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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma todos_append: &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot; (is &amp;quot;?P x y&amp;quot;)&lt;br /&gt;
proof (induct x)&lt;br /&gt;
  show &amp;quot;?P [] y&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a x&lt;br /&gt;
  assume HI: &amp;quot;?P x 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;?P (a#x) y&amp;quot; by auto&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;
--&amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
apply (induct xs)&lt;br /&gt;
apply (simp_all add:todos_append)&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: todos_append)&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;
--&amp;quot;irealetei maresccas4&amp;quot;&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 xs a&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;... = ( P a ∧ todos P (rev xs))&amp;quot; by (simp add:todos_append) auto&lt;br /&gt;
 also have &amp;quot;... = ( P a ∧ todos P xs)&amp;quot; using HI by simp&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;
(* pabflomar: Irene, la primera línea es prescindible &lt;br /&gt;
   irealetei: Ya pero lo veo más claro así ^_^O *)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&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)) = (P a ∧ todos P (rev xs))&amp;quot; by (simp add:todos_append) auto&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P xs)&amp;quot; using HI by simp&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;
-- &amp;quot;diecabmen1&amp;quot;&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&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (todos P (rev xs) ∧ todos P [a])&amp;quot; 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;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&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;
--&amp;quot;irealetei&amp;quot;&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; 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 = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot; algunos (λx. P x ∧ Q x) (a # xs) =((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; using HI by simp&lt;br /&gt;
--&amp;quot;Me da que esto es falso&amp;quot;&lt;br /&gt;
qed*)&lt;br /&gt;
(* irealetei: Me ha gustado la solución de maresccas4 diecabmen1 y me uno *)&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei&amp;quot;&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;
(* Contraejemplo:&lt;br /&gt;
  P = {a⇣1}&lt;br /&gt;
  Q = {a⇣2}&lt;br /&gt;
  xs = {a⇣1, a⇣2}&lt;br /&gt;
*)&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;
-- &amp;quot;irealetei maresccas4&amp;quot;&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 datalladamente&lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1 maresccas4&amp;quot;&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)) =  algunos P (f a # (map f xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P (f a) ∨ algunos P (map f xs))&amp;quot; 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; by simp&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;
-- &amp;quot;irealetei diecabmen1 maresccas4&amp;quot;&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;
-- &amp;quot;irealetei maresccas4&amp;quot;&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) = (algunos P (a # xs) ∨ algunos P ys)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma algunos_append:&lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot; (is &amp;quot;?P xs ys&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P [] ys&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs ys&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P ((a#xs) @ ys) = algunos P (a # xs @ ys) &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (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;?P (a#xs) ys&amp;quot; by simp&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;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add:algunos_append)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
apply (induct xs)&lt;br /&gt;
apply (simp_all add:algunos_append)&lt;br /&gt;
by 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;
--&amp;quot;irealetei maresccas4&amp;quot;&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;... = (P a ∨ algunos P (rev xs))&amp;quot; by (simp add:algunos_append) auto&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 (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (algunos P (rev xs) ∨ algunos P [a])&amp;quot; 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;
  finally show &amp;quot;?P (a#xs)&amp;quot; by auto&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;
--&amp;quot;irealetei diecabmen1 maresccas4&amp;quot;&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;
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; 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 = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot; algunos (λx. P x ∨ Q x) (a # xs) = ((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; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (P a  ∨ algunos P xs ∨ Q a ∨ algunos Q xs)&amp;quot; by auto&lt;br /&gt;
  finally show &amp;quot; algunos (λx. P x ∨ Q x) (a # xs) = (algunos P (a # xs) ∨ algunos Q (a # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&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;
-- &amp;quot;irealetei diecabmen1 maresccas4&amp;quot;&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;
     &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.2. Demostrar o refutar datalladamente&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei maresccas4&amp;quot;&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;
  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;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ (¬ todos (λx. ¬ P x) xs))&amp;quot; using HI 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 ∧ todos (λx. ¬ P x) xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (a # xs) = (¬ todos (λx. ¬ P x) (a # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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;
  show &amp;quot;?P []&amp;quot; by simp&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; by simp&lt;br /&gt;
  also have &amp;quot;… = (P a ∨ (¬ todos (λx. (¬ P x)) xs))&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by simp&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;
--&amp;quot;irealetei diecabmen1 maresccas4&amp;quot;&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 (a # xs) = (a=x ∨ estaEn x xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;estaEn (2::nat) [3,2,4]&amp;quot; -- &amp;quot;True&amp;quot;&lt;br /&gt;
value &amp;quot;estaEn (1::nat) [3,2,4]&amp;quot; -- &amp;quot;False&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;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun igual :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ bool&amp;quot; where&lt;br /&gt;
&amp;quot;igual x y = (x=y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(algunos (igual x) xs) = (estaEn x xs)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(algunos (igual x) xs) = (estaEn x xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; algunos (igual x) [] = estaEn x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;algunos (igual x) xs = estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos (igual x) (a # xs) = (igual x a ∨ algunos (igual x) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (igual x a ∨ estaEn x xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;algunos (igual x) (a # xs) = (estaEn x (a#xs))&amp;quot; by simp auto  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. (x=a)) xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;estaEn a xs = algunos (λx. (x=a)) 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&lt;br /&gt;
next&lt;br /&gt;
  fix aa xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn a (aa#xs) = (a=aa ∨ estaEn a xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (a=aa ∨ algunos (λx. (x=a)) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (aa#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &amp;quot;algunos (λx. x=a) xs = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;algunos (λx. x=a) [] = estaEn a []&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix y xs&lt;br /&gt;
 assume HI: &amp;quot;algunos (λx. x=a) xs = estaEn a xs&amp;quot;&lt;br /&gt;
 have &amp;quot;algunos (λx. x=a) (y#xs) = (y=a ∨ algunos (λx. x=a) xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (y=a ∨ estaEn a xs)&amp;quot; using HI by simp&lt;br /&gt;
 finally show &amp;quot;algunos (λx. x=a) (y#xs) = estaEn a (y#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Definir la función primitiva recursiva &lt;br /&gt;
     sinDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (sinDuplicados xs) se verifica si la lista xs no contiene&lt;br /&gt;
  duplicados. Por ejemplo,  &lt;br /&gt;
     sinDuplicados [1::nat,4,2]   = True&lt;br /&gt;
     sinDuplicados [1::nat,4,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun sinDuplicados&amp;#039; :: &amp;quot;&amp;#039;a ⇒&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados&amp;#039; a [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados&amp;#039; a (x#xs) = (a≠x ∧ sinDuplicados&amp;#039; a xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun sinDuplicados :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (x#xs) = (sinDuplicados&amp;#039; x xs ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sinDuplicados [1::nat,4,2]&amp;quot;&lt;br /&gt;
value &amp;quot;sinDuplicados [1::nat,4,2,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
fun sinDuplicados2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sinDuplicados [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;sinDuplicados (x#xs) = (¬estaEn x xs ∧ sinDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Definir la función primitiva recursiva &lt;br /&gt;
     borraDuplicados :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (borraDuplicados xs) es la lista obtenida eliminando los&lt;br /&gt;
  elementos duplicados de la lista xs. Por ejemplo, &lt;br /&gt;
     borraDuplicados [1::nat,2,4,2,3] = [1,4,2,3]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borraDuplicados es equivalente a la predefinida &lt;br /&gt;
  remdups. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun borraDuplicados :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados (x#xs) = (if x ∈ set xs then borraDuplicados xs else x#borraDuplicados xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot; borraDuplicados [1::nat,2,4,2,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
fun borraDuplicados2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados2 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados2 (x#xs) = (if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun borraDuplicados3 :: &amp;quot;&amp;#039;a list =&amp;gt; &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraDuplicados3 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;borraDuplicados3 (x#xs) = (case estaEn x xs of True =&amp;gt; borraDuplicados3 xs | False =&amp;gt; x#borraDuplicados3 xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16.1. Demostrar o refutar automáticamente&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma length_borraDuplicados:&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16.2. Demostrar o refutar detalladamente&lt;br /&gt;
     length (borraDuplicados xs) ≤ length xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma length_borraDuplicados2:&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length 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&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;length (a#xs) = Suc 0  + length xs&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;length (borraDuplicados (a#xs)) = length (if a ∈ set xs then borraDuplicados xs else a#borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
  have &amp;quot;length xs ≤ Suc 0  + length xs&amp;quot; using HI by simp&lt;br /&gt;
  have &amp;quot;length (a#borraDuplicados xs) ≤ Suc 0  + length xs &amp;quot;using HI by simp&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;length (borraDuplicados []) ≤ length []&amp;quot; by simp&lt;br /&gt;
next  &lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;length (borraDuplicados xs) ≤ length xs&amp;quot;&lt;br /&gt;
 have &amp;quot;length (borraDuplicados (x#xs)) ≤ 1 +  length (borraDuplicados xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... ≤ 1 + length xs&amp;quot; using HI by simp&lt;br /&gt;
 finally show &amp;quot;length (borraDuplicados (x#xs)) ≤ length (x#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.1. Demostrar o refutar automáticamente &lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.2. Demostrar o refutar detalladamente&lt;br /&gt;
     estaEn a (borraDuplicados xs) = estaEn a xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma estaEn_borraDuplicados: &lt;br /&gt;
  &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 []) = estaEn a []&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
 fix x xs&lt;br /&gt;
 assume HI: &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
 have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a (borraDuplicados2 xs) else estaEn a (x#borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a xs else (x=a ∨ estaEn a xs))&amp;quot; using HI by simp&lt;br /&gt;
 also have &amp;quot;... = (if estaEn x xs then estaEn a xs else estaEn a (x#xs))&amp;quot; by simp&lt;br /&gt;
 finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma estaEn_borraDuplicados_porCasos:&lt;br /&gt;
 &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 []) = estaEn a []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x xs&lt;br /&gt;
 assume HI: &amp;quot;estaEn a (borraDuplicados2 xs) = estaEn a xs&amp;quot;&lt;br /&gt;
 show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume &amp;quot;estaEn x xs&amp;quot;&lt;br /&gt;
  then have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= estaEn a xs&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; by auto&lt;br /&gt;
 next&lt;br /&gt;
  assume &amp;quot;¬estaEn x xs&amp;quot;&lt;br /&gt;
  then have &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#borraDuplicados2 xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= (x = a ∨ estaEn a (borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;estaEn a (borraDuplicados2 (x#xs)) = estaEn a (x#xs)&amp;quot; using HI by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.1. Demostrar o refutar automáticamente &lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &amp;quot;sinDuplicados (borraDuplicados xs)&amp;quot;&lt;br /&gt;
by  (induct xs) (auto simp add: estaEn_borraDuplicados)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18.2. Demostrar o refutar detalladamente&lt;br /&gt;
     sinDuplicados (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma sinDuplicados_borraDuplicados:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
 have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else sinDuplicados (x#borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else (¬estaEn x (borraDuplicados2 xs) ∧ sinDuplicados (borraDuplicados2 xs)))&amp;quot; by simp&lt;br /&gt;
 also have &amp;quot;...= (if estaEn x xs then sinDuplicados (borraDuplicados2 xs) else (¬estaEn x xs ∧ sinDuplicados (borraDuplicados2 xs)))&amp;quot; by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
 then show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma sinDuplicados_borraDuplicados_porCasos:&lt;br /&gt;
  &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
 fix x :: &amp;quot;&amp;#039;a&amp;quot;&lt;br /&gt;
 fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
 assume HI: &amp;quot;sinDuplicados (borraDuplicados2 xs)&amp;quot;&lt;br /&gt;
 show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot;&lt;br /&gt;
 proof (cases)&lt;br /&gt;
  assume h1: &amp;quot;estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (borraDuplicados2 xs)&amp;quot; using  h1 by simp&lt;br /&gt;
  finally show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI  by simp&lt;br /&gt;
 next&lt;br /&gt;
  assume h2: &amp;quot;¬estaEn x xs&amp;quot;&lt;br /&gt;
  have &amp;quot;sinDuplicados (borraDuplicados2 (x#xs)) = sinDuplicados ((if estaEn x xs then borraDuplicados2 xs else x # borraDuplicados2 xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (x#borraDuplicados2 xs)&amp;quot; using h2 by simp&lt;br /&gt;
  also have &amp;quot;...= (¬estaEn x xs ∧ sinDuplicados (borraDuplicados2 xs))&amp;quot; by (simp add: estaEn_borraDuplicados)&lt;br /&gt;
  also have &amp;quot;...= sinDuplicados (borraDuplicados2 xs)&amp;quot; using  h2 by simp&lt;br /&gt;
  finally show &amp;quot;sinDuplicados (borraDuplicados2 (x#xs))&amp;quot; using HI by simp&lt;br /&gt;
 qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar o refutar:&lt;br /&gt;
    borraDuplicados (rev xs) = rev (borraDuplicados xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
lemma &amp;quot;borraDuplicados (rev xs) = rev (borraDuplicados xs)&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
(* Contraejemplo:&lt;br /&gt;
  xs = {a⇣1, a⇣2, a⇣1}&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_4&amp;diff=204</id>
		<title>Relación 4</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_4&amp;diff=204"/>
		<updated>2013-12-03T16:29:22Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R4: Cons inverso *}&lt;br /&gt;
&lt;br /&gt;
theory R4&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 recursivamente la función &lt;br /&gt;
     snoc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (snoc xs a) es la lista obtenida al añadir el elemento a al&lt;br /&gt;
  final de la lista xs. Por ejemplo, &lt;br /&gt;
     value &amp;quot;snoc [2,5] (3::int)&amp;quot; == [2,5,3]&lt;br /&gt;
&lt;br /&gt;
  Nota: No usar @.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
-- &amp;quot;pabflomar irealetei maresccas4 domlloriv&amp;quot;&lt;br /&gt;
fun snoc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;snoc [] a = [a]&amp;quot;&lt;br /&gt;
| &amp;quot;snoc (x#xs) a = x # (snoc xs a)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;snoc [2,5] (3::int)&amp;quot; -- &amp;quot;[2,5,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar automáticamente el siguiente teorema &lt;br /&gt;
     snoc xs a = xs @ [a]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
-- &amp;quot;pabflomar irealetei maresccas4 domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;snoc xs a = xs @ [a]&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar detalladamente el siguiente teorema &lt;br /&gt;
     snoc xs a = xs @ [a]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
-- &amp;quot;pabflomar irealetei maresccas4 domlloriv&amp;quot;&lt;br /&gt;
lemma snoc_append: &amp;quot;snoc xs a = xs @ [a]&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot; snoc [] a = [] @ [a]&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix aa xs&lt;br /&gt;
  assume HI: &amp;quot;snoc xs a = xs @ [a]&amp;quot;&lt;br /&gt;
  have &amp;quot;snoc (aa # xs) a = aa # snoc xs a&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = aa # xs @ [a]&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;snoc (aa # xs) a = (aa # xs) @ [a]&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar automáticamente el siguiente lema&lt;br /&gt;
     rev (x # xs) = snoc (rev xs) x&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar irealetei maresccas4 domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;rev (x # xs) = snoc (rev xs) x&amp;quot;&lt;br /&gt;
by (simp add: snoc_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar detalladamente el siguiente lema&lt;br /&gt;
     rev (x # xs) = snoc (rev xs) x&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* maresccas4 - ¿Tiene sentido realizar la demostración automática por simplificación y &lt;br /&gt;
posteriormente hacerla detallada haciendo uso de la inducción? *)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;pabflomar&amp;quot;&lt;br /&gt;
lemma &amp;quot;rev (x # xs) = snoc (rev xs) x&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;rev [x] = snoc (rev []) x&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;rev (x # xs) = snoc (rev xs) x&amp;quot;&lt;br /&gt;
  have &amp;quot;rev (x # a # xs) =rev (a # xs) @ rev [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = snoc (rev (a # xs)) x&amp;quot; using HI by (simp add: snoc_append)&lt;br /&gt;
  finally show &amp;quot;rev (x # a # xs) = snoc (rev (a # xs)) x&amp;quot; by simp&lt;br /&gt;
qed  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei domlloriv&amp;quot; (* Marco, como siempre, tiene razón. Abandono el barco, Pablo*)&lt;br /&gt;
lemma &amp;quot;rev (x # xs) = snoc (rev xs) x&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
 have &amp;quot;rev (x#xs) = rev xs @ [x]&amp;quot; by (simp only:rev.simps)&lt;br /&gt;
 also have &amp;quot;... = snoc (rev xs) x&amp;quot; by (simp add:snoc_append)&lt;br /&gt;
 finally show &amp;quot;rev (x#xs) = snoc (rev xs) x&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_3&amp;diff=160</id>
		<title>Relación 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_3&amp;diff=160"/>
		<updated>2013-11-26T09:12:05Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R3: Razonamiento sobre programas en Isabelle/HOL *}&lt;br /&gt;
&lt;br /&gt;
theory R3&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv pabflomar&amp;quot;&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) = (2 * n + 1) + sumaImpares n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaImpares 5&amp;quot; -- &amp;quot;= 25&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar que &lt;br /&gt;
     sumaImpares n = n*n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 pabflomar&amp;quot;&lt;br /&gt;
&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&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) = (2 * n + 1) + sumaImpares n&amp;quot; by (simp only: sumaImpares.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 2 * n + 1 + n * n&amp;quot; using HI 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;
-- &amp;quot;irealetei diecabmen1 domlloriv&amp;quot;&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&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) = (2*n + 1) + sumaImpares n  &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = 2*n + 1 + (n * n)&amp;quot; using HI  by simp&lt;br /&gt;
  also have &amp;quot;...=  (n+1)*(n+1)&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;
-- Sobrarían varios parentesis.&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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) = 2^(Suc n) + sumaPotenciasDeDosMasUno n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaPotenciasDeDosMasUno 3&amp;quot; -- &amp;quot;= 16&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar que &lt;br /&gt;
     sumaPotenciasDeDosMasUno n = 2^(n+1)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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) = 2^(Suc n) + sumaPotenciasDeDosMasUno n&amp;quot; by (simp only: sumaPotenciasDeDosMasUno.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 2^(Suc n) + 2^(n+1)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = 2^(n+1) + 2^(n+1)&amp;quot; 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 * 2^(Suc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^((Suc n)+1)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n + 1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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 (n+1) = 2^(n+1) + sumaPotenciasDeDosMasUno(n)&amp;quot; by simp&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^(n+2)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^(Suc n +1)&amp;quot; by simp  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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) = 2^(Suc n)+sumaPotenciasDeDosMasUno n&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (2^(Suc n)) + (2^(n+1))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;… = 2^(n+1) + 2^(n+1)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = 2 * 2^(Suc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) =   2^(Suc n +1)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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) = 2^(Suc n) + sumaPotenciasDeDosMasUno n&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = 2^(Suc n) +  2^(n+1)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^((Suc n)+1)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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;
value &amp;quot;copia 3 x&amp;quot; -- &amp;quot;= [x,x,x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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;
value &amp;quot;todos (λx. x&amp;gt;(1::nat)) [2,6,4]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. 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;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;todos (λy. y=x) (copia 0 x)&amp;quot; by simp&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) = todos (λy. y=x) (x # copia n x)&amp;quot; by (simp only: copia.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 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;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;todos (λy. y = x) (copia 0 x)&amp;quot; by simp&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)= todos (λy. y = x) (x#copia n x)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = todos (λy. y = x) (copia n x)&amp;quot;  by simp&lt;br /&gt;
  also have &amp;quot;... = True&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos (λy. y = x) (copia (Suc n) x)&amp;quot;  by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;todos (λy. y=x) (copia 0 x)&amp;quot; by simp&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) = ((λy. y=x) x ∧ todos (λy. y=x) (copia n x))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = True&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos (λy. y=x) (copia (Suc n) x)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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;
value &amp;quot;factR 4&amp;quot; -- &amp;quot;= 24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. 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;
  ------------------------------------------------------------------- *}&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 (Suc n)*x&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;
value &amp;quot;factI 4&amp;quot; -- &amp;quot;= 24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
     &lt;br /&gt;
lemma fact: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: x)&lt;br /&gt;
  show &amp;quot;⋀x. 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 (Suc n)*x&amp;quot; by (simp only: factI&amp;#039;.simps(2))&lt;br /&gt;
    also have &amp;quot;... = x * factI&amp;#039; n (Suc n)&amp;quot; by simp&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; by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot; (*Éste ha sido la muerte a pellizcos, aún leyéndome todo el tema.*)&lt;br /&gt;
lemma fact2: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: x)&lt;br /&gt;
  show &amp;quot;⋀x. factI&amp;#039; 0 x = x * factR 0&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n x&lt;br /&gt;
  assume HI: &amp;quot;⋀x. factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
  have &amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (Suc n)*x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x * factI&amp;#039; n (Suc n)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x * (Suc n * factR n)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = x * factR (Suc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;factI&amp;#039; (Suc n) x = x * factR (Suc n)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot; (*Es el mismo que de irealetei solo que me parece que se puede eliminar el último also have y ponerlo directo en el finally.*)&lt;br /&gt;
lemma fact3: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: x)&lt;br /&gt;
  show &amp;quot;⋀x. factI&amp;#039; 0 x = x * factR 0&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n x&lt;br /&gt;
  assume HI: &amp;quot;⋀x. factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
  have &amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (Suc n)*x&amp;quot; by simp&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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;domlloriv&amp;quot;&lt;br /&gt;
lemma fact4: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: x)&lt;br /&gt;
  show &amp;quot;⋀x. factI&amp;#039; 0 x = x * factR 0&amp;quot; by simp (*Para todo x se cumple*)&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;
  have &amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (Suc n)*x&amp;quot; using HI by simp&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;⋀x. factI&amp;#039; (Suc n) x = x * factR (Suc n)&amp;quot; using HI by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que&lt;br /&gt;
     factI n = factR n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
corollary &amp;quot;factI n = factR n&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
  show &amp;quot;factI n = factR n&amp;quot; by (simp add:fact)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
corollary &amp;quot;factI n = factR n&amp;quot;&lt;br /&gt;
by (simp add: fact)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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;
value &amp;quot;amplia [d,a] t&amp;quot; -- &amp;quot;= [d,a,t]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que &lt;br /&gt;
     amplia xs y = xs @ [y]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 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;
  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;
--&amp;quot;irealetei diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
proof (induct xs)&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&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_3&amp;diff=159</id>
		<title>Relación 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_3&amp;diff=159"/>
		<updated>2013-11-26T09:10:30Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R3: Razonamiento sobre programas en Isabelle/HOL *}&lt;br /&gt;
&lt;br /&gt;
theory R3&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv pabflomar&amp;quot;&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) = (2 * n + 1) + sumaImpares n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaImpares 5&amp;quot; -- &amp;quot;= 25&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar que &lt;br /&gt;
     sumaImpares n = n*n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 pabflomar&amp;quot;&lt;br /&gt;
&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&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) = (2 * n + 1) + sumaImpares n&amp;quot; by (simp only: sumaImpares.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 2 * n + 1 + n * n&amp;quot; using HI 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;
-- &amp;quot;irealetei diecabmen1 domlloriv&amp;quot;&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&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) = (2*n + 1) + sumaImpares n  &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = 2*n + 1 + (n * n)&amp;quot; using HI  by simp&lt;br /&gt;
  also have &amp;quot;...=  (n+1)*(n+1)&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;
-- Sobrarían varios parentesis.&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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) = 2^(Suc n) + sumaPotenciasDeDosMasUno n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaPotenciasDeDosMasUno 3&amp;quot; -- &amp;quot;= 16&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar que &lt;br /&gt;
     sumaPotenciasDeDosMasUno n = 2^(n+1)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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) = 2^(Suc n) + sumaPotenciasDeDosMasUno n&amp;quot; by (simp only: sumaPotenciasDeDosMasUno.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 2^(Suc n) + 2^(n+1)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = 2^(n+1) + 2^(n+1)&amp;quot; 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 * 2^(Suc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^((Suc n)+1)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n + 1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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 (n+1) = 2^(n+1) + sumaPotenciasDeDosMasUno(n)&amp;quot; by simp&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^(n+2)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^(Suc n +1)&amp;quot; by simp  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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) = 2^(Suc n)+sumaPotenciasDeDosMasUno n&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (2^(Suc n)) + (2^(n+1))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;… = 2^(n+1) + 2^(n+1)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = 2 * 2^(Suc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) =   2^(Suc n +1)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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) = 2^(Suc n) + sumaPotenciasDeDosMasUno n&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = 2^(Suc n) +  2^(n+1)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^((Suc n)+1)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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;
value &amp;quot;copia 3 x&amp;quot; -- &amp;quot;= [x,x,x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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;
value &amp;quot;todos (λx. x&amp;gt;(1::nat)) [2,6,4]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. 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;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;todos (λy. y=x) (copia 0 x)&amp;quot; by simp&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) = todos (λy. y=x) (x # copia n x)&amp;quot; by (simp only: copia.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 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;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;todos (λy. y = x) (copia 0 x)&amp;quot; by simp&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)= todos (λy. y = x) (x#copia n x)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = todos (λy. y = x) (copia n x)&amp;quot;  by simp&lt;br /&gt;
  also have &amp;quot;... = True&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos (λy. y = x) (copia (Suc n) x)&amp;quot;  by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;todos (λy. y=x) (copia 0 x)&amp;quot; by simp&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) = ((λy. y=x) x ∧ todos (λy. y=x) (copia n x))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = True&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos (λy. y=x) (copia (Suc n) x)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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;
value &amp;quot;factR 4&amp;quot; -- &amp;quot;= 24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. 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;
  ------------------------------------------------------------------- *}&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 (Suc n)*x&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;
value &amp;quot;factI 4&amp;quot; -- &amp;quot;= 24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
     &lt;br /&gt;
lemma fact: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: x)&lt;br /&gt;
  show &amp;quot;⋀x. 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 (Suc n)*x&amp;quot; by (simp only: factI&amp;#039;.simps(2))&lt;br /&gt;
    also have &amp;quot;... = x * factI&amp;#039; n (Suc n)&amp;quot; by simp&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; by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot; (*Éste ha sido la muerte a pellizcos, aún leyéndome todo el tema.*)&lt;br /&gt;
lemma fact2: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: x)&lt;br /&gt;
  show &amp;quot;⋀x. factI&amp;#039; 0 x = x * factR 0&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n x&lt;br /&gt;
  assume HI: &amp;quot;⋀x. factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
  have &amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (Suc n)*x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x * factI&amp;#039; n (Suc n)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x * (Suc n * factR n)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = x * factR (Suc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;factI&amp;#039; (Suc n) x = x * factR (Suc n)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot; (*Es el mismo que de irealetei solo que me parece que se puede eliminar el último also have y ponerlo directo en el finally.*)&lt;br /&gt;
lemma fact3: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: x)&lt;br /&gt;
  show &amp;quot;⋀x. factI&amp;#039; 0 x = x * factR 0&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n x&lt;br /&gt;
  assume HI: &amp;quot;⋀x. factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
  have &amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (Suc n)*x&amp;quot; by simp&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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;domlloriv&amp;quot;&lt;br /&gt;
lemma fact: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: x)&lt;br /&gt;
  show &amp;quot;⋀x. factI&amp;#039; 0 x = x * factR 0&amp;quot; by simp (*Para todo x se cumple*)&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;
  have &amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (Suc n)*x&amp;quot; using HI by simp&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;⋀x. factI&amp;#039; (Suc n) x = x * factR (Suc n)&amp;quot; using HI by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que&lt;br /&gt;
     factI n = factR n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
corollary &amp;quot;factI n = factR n&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
  show &amp;quot;factI n = factR n&amp;quot; by (simp add:fact)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
corollary &amp;quot;factI n = factR n&amp;quot;&lt;br /&gt;
by (simp add: fact)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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;
value &amp;quot;amplia [d,a] t&amp;quot; -- &amp;quot;= [d,a,t]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que &lt;br /&gt;
     amplia xs y = xs @ [y]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 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;
  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;
--&amp;quot;irealetei diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
proof (induct xs)&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&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_3&amp;diff=157</id>
		<title>Relación 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_3&amp;diff=157"/>
		<updated>2013-11-24T16:00:53Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R3: Razonamiento sobre programas en Isabelle/HOL *}&lt;br /&gt;
&lt;br /&gt;
theory R3&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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) = (2 * n + 1) + sumaImpares n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaImpares 5&amp;quot; -- &amp;quot;= 25&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar que &lt;br /&gt;
     sumaImpares n = n*n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&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&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) = (2 * n + 1) + sumaImpares n&amp;quot; by (simp only: sumaImpares.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 2 * n + 1 + n * n&amp;quot; using HI 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;
-- &amp;quot;irealetei diecabmen1 domlloriv&amp;quot;&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&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) = (2*n + 1) + sumaImpares n  &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = 2*n + 1 + (n * n)&amp;quot; using HI  by simp&lt;br /&gt;
  also have &amp;quot;...=  (n+1)*(n+1)&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 3. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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) = 2^(Suc n) + sumaPotenciasDeDosMasUno n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaPotenciasDeDosMasUno 3&amp;quot; -- &amp;quot;= 16&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar que &lt;br /&gt;
     sumaPotenciasDeDosMasUno n = 2^(n+1)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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) = 2^(Suc n) + sumaPotenciasDeDosMasUno n&amp;quot; by (simp only: sumaPotenciasDeDosMasUno.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 2^(Suc n) + 2^(n+1)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = 2^(n+1) + 2^(n+1)&amp;quot; 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 * 2^(Suc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^((Suc n)+1)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n + 1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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 (n+1) = 2^(n+1) + sumaPotenciasDeDosMasUno(n)&amp;quot; by simp&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^(n+2)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^(Suc n +1)&amp;quot; by simp  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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) = 2^(Suc n)+sumaPotenciasDeDosMasUno n&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (2^(Suc n)) + (2^(n+1))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;… = 2^(n+1) + 2^(n+1)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = 2 * 2^(Suc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) =   2^(Suc n +1)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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) = 2^(Suc n) + sumaPotenciasDeDosMasUno n&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = 2^(Suc n) +  2^(n+1)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^((Suc n)+1)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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;
value &amp;quot;copia 3 x&amp;quot; -- &amp;quot;= [x,x,x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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;
value &amp;quot;todos (λx. x&amp;gt;(1::nat)) [2,6,4]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. 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;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;todos (λy. y=x) (copia 0 x)&amp;quot; by simp&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) = todos (λy. y=x) (x # copia n x)&amp;quot; by (simp only: copia.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 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;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;todos (λy. y = x) (copia 0 x)&amp;quot; by simp&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)= todos (λy. y = x) (x#copia n x)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = todos (λy. y = x) (copia n x)&amp;quot;  by simp&lt;br /&gt;
  also have &amp;quot;... = True&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos (λy. y = x) (copia (Suc n) x)&amp;quot;  by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;todos (λy. y=x) (copia 0 x)&amp;quot; by simp&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) = ((λy. y=x) x ∧ todos (λy. y=x) (copia n x))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = True&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos (λy. y=x) (copia (Suc n) x)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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;
value &amp;quot;factR 4&amp;quot; -- &amp;quot;= 24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. 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;
  ------------------------------------------------------------------- *}&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 (Suc n)*x&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;
value &amp;quot;factI 4&amp;quot; -- &amp;quot;= 24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
     &lt;br /&gt;
lemma fact: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: x)&lt;br /&gt;
  show &amp;quot;⋀x. 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 (Suc n)*x&amp;quot; by (simp only: factI&amp;#039;.simps(2))&lt;br /&gt;
    also have &amp;quot;... = x * factI&amp;#039; n (Suc n)&amp;quot; by simp&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; by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot; (*Éste ha sido la muerte a pellizcos, aún leyéndome todo el tema.*)&lt;br /&gt;
lemma fact2: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: x)&lt;br /&gt;
  show &amp;quot;⋀x. factI&amp;#039; 0 x = x * factR 0&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n x&lt;br /&gt;
  assume HI: &amp;quot;⋀x. factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
  have &amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (Suc n)*x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x * factI&amp;#039; n (Suc n)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x * (Suc n * factR n)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = x * factR (Suc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;factI&amp;#039; (Suc n) x = x * factR (Suc n)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot; (*Es el mismo que de irealetei solo que me parece que se puede eliminar el último also have y ponerlo directo en el finally.*)&lt;br /&gt;
lemma fact3: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: x)&lt;br /&gt;
  show &amp;quot;⋀x. factI&amp;#039; 0 x = x * factR 0&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n x&lt;br /&gt;
  assume HI: &amp;quot;⋀x. factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
  have &amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (Suc n)*x&amp;quot; by simp&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; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;domlloriv&amp;quot;&lt;br /&gt;
lemma fact: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: x)&lt;br /&gt;
  show &amp;quot;⋀x. factI&amp;#039; 0 x = x * factR 0&amp;quot; by simp (*Para todo x se cumple*)&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;
  have &amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (Suc n)*x&amp;quot; using HI by simp&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;⋀x. factI&amp;#039; (Suc n) x = x * factR (Suc n)&amp;quot; using HI by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que&lt;br /&gt;
     factI n = factR n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
corollary &amp;quot;factI n = factR n&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
  show &amp;quot;factI n = factR n&amp;quot; by (simp add:fact)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
corollary &amp;quot;factI n = factR n&amp;quot;&lt;br /&gt;
by (simp add: fact)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1&amp;quot;&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;
value &amp;quot;amplia [d,a] t&amp;quot; -- &amp;quot;= [d,a,t]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que &lt;br /&gt;
     amplia xs y = xs @ [y]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 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;
  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;
--&amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
proof (induct xs)&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&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_3&amp;diff=156</id>
		<title>Relación 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_3&amp;diff=156"/>
		<updated>2013-11-24T15:30:20Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R3: Razonamiento sobre programas en Isabelle/HOL *}&lt;br /&gt;
&lt;br /&gt;
theory R3&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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) = (2 * n + 1) + sumaImpares n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaImpares 5&amp;quot; -- &amp;quot;= 25&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar que &lt;br /&gt;
     sumaImpares n = n*n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&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&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) = (2 * n + 1) + sumaImpares n&amp;quot; by (simp only: sumaImpares.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 2 * n + 1 + n * n&amp;quot; using HI 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;
-- &amp;quot;irealetei diecabmen1 domlloriv&amp;quot;&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&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) = (2*n + 1) + sumaImpares n  &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = 2*n + 1 + (n * n)&amp;quot; using HI  by simp&lt;br /&gt;
  also have &amp;quot;...=  (n+1)*(n+1)&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 3. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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) = 2^(Suc n) + sumaPotenciasDeDosMasUno n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaPotenciasDeDosMasUno 3&amp;quot; -- &amp;quot;= 16&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar que &lt;br /&gt;
     sumaPotenciasDeDosMasUno n = 2^(n+1)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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) = 2^(Suc n) + sumaPotenciasDeDosMasUno n&amp;quot; by (simp only: sumaPotenciasDeDosMasUno.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 2^(Suc n) + 2^(n+1)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = 2^(n+1) + 2^(n+1)&amp;quot; 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 * 2^(Suc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^((Suc n)+1)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n + 1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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 (n+1) = 2^(n+1) + sumaPotenciasDeDosMasUno(n)&amp;quot; by simp&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^(n+2)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^(Suc n +1)&amp;quot; by simp  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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) = 2^(Suc n)+sumaPotenciasDeDosMasUno n&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (2^(Suc n)) + (2^(n+1))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;… = 2^(n+1) + 2^(n+1)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = 2 * 2^(Suc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) =   2^(Suc n +1)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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) = 2^(Suc n) + sumaPotenciasDeDosMasUno n&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = 2^(Suc n) +  2^(n+1)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^((Suc n)+1)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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;
value &amp;quot;copia 3 x&amp;quot; -- &amp;quot;= [x,x,x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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;
value &amp;quot;todos (λx. x&amp;gt;(1::nat)) [2,6,4]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. 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;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;todos (λy. y=x) (copia 0 x)&amp;quot; by simp&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) = todos (λy. y=x) (x # copia n x)&amp;quot; by (simp only: copia.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 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;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;todos (λy. y = x) (copia 0 x)&amp;quot; by simp&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)= todos (λy. y = x) (x#copia n x)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = todos (λy. y = x) (copia n x)&amp;quot;  by simp&lt;br /&gt;
  also have &amp;quot;... = True&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos (λy. y = x) (copia (Suc n) x)&amp;quot;  by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;todos (λy. y=x) (copia 0 x)&amp;quot; by simp&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) = ((λy. y=x) x ∧ todos (λy. y=x) (copia n x))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = True&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos (λy. y=x) (copia (Suc n) x)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1&amp;quot;&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;
value &amp;quot;factR 4&amp;quot; -- &amp;quot;= 24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. 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;
  ------------------------------------------------------------------- *}&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 (Suc n)*x&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;
value &amp;quot;factI 4&amp;quot; -- &amp;quot;= 24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
     &lt;br /&gt;
lemma fact: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: x)&lt;br /&gt;
  show &amp;quot;⋀x. 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 (Suc n)*x&amp;quot; by (simp only: factI&amp;#039;.simps(2))&lt;br /&gt;
    also have &amp;quot;... = x * factI&amp;#039; n (Suc n)&amp;quot; by simp&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; by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot; (*Éste ha sido la muerte a pellizcos, aún leyéndome todo el tema.*)&lt;br /&gt;
lemma fact2: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: x)&lt;br /&gt;
  show &amp;quot;⋀x. factI&amp;#039; 0 x = x * factR 0&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n x&lt;br /&gt;
  assume HI: &amp;quot;⋀x. factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
  have &amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (Suc n)*x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x * factI&amp;#039; n (Suc n)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x * (Suc n * factR n)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = x * factR (Suc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;factI&amp;#039; (Suc n) x = x * factR (Suc n)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot; (*Es el mismo que de irealetei solo que me parece que se puede eliminar el último also have y ponerlo directo en el finally.*)&lt;br /&gt;
lemma fact3: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: x)&lt;br /&gt;
  show &amp;quot;⋀x. factI&amp;#039; 0 x = x * factR 0&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n x&lt;br /&gt;
  assume HI: &amp;quot;⋀x. factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
  have &amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (Suc n)*x&amp;quot; by simp&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; by simp&lt;br /&gt;
qed&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que&lt;br /&gt;
     factI n = factR n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
corollary &amp;quot;factI n = factR n&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
  show &amp;quot;factI n = factR n&amp;quot; by (simp add:fact)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
corollary &amp;quot;factI n = factR n&amp;quot;&lt;br /&gt;
by (simp add: fact)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1&amp;quot;&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;
value &amp;quot;amplia [d,a] t&amp;quot; -- &amp;quot;= [d,a,t]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que &lt;br /&gt;
     amplia xs y = xs @ [y]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 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;
  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;
--&amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
proof (induct xs)&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&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_3&amp;diff=155</id>
		<title>Relación 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_3&amp;diff=155"/>
		<updated>2013-11-24T15:05:50Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R3: Razonamiento sobre programas en Isabelle/HOL *}&lt;br /&gt;
&lt;br /&gt;
theory R3&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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) = (2 * n + 1) + sumaImpares n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaImpares 5&amp;quot; -- &amp;quot;= 25&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar que &lt;br /&gt;
     sumaImpares n = n*n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&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&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) = (2 * n + 1) + sumaImpares n&amp;quot; by (simp only: sumaImpares.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 2 * n + 1 + n * n&amp;quot; using HI 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;
-- &amp;quot;irealetei diecabmen1 domlloriv&amp;quot;&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&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) = (2*n + 1) + sumaImpares n  &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = 2*n + 1 + (n * n)&amp;quot; using HI  by simp&lt;br /&gt;
  also have &amp;quot;...=  (n+1)*(n+1)&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 3. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 domlloriv&amp;quot;&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) = 2^(Suc n) + sumaPotenciasDeDosMasUno n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaPotenciasDeDosMasUno 3&amp;quot; -- &amp;quot;= 16&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar que &lt;br /&gt;
     sumaPotenciasDeDosMasUno n = 2^(n+1)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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) = 2^(Suc n) + sumaPotenciasDeDosMasUno n&amp;quot; by (simp only: sumaPotenciasDeDosMasUno.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 2^(Suc n) + 2^(n+1)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = 2^(n+1) + 2^(n+1)&amp;quot; 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 * 2^(Suc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^((Suc n)+1)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;irealetei&amp;quot;&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n + 1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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 (n+1) = 2^(n+1) + sumaPotenciasDeDosMasUno(n)&amp;quot; by simp&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^(n+2)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^(Suc n +1)&amp;quot; by simp  &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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) = 2^(Suc n)+sumaPotenciasDeDosMasUno n&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (2^(Suc n)) + (2^(n+1))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;… = 2^(n+1) + 2^(n+1)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = 2 * 2^(Suc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) =   2^(Suc n +1)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;domlloriv&amp;quot;&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  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) = 2^(Suc n) + sumaPotenciasDeDosMasUno n&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = 2^(Suc n) +  2^(n+1)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^((Suc n)+1)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1&amp;quot;&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;
value &amp;quot;copia 3 x&amp;quot; -- &amp;quot;= [x,x,x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1&amp;quot;&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;
value &amp;quot;todos (λx. x&amp;gt;(1::nat)) [2,6,4]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. 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;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;todos (λy. y=x) (copia 0 x)&amp;quot; by simp&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) = todos (λy. y=x) (x # copia n x)&amp;quot; by (simp only: copia.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 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;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;todos (λy. y = x) (copia 0 x)&amp;quot; by simp&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)= todos (λy. y = x) (x#copia n x)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = todos (λy. y = x) (copia n x)&amp;quot;  by simp&lt;br /&gt;
  also have &amp;quot;... = True&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos (λy. y = x) (copia (Suc n) x)&amp;quot;  by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1&amp;quot;&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;
value &amp;quot;factR 4&amp;quot; -- &amp;quot;= 24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. 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;
  ------------------------------------------------------------------- *}&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 (Suc n)*x&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;
value &amp;quot;factI 4&amp;quot; -- &amp;quot;= 24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
     &lt;br /&gt;
lemma fact: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: x)&lt;br /&gt;
  show &amp;quot;⋀x. 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 (Suc n)*x&amp;quot; by (simp only: factI&amp;#039;.simps(2))&lt;br /&gt;
    also have &amp;quot;... = x * factI&amp;#039; n (Suc n)&amp;quot; by simp&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; by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot; (*Éste ha sido la muerte a pellizcos, aún leyéndome todo el tema.*)&lt;br /&gt;
lemma fact2: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: x)&lt;br /&gt;
  show &amp;quot;⋀x. factI&amp;#039; 0 x = x * factR 0&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n x&lt;br /&gt;
  assume HI: &amp;quot;⋀x. factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
  have &amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (Suc n)*x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x * factI&amp;#039; n (Suc n)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x * (Suc n * factR n)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = x * factR (Suc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;factI&amp;#039; (Suc n) x = x * factR (Suc n)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot; (*Es el mismo que de irealetei solo que me parece que se puede eliminar el último also have y ponerlo directo en el finally.*)&lt;br /&gt;
lemma fact3: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: x)&lt;br /&gt;
  show &amp;quot;⋀x. factI&amp;#039; 0 x = x * factR 0&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n x&lt;br /&gt;
  assume HI: &amp;quot;⋀x. factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
  have &amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (Suc n)*x&amp;quot; by simp&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; by simp&lt;br /&gt;
qed&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que&lt;br /&gt;
     factI n = factR n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
corollary &amp;quot;factI n = factR n&amp;quot;&lt;br /&gt;
proof - &lt;br /&gt;
  show &amp;quot;factI n = factR n&amp;quot; by (simp add:fact)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
corollary &amp;quot;factI n = factR n&amp;quot;&lt;br /&gt;
by (simp add: fact)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1&amp;quot;&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;
value &amp;quot;amplia [d,a] t&amp;quot; -- &amp;quot;= [d,a,t]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que &lt;br /&gt;
     amplia xs y = xs @ [y]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
 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;
  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;
--&amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
proof (induct xs)&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&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>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_2&amp;diff=122</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_2&amp;diff=122"/>
		<updated>2013-11-19T18:01:34Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R2: Razonamiento sobre programas en Isabelle/HOL *}&lt;br /&gt;
&lt;br /&gt;
theory R2&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 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;
-- &amp;quot;maresccas4&amp;quot;&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) = (2 * (Suc n) - 1) + sumaImpares n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaImpares 5&amp;quot; -- &amp;quot;= 25&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
thm nat.induct&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 5&amp;quot; -- &amp;quot;= 25&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar que &lt;br /&gt;
     sumaImpares n = n*n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4,juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 irealetei&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sumaImpares2 n = n*n&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. 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;
-- &amp;quot;maresccas4 diecabmen1 irealetei domlloriv&amp;quot;&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) = 2^(Suc n) + sumaPotenciasDeDosMasUno n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaPotenciasDeDosMasUno 3&amp;quot; -- &amp;quot;= 16&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juaruipav&amp;quot;&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) = 2*sumaPotenciasDeDosMasUno2 n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaPotenciasDeDosMasUno2 3&amp;quot; -- &amp;quot;= 16&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar que &lt;br /&gt;
     sumaPotenciasDeDosMasUno n = 2^(n+1)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 irealetei juaruipav domlloriv&amp;quot;&lt;br /&gt;
&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 5. 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;
-- &amp;quot;maresccas4 irealetei domlloriv juaruipav&amp;quot;&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;
value &amp;quot;copia 3 x&amp;quot; -- &amp;quot;= [x,x,x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
&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&amp;quot; -- &amp;quot;= [x,x,x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 juaruipav &amp;quot;&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;
value &amp;quot;todos (λx. x&amp;gt;(1::nat)) [2,6,4]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;domlloriv&amp;quot;&lt;br /&gt;
fun todos2 :: &amp;quot;(&amp;#039;a \&amp;lt;Rightarrow&amp;gt; bool) \&amp;lt;Rightarrow&amp;gt; &amp;#039;a list \&amp;lt;Rightarrow&amp;gt; bool&amp;quot; where&lt;br /&gt;
  &amp;quot;todos2 p [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;todos2 p (x#xs) = ((p x) \&amp;lt;and&amp;gt; todos2 p xs)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;todos2 (λx. x&amp;gt;(1::nat)) [2,6,4]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;todos2 (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; -- &amp;quot;= False&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. 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;
-- &amp;quot;maresccas4,juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia2 n x)&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. 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;
-- &amp;quot;maresccas4 irealetei diecabmen1 juaruipav domlloriv&amp;quot;&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;
value &amp;quot;factR 4&amp;quot; -- &amp;quot;= 24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. 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;
  ------------------------------------------------------------------- *}&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 (Suc n)*x&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;
value &amp;quot;factI 4&amp;quot; -- &amp;quot;= 24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 irealetei diecabmen1 juaruipav domlloriv&amp;quot;     &lt;br /&gt;
&lt;br /&gt;
lemma fact: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
by (induct n arbitrary: x) auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que&lt;br /&gt;
     factI n = factR n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 diecabmen1 juaruipav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
corollary &amp;quot;factI n = factR n&amp;quot;&lt;br /&gt;
by (simp add: fact)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. 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;
-- &amp;quot;maresccas4,juaruipav domlloriv&amp;quot;&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;
value &amp;quot;amplia [d,a] t&amp;quot; -- &amp;quot;= [d,a,t]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun amplia2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;amplia2 [] y = y#[]&amp;quot;&lt;br /&gt;
  |&amp;quot;amplia2 (x#xs) y = x#(amplia2 xs y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;amplia2 [d,a] t&amp;quot; -- &amp;quot;= [d,a,t]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que &lt;br /&gt;
     amplia xs y = xs @ [y]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4, juaruipav domlloriv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1&amp;quot; (* Es igual que la de maresccas4, pero lo pego para que compile*)&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;amplia2 xs y = xs @ [y]&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_1&amp;diff=71</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2013/index.php?title=Relaci%C3%B3n_1&amp;diff=71"/>
		<updated>2013-11-10T19:19:57Z</updated>

		<summary type="html">&lt;p&gt;Domlloriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R1: Programación funcional en Isabelle *}&lt;br /&gt;
&lt;br /&gt;
theory R1&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* ----------------------------------------------------------------&lt;br /&gt;
  Ejercicio 0. Definir, por recursión, la función&lt;br /&gt;
     factorial :: nat ⇒ nat&lt;br /&gt;
  tal que (factorial n) es el factorial de n. Por ejemplo,&lt;br /&gt;
     factorial 4 = 24&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;antmacrui maresccas4 diecabmen1&amp;quot;&lt;br /&gt;
fun factorial :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;factorial 0 = 1&amp;quot;&lt;br /&gt;
| &amp;quot;factorial (Suc n) = Suc n * factorial n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;factorial 4&amp;quot; -- &amp;quot;24&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei domlloriv&amp;quot;&lt;br /&gt;
fun factorial2 :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;factorial2 (0::nat)= (1::nat)&amp;quot;&lt;br /&gt;
| &amp;quot;factorial2 n =   n  * factorial2 (n - 1)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;factorial2 4&amp;quot; -- &amp;quot;24&amp;quot;&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 [4,2,5] = 3&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&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) = Suc (longitud xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud [4,2,5]&amp;quot; -- &amp;quot;= 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei pabflomar&amp;quot;&lt;br /&gt;
fun longitud2 :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud2 [] = (0::nat)&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 [4,2,5]&amp;quot; -- &amp;quot;= 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun longitud3 :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud3 [] = 0&amp;quot;&lt;br /&gt;
| &amp;quot;longitud3 (head#tail) = 1 + longitud3 tail&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud3 [4,2,5]&amp;quot; -- &amp;quot;= 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;
-- &amp;quot;maresccas4 pabflomar&amp;quot;&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 p = (snd p, fst p)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia (u,v)&amp;quot; -- &amp;quot;= (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei diecabmen1 domlloriv&amp;quot;&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 (x,y) = (y,x)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia2 (u,v)&amp;quot; -- &amp;quot;= (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;
-- &amp;quot;maresccas4 diecabmen1 domlloriv&amp;quot;&lt;br /&gt;
fun inversa :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa []     = []&amp;quot;&lt;br /&gt;
| &amp;quot;inversa (x#xs) = inversa xs @ (x#[])&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa [a,d,c]&amp;quot; -- &amp;quot;= [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei pabflomar&amp;quot;&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 xs = inversa2 (tl xs) @ (hd xs#[])&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa2 [a,d,c]&amp;quot; -- &amp;quot;= [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;
-- &amp;quot;maresccas4&amp;quot;&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&amp;quot; -- &amp;quot;= [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&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::nat) 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&amp;quot; -- &amp;quot;= [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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 x = []&amp;quot;&lt;br /&gt;
| &amp;quot;repite3 (Suc n) x = (x#[]) @ (repite3 n x)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite3 3 a&amp;quot; -- &amp;quot;= [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;domlloriv&amp;quot;&lt;br /&gt;
fun repite4 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite4 0 x = []&amp;quot;&lt;br /&gt;
| &amp;quot;repite4 n x = x# repite4 (n - 1) x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite4 3 a&amp;quot; -- &amp;quot;= [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;
-- &amp;quot;maresccas4&amp;quot;&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]&amp;quot; -- &amp;quot;= [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- irealetei&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 xs [] = xs&amp;quot;&lt;br /&gt;
| &amp;quot;conc2 xs ys = hd ys # conc2 xs (tl ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc2 [a,d] [b,d,a,c]&amp;quot; -- &amp;quot;= [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1 domlloriv&amp;quot;&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 xs ys = xs@ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc3 [a,d] [b,d,a,c]&amp;quot; -- &amp;quot;= [a,d,b,d,a,c]&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;
-- &amp;quot;maresccas4 diecabmen1 domlloriv&amp;quot;&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;
-- &amp;quot;irealetei&amp;quot;&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 xs = hd(xs) # (coge2 (n - 1) (tl xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge 2 [a,c,d,b,e]&amp;quot; -- &amp;quot;= [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;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&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           = 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]&amp;quot; -- &amp;quot;= [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&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 xs = elimina2 (n - 1) (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina2 2 [a,c,d,b,e]&amp;quot; -- &amp;quot;= [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;elimina3 n (x#xs) = elimina3 (n - 1) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina3 2 [a,c,d,b,e]&amp;quot; -- &amp;quot;= [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 []  = True&lt;br /&gt;
     esVacia [1] = False&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;maresccas4&amp;quot;&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 (x#xs) = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia []&amp;quot;  -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;esVacia [1]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei domlloriv&amp;quot;&lt;br /&gt;
fun esVacia2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia2 [] = True&amp;quot;&lt;br /&gt;
| &amp;quot;esVacia2 xs = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia2 []&amp;quot;  -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;esVacia2 [1]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun esVacia3 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia3 xs = (if xs = [] then True else False)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia3 []&amp;quot;  -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;esVacia3 [1]&amp;quot; -- &amp;quot;= 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;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&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;inversaAc2 [a,c,b,e]&amp;quot; -- &amp;quot;= [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&lt;br /&gt;
fun inversaAc2Aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc2Aux xs [] = xs&amp;quot;&lt;br /&gt;
| &amp;quot;inversaAc2Aux xs ys = inversaAc2Aux ((hd ys) # xs) (tl ys)&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 = inversaAc2Aux [] xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc2 [a,c,b,e]&amp;quot; -- &amp;quot;= [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&lt;br /&gt;
fun inversaAc3Aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc3Aux xs ys = 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 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;inversaAc3 (x#xs) = inversaAc3Aux (inversaAc3 xs) (x#[])&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc3 [a,c,b,e]&amp;quot; -- &amp;quot;= [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;
-- &amp;quot;maresccas4 diecabmen1 domlloriv&amp;quot;&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]&amp;quot; -- &amp;quot;= 10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&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 xs = hd xs + sum2 (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum2 [3,2,5]&amp;quot; -- &amp;quot;= 10&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;
-- &amp;quot;maresccas4 domlloriv&amp;quot;&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 (λx. 2*x) [3::nat,2,5]&amp;quot; -- &amp;quot;= [6,4,10]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;irealetei&amp;quot;&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 xs = f(hd xs) # map2 f (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map2 (λx. 2*x) [3::nat,2,5]&amp;quot; -- &amp;quot;= [6,4,10]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;diecabmen1&amp;quot;&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 (x#xs) = ((f x)#[]) @ (map3 f xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map3 (λx. 2*x) [3::nat,2,5]&amp;quot; -- &amp;quot;= [6,4,10]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Domlloriv</name></author>
		
	</entry>
</feed>