<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/LMF2020/index.php?action=history&amp;feed=atom&amp;title=Rel_15_%28sol%29</id>
	<title>Rel 15 (sol) - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/LMF2020/index.php?action=history&amp;feed=atom&amp;title=Rel_15_%28sol%29"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2020/index.php?title=Rel_15_(sol)&amp;action=history"/>
	<updated>2026-07-19T14:31:23Z</updated>
	<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2020/index.php?title=Rel_15_(sol)&amp;diff=1271&amp;oldid=prev</id>
		<title>Mjoseh: Protegió «Rel 15 (sol)» ([Editar=Solo administradores] (indefinido) [Trasladar=Solo administradores] (indefinido))</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2020/index.php?title=Rel_15_(sol)&amp;diff=1271&amp;oldid=prev"/>
		<updated>2020-06-29T15:38:38Z</updated>

		<summary type="html">&lt;p&gt;Protegió «&lt;a href=&quot;/~jalonso/LMF2020/index.php/Rel_15_(sol)&quot; title=&quot;Rel 15 (sol)&quot;&gt;Rel 15 (sol)&lt;/a&gt;» ([Editar=Solo administradores] (indefinido) [Trasladar=Solo administradores] (indefinido))&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;es&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Revisión anterior&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revisión del 15:38 29 jun 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;es&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Sin diferencias)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Mjoseh</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2020/index.php?title=Rel_15_(sol)&amp;diff=1270&amp;oldid=prev</id>
		<title>Mjoseh: Página creada con «&lt;source lang = &quot;isabelle&quot;&gt; chapter ‹ R15: Definiciones inductivas: clausuras ›  theory R15_sol imports Main begin  section ‹ La clausura reflexiva transitiva ›  tex…»</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2020/index.php?title=Rel_15_(sol)&amp;diff=1270&amp;oldid=prev"/>
		<updated>2020-06-29T15:38:30Z</updated>

		<summary type="html">&lt;p&gt;Página creada con «&amp;lt;source lang = &amp;quot;isabelle&amp;quot;&amp;gt; chapter ‹ R15: Definiciones inductivas: clausuras ›  theory R15_sol imports Main begin  section ‹ La clausura reflexiva transitiva ›  tex…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;source lang = &amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter ‹ R15: Definiciones inductivas: clausuras ›&lt;br /&gt;
&lt;br /&gt;
theory R15_sol&lt;br /&gt;
imports Main&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section ‹ La clausura reflexiva transitiva ›&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  · Las definiciones inductivas aceptan parámetros; por tanto, permiten&lt;br /&gt;
    expresar funciones que construyen conjuntos.&lt;br /&gt;
&lt;br /&gt;
  · La relaciones binarias son conjuntos de pares; por tanto, se pueden&lt;br /&gt;
   definir inductivamente.&lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  · La clausura reflexiva y transitiva de una relación r es la menor&lt;br /&gt;
   relación reflexiva y transitiva que contiene a r. &lt;br /&gt;
&lt;br /&gt;
  · Se representa por r*.&lt;br /&gt;
&lt;br /&gt;
  · Se puede definir inductivamente, como conjunto:&lt;br /&gt;
    · (x,x) ∈ r*&lt;br /&gt;
    · Si (x,y) ∈ r e (y,z) ∈ r*, entonces (x,z) ∈ r*&lt;br /&gt;
&lt;br /&gt;
  · La definición inductiva, como conjunto, se puede expresar en &lt;br /&gt;
   Isabelle/HOL como sigue: &lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
inductive_set&lt;br /&gt;
  crt :: &amp;quot;(&amp;#039;a × &amp;#039;a) set ⇒ (&amp;#039;a × &amp;#039;a) set&amp;quot;   (&amp;quot;_*&amp;quot; [1000] 999)&lt;br /&gt;
  for r :: &amp;quot;(&amp;#039;a × &amp;#039;a) set&amp;quot;&lt;br /&gt;
where&lt;br /&gt;
  crt_refl [iff]: &amp;quot;(x,x) ∈ r*&amp;quot;&lt;br /&gt;
| crt_paso:       &amp;quot;⟦(x,y) ∈ r; (y,z) ∈ r* ⟧ ⟹ (x,z) ∈ r*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  Notas:&lt;br /&gt;
  · La sintaxis concreta permite escribir r* en lugar de (crt r).&lt;br /&gt;
  · La definición consta de dos reglas.&lt;br /&gt;
  · A la regla reflexiva se le añade el atributo iff para aumentar la&lt;br /&gt;
    automatización. &lt;br /&gt;
  · A la regla del paso no se le añade ningún atributo, porque r* ocurre&lt;br /&gt;
   en la izquierda. &lt;br /&gt;
  · En el resto de esta sección se demuestra que esta definición&lt;br /&gt;
   coincide con la menor relación reflexiva y transitiva que contiene a&lt;br /&gt;
   r.  &lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  Lema. La relación r* es reflexiva.&lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(x,x) ∈ r*&amp;quot;&lt;br /&gt;
  by (rule crt_refl)&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  Lema. La relación r* contiene a r.&lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
― ‹La demostración aplicativa es ›&lt;br /&gt;
lemma &amp;quot;(x,y) ∈ r ⟹ (x,y) ∈ r*&amp;quot;  &lt;br /&gt;
  apply (erule crt_paso)&lt;br /&gt;
    (* (y, y) ∈ r**)&lt;br /&gt;
  apply (rule crt_refl)&lt;br /&gt;
    (* *)&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
― ‹La demostración automática es›&lt;br /&gt;
lemma r_contenida_clausura [intro]: &lt;br /&gt;
  &amp;quot;(x,y) ∈ r ⟹ (x,y) ∈ r*&amp;quot;&lt;br /&gt;
  by (simp add: crt_paso) &lt;br /&gt;
(* by (auto intro: crt_paso) *)&lt;br /&gt;
    &lt;br /&gt;
― ‹La demostración declarativa es› &lt;br /&gt;
lemma &amp;quot;(x,y) ∈ r ⟹ (x,y) ∈ r*&amp;quot;  &lt;br /&gt;
proof -&lt;br /&gt;
  assume 1: &amp;quot;(x, y) ∈ r&amp;quot;&lt;br /&gt;
  have  2: &amp;quot;(y, y) ∈ r*&amp;quot; by simp&lt;br /&gt;
  show &amp;quot;(x,y) ∈ r*&amp;quot; using 1 2 by (rule crt_paso)&lt;br /&gt;
  qed&lt;br /&gt;
  &lt;br /&gt;
text ‹&lt;br /&gt;
  Notas:&lt;br /&gt;
  · La ventaja del lema es que se puede declarar como regla de&lt;br /&gt;
    introducción, porque r* ocurre sólo en la derecha.&lt;br /&gt;
  · Con la declaración, algunas demostraciones que usan crt_paso se&lt;br /&gt;
    hacen de manera automática.&lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  El esquema de inducción de la clausura reflexiva transitiva es&lt;br /&gt;
  · crt.induct:&lt;br /&gt;
    ⟦(x1, x2) ∈ r*; &lt;br /&gt;
     ⋀x. P x x; &lt;br /&gt;
     ⋀x y z. ⟦(x,y) ∈ r; (y,z) ∈ r*; P y z⟧ ⟹ P x z⟧&lt;br /&gt;
    ⟹ P x1 x2&lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  Lema. La relación r* es transitiva.&lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
― ‹ La demostración aplicativa es›&lt;br /&gt;
lemma &amp;quot;⟦(x,y) ∈ r*; (y,z) ∈ r*⟧ ⟹ (x,z) ∈ r*&amp;quot;&lt;br /&gt;
  apply (induction rule:crt.induct)&lt;br /&gt;
    (* 1. ⋀x. (x, z) ∈ r* ⟹ (x, z) ∈ r*&lt;br /&gt;
       2. ⋀x y za. ⟦(x, y) ∈ r; (y, za) ∈ r*;&lt;br /&gt;
                    (za, z) ∈ r* ⟹ (y, z) ∈ r*;&lt;br /&gt;
                    (za, z) ∈ r*⟧&lt;br /&gt;
                   ⟹ (x, z) ∈ r* *)&lt;br /&gt;
  apply simp&lt;br /&gt;
    (* 1. ⋀x y za. ⟦(x, y) ∈ r; (y, za) ∈ r*;&lt;br /&gt;
                    (za, z) ∈ r* ⟹ (y, z) ∈ r*;&lt;br /&gt;
                    (za, z) ∈ r*⟧&lt;br /&gt;
                   ⟹ (x, z) ∈ r**)&lt;br /&gt;
  apply (simp add: crt_paso)&lt;br /&gt;
    (* *)&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;⟦ (x,y) ∈ r*; (y,z) ∈ r* ⟧ ⟹ (x,z) ∈ r*&amp;quot;&lt;br /&gt;
  by (induction rule: crt.induct)&lt;br /&gt;
     (simp_all add: crt_paso)&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  Otra formulación del lema, con la variable y a la derecha.&lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
― ‹La demostración aplicativa es› &lt;br /&gt;
lemma &amp;quot;(x,y) ∈ r* ⟹ (y,z) ∈ r* ⟶ (x,z) ∈ r*&amp;quot;&lt;br /&gt;
  apply (induction rule: crt.induct)&lt;br /&gt;
     (* 1. ⋀x. (x, z) ∈ r* ⟶ (x, z) ∈ r*&lt;br /&gt;
        2. ⋀x y za. ⟦(x, y) ∈ r; &lt;br /&gt;
                     (y, za) ∈ r*;&lt;br /&gt;
                     (za, z) ∈ r* ⟶ (y, z) ∈ r*⟧&lt;br /&gt;
                    ⟹ (za, z) ∈ r* ⟶ (x, z) ∈ r* *)&lt;br /&gt;
   apply simp&lt;br /&gt;
     (* ⋀x y za. ⟦(x, y) ∈ r; &lt;br /&gt;
                  (y, za) ∈ r*;&lt;br /&gt;
                  (za, z) ∈ r* ⟶ (y, z) ∈ r*⟧&lt;br /&gt;
                 ⟹ (za, z) ∈ r* ⟶ (x, z) ∈ r* *)&lt;br /&gt;
  apply (rule impI)&lt;br /&gt;
     (* ⋀x y za. ⟦(x, y) ∈ r; &lt;br /&gt;
                  (y, za) ∈ r*;&lt;br /&gt;
                  (za, z) ∈ r* ⟶ (y, z) ∈ r*;&lt;br /&gt;
                  (za, z) ∈ r*⟧&lt;br /&gt;
                 ⟹ (za, z) ∈ r* ⟶ (x, z) ∈ r* *)&lt;br /&gt;
  apply (drule mp)&lt;br /&gt;
     (* 1. ⋀x y za. ⟦(x, y) ∈ r; (y, za) ∈ r*; (za, z) ∈ r*⟧&lt;br /&gt;
                    ⟹ (za, z) ∈ r*&lt;br /&gt;
        2. ⋀x y za. ⟦(x, y) ∈ r; &lt;br /&gt;
                     (y, za) ∈ r*; &lt;br /&gt;
                     (za, z) ∈ r*;&lt;br /&gt;
                     (y, z) ∈ r*⟧&lt;br /&gt;
                    ⟹ (x, z) ∈ r* *)&lt;br /&gt;
   apply assumption&lt;br /&gt;
     (* ⋀x y za. ⟦(x, y) ∈ r; &lt;br /&gt;
                  (y, za) ∈ r*; &lt;br /&gt;
                  (za, z) ∈ r*;&lt;br /&gt;
                  (y, z) ∈ r*⟧&lt;br /&gt;
                 ⟹ (x, z) ∈ r* *)&lt;br /&gt;
  apply (erule crt_paso)&lt;br /&gt;
     (* ⋀x y za. ⟦(y, za) ∈ r*; (za, z) ∈ r*; (y, z) ∈ r*⟧&lt;br /&gt;
                 ⟹ (y, z) ∈ r**)&lt;br /&gt;
  apply assumption&lt;br /&gt;
     (* *)&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
― ‹La demostración automática es›&lt;br /&gt;
lemma &amp;quot;(x,y) ∈ r* ⟹ (y,z) ∈ r* ⟶ (x,z) ∈ r*&amp;quot;&lt;br /&gt;
  by (induction rule:crt.induct)&lt;br /&gt;
     (auto simp add: crt_paso)&lt;br /&gt;
&lt;br /&gt;
― ‹La demostración declarativa es›&lt;br /&gt;
lemma crt_trans [rule_format]:&lt;br /&gt;
  &amp;quot;(x,y) ∈ r* ⟹ (y,z) ∈ r* ⟶ (x,z) ∈ r*&amp;quot;&lt;br /&gt;
proof (induction rule:crt.induct)&lt;br /&gt;
  show &amp;quot;⋀x. (x,z) ∈ r* ⟶ (x,z) ∈ r*&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x y u&lt;br /&gt;
  assume H1: &amp;quot;(x,y) ∈ r&amp;quot; and&lt;br /&gt;
         H2: &amp;quot;(y,u) ∈ r*&amp;quot; and&lt;br /&gt;
         H3: &amp;quot;(u,z) ∈ r* ⟶ (y,z) ∈ r*&amp;quot;&lt;br /&gt;
  show &amp;quot;(u,z) ∈ r* ⟶ (x,z) ∈ r*&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;(u,z) ∈ r*&amp;quot;&lt;br /&gt;
    with H3 have &amp;quot;(y,z) ∈ r*&amp;quot; ..&lt;br /&gt;
    with H1 show &amp;quot;(x,z) ∈ r*&amp;quot; by (rule crt_paso) &lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  Notas:&lt;br /&gt;
  · La reformulación anterior es un caso particular de la siguiente&lt;br /&gt;
    heurística:&lt;br /&gt;
       &amp;quot;Para probar una fórmula por inducción sobre (x1,...,xn) ∈ R,&lt;br /&gt;
       poner todas las premisas conteniendo cualquiera de lax xi en la&lt;br /&gt;
       conclusión usando ⟶&amp;quot;. &lt;br /&gt;
  · El atributo &amp;quot;rule_format&amp;quot; transforma ⟶ en ⟹.&lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  La relación r* está contenida en cualquier relación reflexiva y &lt;br /&gt;
  transitiva que contenga a r.&lt;br /&gt;
&lt;br /&gt;
  Mediante (crt2 r) se define la menor relación reflexiva y transitiva &lt;br /&gt;
  que contiene a r.&lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
inductive_set&lt;br /&gt;
  crt2 :: &amp;quot;(&amp;#039;a × &amp;#039;a)set ⇒ (&amp;#039;a × &amp;#039;a)set&amp;quot;&lt;br /&gt;
  for r :: &amp;quot;(&amp;#039;a × &amp;#039;a)set&amp;quot;&lt;br /&gt;
where&lt;br /&gt;
  &amp;quot;(x,y) ∈ r ⟹ (x,y) ∈ crt2 r&amp;quot;                      (* contiene a r *) &lt;br /&gt;
| &amp;quot;(x,x) ∈ crt2 r&amp;quot;                                      (* reflexiva *)&lt;br /&gt;
| &amp;quot;⟦(x,y) ∈ crt2 r; (y,z) ∈ crt2 r⟧ ⟹ (x,z) ∈ crt2 r&amp;quot; (* transitiva *)&lt;br /&gt;
&lt;br /&gt;
text ‹ Probaremos que r* coincide con (crt2 r) ›&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  Lema. La relación (crt2 r) está contenida en r*.&lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
― ‹Demostración aplicativa›&lt;br /&gt;
lemma &amp;quot;(x,y) ∈ crt2 r ⟹ (x,y) ∈ r*&amp;quot;&lt;br /&gt;
  apply (induction rule: crt2.induct)&lt;br /&gt;
      (*  1. ⋀x y. (x, y) ∈ r ⟹ (x, y) ∈ r*&lt;br /&gt;
          2. ⋀x. (x, x) ∈ r*&lt;br /&gt;
          3. ⋀x y z. ⟦(x, y) ∈ crt2 r; (x, y) ∈ r*;&lt;br /&gt;
                      (y, z) ∈ crt2 r; (y, z) ∈ r*⟧&lt;br /&gt;
                     ⟹ (x, z) ∈ r* *)&lt;br /&gt;
    apply (erule r_contenida_clausura)&lt;br /&gt;
      (* 1. ⋀x. (x, x) ∈ r*&lt;br /&gt;
         2. ⋀x y z. ⟦(x, y) ∈ crt2 r; (x, y) ∈ r*;&lt;br /&gt;
                     (y, z) ∈ crt2 r; (y, z) ∈ r*⟧&lt;br /&gt;
                    ⟹ (x, z) ∈ r* *)&lt;br /&gt;
   apply simp&lt;br /&gt;
      (* ⋀x y z. ⟦(x, y) ∈ crt2 r; (x, y) ∈ r*;&lt;br /&gt;
                  (y, z) ∈ crt2 r; (y, z) ∈ r*⟧&lt;br /&gt;
                 ⟹ (x, z) ∈ r* *)&lt;br /&gt;
  apply (erule crt_trans)&lt;br /&gt;
      (* ⋀x y z. ⟦(x, y) ∈ crt2 r; (y, z) ∈ crt2 r; (y, z) ∈ r*⟧&lt;br /&gt;
                 ⟹ (y, z) ∈ r* *)&lt;br /&gt;
  apply assumption&lt;br /&gt;
      (* *)&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
― ‹ La demostración automática es ›&lt;br /&gt;
lemma &amp;quot;(x,y) ∈ crt2 r ⟹ (x,y) ∈ r*&amp;quot;&lt;br /&gt;
  by (induction rule: crt2.induct)&lt;br /&gt;
     (auto simp add: r_contenida_clausura &lt;br /&gt;
                     crt_trans)&lt;br /&gt;
&lt;br /&gt;
― ‹ La demostración declarativa es ›&lt;br /&gt;
lemma &amp;quot;(x,y) ∈ crt2 r ⟹ (x,y) ∈ r*&amp;quot;&lt;br /&gt;
proof (induction rule: crt2.induct)&lt;br /&gt;
  fix x y&lt;br /&gt;
  assume &amp;quot;(x,y) ∈ r&amp;quot;&lt;br /&gt;
  then show &amp;quot;(x,y) ∈ r*&amp;quot; by (rule r_contenida_clausura) &lt;br /&gt;
next&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;(x,x) ∈ r*&amp;quot; by (rule crt_refl)&lt;br /&gt;
next&lt;br /&gt;
  fix x y z&lt;br /&gt;
  assume H1: &amp;quot;(x,y) ∈ crt2 r&amp;quot; and&lt;br /&gt;
         H2: &amp;quot;(x,y) ∈ r*&amp;quot;     and&lt;br /&gt;
         H3: &amp;quot;(y,z) ∈ crt2 r&amp;quot; and &lt;br /&gt;
         H4: &amp;quot;(y,z) ∈ r*&amp;quot;&lt;br /&gt;
  show &amp;quot;(x,z) ∈ r*&amp;quot; using H2 H4 by (rule crt_trans)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  Lema. La relación r* está contenida en (crt2 r).&lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
― ‹ La demostración aplicativa es ›&lt;br /&gt;
lemma &amp;quot;(x,y) ∈ r* ⟹ (x,y) ∈ crt2 r&amp;quot;&lt;br /&gt;
  apply (induction rule: crt.induct)&lt;br /&gt;
     (* 1. ⋀x. (x, x) ∈ crt2 r&lt;br /&gt;
        2. ⋀x y z. ⟦(x, y) ∈ r; (y, z) ∈ r*; (y, z) ∈ crt2 r⟧&lt;br /&gt;
                   ⟹ (x, z) ∈ crt2 r *)&lt;br /&gt;
   apply (rule crt2.intros(2))&lt;br /&gt;
     (* ⋀x y z. ⟦(x, y) ∈ r; (y, z) ∈ r*; (y, z) ∈ crt2 r⟧&lt;br /&gt;
                ⟹ (x, z) ∈ crt2 r *)&lt;br /&gt;
  apply (drule crt2.intros(1))&lt;br /&gt;
     (* ⋀x y z. ⟦(y, z) ∈ r*; (y, z) ∈ crt2 r; (x, y) ∈ crt2 r⟧&lt;br /&gt;
                ⟹ (x, z) ∈ crt2 r *)&lt;br /&gt;
  apply (drule_tac x=x and z=z in crt2.intros(3))&lt;br /&gt;
     (* 1. ⋀x y z. ⟦(y, z) ∈ r*; (y, z) ∈ crt2 r⟧&lt;br /&gt;
                   ⟹ (y, z) ∈ crt2 r&lt;br /&gt;
        2. ⋀x y z. ⟦(y, z) ∈ r*; (y, z) ∈ crt2 r; (x, z) ∈ crt2 r⟧&lt;br /&gt;
                   ⟹ (x, z) ∈ crt2 r *)&lt;br /&gt;
   apply assumption+&lt;br /&gt;
     (* *)&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
― ‹ La demostración automática es ›&lt;br /&gt;
lemma &amp;quot;(x,y) ∈ r* ⟹ (x,y) ∈ crt2 r&amp;quot;&lt;br /&gt;
  by (induction rule: crt.induct)&lt;br /&gt;
     (auto intro: crt2.intros)&lt;br /&gt;
&lt;br /&gt;
― ‹ La demostración declarativa es ›&lt;br /&gt;
lemma &amp;quot;(x,y) ∈ r* ⟹ (x,y) ∈ crt2 r&amp;quot;&lt;br /&gt;
proof (induction rule:crt.induct)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;(x,x) ∈ crt2 r&amp;quot; by (rule crt2.intros(2))&lt;br /&gt;
next&lt;br /&gt;
  fix x y z&lt;br /&gt;
  assume H1: &amp;quot;(x,y) ∈ r&amp;quot; and &lt;br /&gt;
         H2: &amp;quot;(y,z) ∈ r*&amp;quot; and &lt;br /&gt;
         H3: &amp;quot;(y,z) ∈ crt2 r&amp;quot;&lt;br /&gt;
  have &amp;quot;(x,y) ∈ crt2 r&amp;quot; using H1 by (rule crt2.intros(1))&lt;br /&gt;
  then show &amp;quot;(x,z) ∈ crt2 r&amp;quot; using H3 by (rule crt2.intros(3))&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text ‹ ---------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar que si (x,y) ∈ r* e (y,z) ∈ r, entonces &lt;br /&gt;
  (x,z) ∈ r*&lt;br /&gt;
  ------------------------------------------------------------------- ›&lt;br /&gt;
&lt;br /&gt;
― ‹ Demostración aplicativa ›&lt;br /&gt;
lemma &amp;quot;(x,y) ∈ r* ⟹ (y,z) ∈ r ⟶ (x,z) ∈ r*&amp;quot;&lt;br /&gt;
  apply (induction rule: crt.induct)&lt;br /&gt;
     (* 1. ⋀x. (x, z) ∈ r ⟶ (x, z) ∈ r*&lt;br /&gt;
        2. ⋀x y za. ⟦(x, y) ∈ r; &lt;br /&gt;
                     (y, za) ∈ r*; &lt;br /&gt;
                     (za, z) ∈ r ⟶ (y, z) ∈ r*⟧&lt;br /&gt;
                    ⟹ (za, z) ∈ r ⟶ (x, z) ∈ r* *)&lt;br /&gt;
   apply (simp add: r_contenida_clausura)&lt;br /&gt;
     (* ⋀x y za. ⟦(x, y) ∈ r; &lt;br /&gt;
                  (y, za) ∈ r*; &lt;br /&gt;
                  (za, z) ∈ r ⟶ (y, z) ∈ r*⟧&lt;br /&gt;
                 ⟹ (za, z) ∈ r ⟶ (x, z) ∈ r* *)&lt;br /&gt;
  apply (simp add: crt_paso)&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
― ‹ Demostración automática ›&lt;br /&gt;
lemma &amp;quot;(x,y) ∈ r* ⟹ (y,z) ∈ r ⟶ (x,z) ∈ r*&amp;quot;&lt;br /&gt;
  by (induction rule: crt.induct)&lt;br /&gt;
     (auto simp add: r_contenida_clausura&lt;br /&gt;
                     crt_paso)&lt;br /&gt;
&lt;br /&gt;
― ‹ Demostración declarativa ›&lt;br /&gt;
lemma crt_paso2 [rule_format]: &lt;br /&gt;
  &amp;quot;(x,y) ∈ r* ⟹ (y,z) ∈ r ⟶ (x,z) ∈ r*&amp;quot;&lt;br /&gt;
proof (induction rule: crt.induct)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;(x,z) ∈ r ⟶ (x,z) ∈ r*&amp;quot; by (simp add: r_contenida_clausura)&lt;br /&gt;
next&lt;br /&gt;
  fix x y u&lt;br /&gt;
  assume H1: &amp;quot;(x,y) ∈ r&amp;quot; and &lt;br /&gt;
         H2: &amp;quot;(y,u) ∈ r*&amp;quot; and &lt;br /&gt;
         H3: &amp;quot;(u,z) ∈ r ⟶ (y,z) ∈ r*&amp;quot;&lt;br /&gt;
  show &amp;quot;(u,z) ∈ r ⟶ (x,z) ∈ r*&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;(u,z) ∈ r&amp;quot;&lt;br /&gt;
    with H3 have &amp;quot;(y,z) ∈ r*&amp;quot; by (rule mp)&lt;br /&gt;
    with H1 show &amp;quot;(x,z) ∈ r*&amp;quot; by (rule crt_paso)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text ‹ ---------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Considerar la siguiente definición de la clausura tran-&lt;br /&gt;
  sitiva de una relación r, y probar que es la menor relación reflexiva &lt;br /&gt;
  y transitiva que contiene a r.&lt;br /&gt;
&lt;br /&gt;
  Nota: Establecer los lemas necesarios.&lt;br /&gt;
  ------------------------------------------------------------------- ›&lt;br /&gt;
&lt;br /&gt;
inductive star&amp;#039; :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;a ⇒ bool) ⇒ &amp;#039;a ⇒ &amp;#039;a ⇒ bool&amp;quot; for r where&lt;br /&gt;
  refl&amp;#039;: &amp;quot;star&amp;#039; r x x&amp;quot; &lt;br /&gt;
| step&amp;#039;: &amp;quot;star&amp;#039; r x y ⟹ r y z ⟹ star&amp;#039; r x z&amp;quot;&lt;br /&gt;
&lt;br /&gt;
― ‹ Demostración de que (star&amp;#039; r) es reflexiva ›&lt;br /&gt;
lemma star&amp;#039;Refl: &amp;quot;star&amp;#039; r x x&amp;quot;&lt;br /&gt;
  by (simp add: refl&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
― ‹ Demostración aplicativa de r contenida en (star&amp;#039; r) ›&lt;br /&gt;
lemma &amp;quot;r x y ⟹ star&amp;#039; r x y&amp;quot;&lt;br /&gt;
  apply (rule_tac y=x in step&amp;#039;)&lt;br /&gt;
     (* 1. r x y ⟹ star&amp;#039; r x x&lt;br /&gt;
        2. r x y ⟹ r x y *)&lt;br /&gt;
   apply (rule refl&amp;#039;)&lt;br /&gt;
     (* r x y ⟹ r x y *)&lt;br /&gt;
  apply assumption&lt;br /&gt;
     (* *)&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
― ‹ Demostración automática de r contenida en (star&amp;#039; r) ›&lt;br /&gt;
lemma &amp;quot;r x y ⟹ star&amp;#039; r x y&amp;quot;&lt;br /&gt;
  by (meson refl&amp;#039; step&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
lemma rsubsetStar&amp;#039;_b: &amp;quot;r x y ⟹ star&amp;#039; r x y&amp;quot;&lt;br /&gt;
by (simp add:step&amp;#039;[OF refl&amp;#039;[of r x]])&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
― ‹ Demostración declarativa de r contenida en (star&amp;#039; r) ›&lt;br /&gt;
lemma rsubsetStar&amp;#039;: &amp;quot;r x y ⟹ star&amp;#039; r x y&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  assume 1:&amp;quot;r x y&amp;quot;&lt;br /&gt;
  have 2: &amp;quot;star&amp;#039; r x x&amp;quot; by (simp add: refl&amp;#039;)&lt;br /&gt;
  show &amp;quot;star&amp;#039; r x y&amp;quot; using 2 1 by (simp add: step&amp;#039;)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text ‹ A continuación se prueba una condición suficiente para star&amp;#039; r ›&lt;br /&gt;
&lt;br /&gt;
― ‹ Demostración aplicativa ›&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;⟦star&amp;#039; r y z; r x y⟧ ⟹ star&amp;#039; r x z&amp;quot;&lt;br /&gt;
  apply (induct rule: star&amp;#039;.induct)&lt;br /&gt;
    (* 1. ⋀xa. r x xa ⟹ star&amp;#039; r x xa&lt;br /&gt;
       2. ⋀xa y z. ⟦star&amp;#039; r xa y; r x xa ⟹ star&amp;#039; r x y; r y z; r x xa⟧&lt;br /&gt;
                   ⟹ star&amp;#039; r x z *)&lt;br /&gt;
  apply (simp add: rsubsetStar&amp;#039;)&lt;br /&gt;
    (* ⋀xa y z. ⟦star&amp;#039; r xa y; r x xa ⟹ star&amp;#039; r x y; r y z; r x xa⟧&lt;br /&gt;
                ⟹ star&amp;#039; r x z *)&lt;br /&gt;
  apply (simp add: step&amp;#039;)&lt;br /&gt;
    (* *)&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
― ‹ Demostración automática ›&lt;br /&gt;
lemma star&amp;#039;_subset_star&amp;#039;_l1:&lt;br /&gt;
  &amp;quot;⟦star&amp;#039; r y z; r x y⟧ ⟹ star&amp;#039; r x z&amp;quot;&lt;br /&gt;
  by (induct rule: star&amp;#039;.induct)&lt;br /&gt;
     (auto simp add: rsubsetStar&amp;#039; step&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
― ‹ Demostraciones de que  (star&amp;#039; r) es transitiva ›&lt;br /&gt;
&lt;br /&gt;
― ‹ Demostración aplicativa ›&lt;br /&gt;
lemma &amp;quot;⟦star&amp;#039; r x y; star&amp;#039; r y z⟧ ⟹ star&amp;#039; r x z&amp;quot;   &lt;br /&gt;
  apply  (induction rule: star&amp;#039;.induct)&lt;br /&gt;
     (* 1. ⋀x. star&amp;#039; r x z ⟹ star&amp;#039; r x z&lt;br /&gt;
        2. ⋀x y za. ⟦star&amp;#039; r x y; star&amp;#039; r y z ⟹ star&amp;#039; r x z; r y za;&lt;br /&gt;
                     star&amp;#039; r za z⟧&lt;br /&gt;
                    ⟹ star&amp;#039; r x z *)&lt;br /&gt;
   apply simp&lt;br /&gt;
     (* ⋀x y za. ⟦star&amp;#039; r x y; star&amp;#039; r y z ⟹ star&amp;#039; r x z; r y za;&lt;br /&gt;
                     star&amp;#039; r za z⟧&lt;br /&gt;
                    ⟹ star&amp;#039; r x z *)&lt;br /&gt;
  apply (simp add: star&amp;#039;_subset_star&amp;#039;_l1)&lt;br /&gt;
     (* *)&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
― ‹ Demostración automática ›&lt;br /&gt;
lemma star&amp;#039;Trans: &lt;br /&gt;
  &amp;quot;⟦star&amp;#039; r x y; star&amp;#039; r y z⟧ ⟹ star&amp;#039; r x z&amp;quot;&lt;br /&gt;
  by (induction rule: star&amp;#039;.induct) &lt;br /&gt;
      (auto simp add: star&amp;#039;_subset_star&amp;#039;_l1)&lt;br /&gt;
   &lt;br /&gt;
text ‹  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Considerar la siguiente definición inductiva. Probar que &lt;br /&gt;
  &amp;quot;star&amp;#039; r x y syss (∃n. iter r n x y)&amp;quot;&lt;br /&gt;
  ------------------------------------------------------------------- ›&lt;br /&gt;
&lt;br /&gt;
inductive iter :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;a ⇒ bool) ⇒ nat ⇒ &amp;#039;a ⇒ &amp;#039;a ⇒ bool&amp;quot;&lt;br /&gt;
for r where&lt;br /&gt;
  iterRefl: &amp;quot;iter r 0 x x&amp;quot;&lt;br /&gt;
| iterStep: &amp;quot;⟦iter r n x y; r y z⟧ ⟹ iter r (n+1) x z&amp;quot;&lt;br /&gt;
&lt;br /&gt;
― ‹ El esquema de inducción correspondiente es ›&lt;br /&gt;
thm iter.induct&lt;br /&gt;
(*&lt;br /&gt;
  ⟦iter ?r ?x1.0 ?x2.0 ?x3.0; &lt;br /&gt;
   ⋀x. ?P 0 x x;&lt;br /&gt;
   ⋀n x y z. ⟦iter ?r n x y; ?P n x y; ?r y z⟧ ⟹ ?P (n + 1) x z⟧&lt;br /&gt;
  ⟹ ?P ?x1.0 ?x2.0 ?x3.0&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
― ‹ Algunos teoremas derivados son ›&lt;br /&gt;
&lt;br /&gt;
thm iterRefl&lt;br /&gt;
(* iter ?r 0 ?x ?x *)&lt;br /&gt;
&lt;br /&gt;
thm iterRefl [of r y]&lt;br /&gt;
(* iter r 0 y y *)&lt;br /&gt;
&lt;br /&gt;
thm iterStep&lt;br /&gt;
(* ⟦iter ?r ?n ?x ?y; ?r ?y ?z⟧ ⟹ iter ?r (?n + 1) ?x ?z *)&lt;br /&gt;
&lt;br /&gt;
thm iterStep [of r x y n z]&lt;br /&gt;
(* ⟦iter r x y n; r n z⟧ ⟹ iter r (x + 1) y z *)&lt;br /&gt;
&lt;br /&gt;
thm iterStep [of r x y 0 y]&lt;br /&gt;
(* ⟦iter r x y 0; r 0 y⟧ ⟹ iter r (x + 1) y y *)&lt;br /&gt;
&lt;br /&gt;
text ‹  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar  &lt;br /&gt;
     star&amp;#039; r x y ⟹ (∃n. iter r n x y)&lt;br /&gt;
  ------------------------------------------------------------------- ›&lt;br /&gt;
&lt;br /&gt;
― ‹ Demostración aplicativa ›&lt;br /&gt;
lemma &amp;quot;star&amp;#039; r x y ⟹ (∃n. iter r n x y)&amp;quot;&lt;br /&gt;
  apply (induct rule: star&amp;#039;.induct)&lt;br /&gt;
     (* 1. ⋀x. ∃n. iter r n x x&lt;br /&gt;
        2. ⋀x y z. ⟦star&amp;#039; r x y; ∃n. iter r n x y; r y z⟧&lt;br /&gt;
                   ⟹ ∃n. iter r n x z *)&lt;br /&gt;
   apply (rule_tac x=0 in exI)&lt;br /&gt;
     (* 1. ⋀x. iter r 0 x x&lt;br /&gt;
        2. ⋀x y z. ⟦star&amp;#039; r x y; ∃n. iter r n x y; r y z⟧&lt;br /&gt;
                   ⟹ ∃n. iter r n x z *)&lt;br /&gt;
   apply (rule iterRefl)&lt;br /&gt;
     (* ⋀x y z. ⟦star&amp;#039; r x y; ∃n. iter r n x y; r y z⟧&lt;br /&gt;
                ⟹ ∃n. iter r n x z *)&lt;br /&gt;
  apply (erule exE)&lt;br /&gt;
     (* ⋀x y z n. ⟦star&amp;#039; r x y; r y z; iter r n x y⟧&lt;br /&gt;
                  ⟹ ∃n. iter r n x z *)&lt;br /&gt;
  apply (rule_tac x=&amp;quot;n+1&amp;quot; in exI)&lt;br /&gt;
     (* ⋀x y z n. ⟦star&amp;#039; r x y; r y z; iter r n x y⟧&lt;br /&gt;
                  ⟹ iter r (n + 1) x z *)&lt;br /&gt;
  apply (erule iterStep)&lt;br /&gt;
     (*  ⋀x y z n. ⟦star&amp;#039; r x y; r y z⟧ ⟹ r y z *)&lt;br /&gt;
  apply assumption&lt;br /&gt;
     (* *)&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
― ‹ Demostración automática ›&lt;br /&gt;
lemma [rule_format]: &amp;quot;star&amp;#039; r x y ⟹ (∃n. iter r n x y)&amp;quot;    &lt;br /&gt;
  by (induct rule: star&amp;#039;.induct)&lt;br /&gt;
     (auto intro: iterRefl iterStep)&lt;br /&gt;
&lt;br /&gt;
― ‹ Demostración declarativa ›&lt;br /&gt;
lemma [rule_format]: &amp;quot;star&amp;#039; r x y ⟹ (∃n. iter r n x y)&amp;quot;    &lt;br /&gt;
proof (induct rule: star&amp;#039;.induct)&lt;br /&gt;
  fix x &lt;br /&gt;
  have &amp;quot;iter r 0 x x&amp;quot; by (rule iterRefl)&lt;br /&gt;
  then show &amp;quot;∃n. iter r n x x&amp;quot; by (rule exI)&lt;br /&gt;
next&lt;br /&gt;
  fix x y z&lt;br /&gt;
  assume 1: &amp;quot;star&amp;#039; r x y&amp;quot; and&lt;br /&gt;
         2: &amp;quot;∃n. iter r n x y&amp;quot; and&lt;br /&gt;
         3: &amp;quot;r y z&amp;quot;&lt;br /&gt;
  from 2 obtain m where  &amp;quot;iter r m x y&amp;quot; by (rule exE)      &lt;br /&gt;
  then have  &amp;quot;iter r (m+1) x z&amp;quot; using 3 by (rule iterStep)&lt;br /&gt;
  then show &amp;quot;∃n. iter r n x z&amp;quot; by (rule exI)&lt;br /&gt;
  qed&lt;br /&gt;
  &lt;br /&gt;
text ‹  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar  &lt;br /&gt;
     (∃n. iter r n x y) ⟹ star&amp;#039; r x y&lt;br /&gt;
  ------------------------------------------------------------------- ›&lt;br /&gt;
&lt;br /&gt;
― ‹ En la demostración se usará el siguiente lema:&lt;br /&gt;
      iter r n x y ⟹ star&amp;#039; r x y ›   &lt;br /&gt;
&lt;br /&gt;
― ‹ Demostración aplicativa del lema ›&lt;br /&gt;
lemma iter_star&amp;#039;_subset: &amp;quot;iter r n x y ⟹ star&amp;#039; r x y&amp;quot;&lt;br /&gt;
  apply (induct rule: iter.induct)&lt;br /&gt;
     (* 1. ⋀x. star&amp;#039; r x x&lt;br /&gt;
        2. ⋀n x y z. ⟦iter r n x y; star&amp;#039; r x y; r y z⟧&lt;br /&gt;
                     ⟹ star&amp;#039; r x z *)&lt;br /&gt;
   apply (rule refl&amp;#039;)&lt;br /&gt;
     (* ⋀n x y z. ⟦iter r n x y; star&amp;#039; r x y; r y z⟧&lt;br /&gt;
                  ⟹ star&amp;#039; r x z *)&lt;br /&gt;
  apply (erule step&amp;#039;)&lt;br /&gt;
     (* ⋀n x y z. ⟦iter r n x y; r y z⟧ ⟹ r y z*)&lt;br /&gt;
  apply assumption&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
― ‹ Demostración automática del lema ›&lt;br /&gt;
lemma &amp;quot;iter r n x y ⟹ star&amp;#039; r x y&amp;quot;&lt;br /&gt;
  by (induct rule: iter.induct)&lt;br /&gt;
     (auto simp add: refl&amp;#039; step&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
― ‹ Demostración aplicativa ›&lt;br /&gt;
lemma &amp;quot;(∃n. iter r n x y) ⟹ star&amp;#039; r x y&amp;quot;&lt;br /&gt;
  apply (erule exE)&lt;br /&gt;
    (* ⋀n. iter r n x y ⟹ star&amp;#039; r x y *)&lt;br /&gt;
  apply (erule iter_star&amp;#039;_subset)&lt;br /&gt;
    (* *)&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
― ‹ Demostración automática ›&lt;br /&gt;
lemma &amp;quot;(∃n. iter r n x y) ⟹ star&amp;#039; r x y&amp;quot;&lt;br /&gt;
  by (auto simp add: iter_star&amp;#039;_subset)&lt;br /&gt;
&lt;br /&gt;
― ‹ Demostración declarativa ›&lt;br /&gt;
lemma assumes &amp;quot;(∃n. iter r n x y)&amp;quot;&lt;br /&gt;
      shows &amp;quot;star&amp;#039; r x y&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have  &amp;quot;∃n. iter r n x y&amp;quot; using assms .&lt;br /&gt;
  then obtain k where &amp;quot;iter r k x y&amp;quot; by (rule exE)&lt;br /&gt;
  then show &amp;quot;star&amp;#039; r x y&amp;quot; by (rule iter_star&amp;#039;_subset)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mjoseh</name></author>
		
	</entry>
</feed>