<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/LMF2019/index.php?action=history&amp;feed=atom&amp;title=Definiciones_inductivas</id>
	<title>Definiciones inductivas - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/LMF2019/index.php?action=history&amp;feed=atom&amp;title=Definiciones_inductivas"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2019/index.php?title=Definiciones_inductivas&amp;action=history"/>
	<updated>2026-07-19T21:30:08Z</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/LMF2019/index.php?title=Definiciones_inductivas&amp;diff=828&amp;oldid=prev</id>
		<title>Jalonso en 18:21 27 may 2020</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2019/index.php?title=Definiciones_inductivas&amp;diff=828&amp;oldid=prev"/>
		<updated>2020-05-27T18:21:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://www.glc.us.es/~jalonso/LMF2019/index.php?title=Definiciones_inductivas&amp;amp;diff=828&amp;amp;oldid=659&quot;&gt;Mostrar los cambios&lt;/a&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2019/index.php?title=Definiciones_inductivas&amp;diff=659&amp;oldid=prev</id>
		<title>Jalonso en 07:49 4 may 2019</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2019/index.php?title=Definiciones_inductivas&amp;diff=659&amp;oldid=prev"/>
		<updated>2019-05-04T07:49:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://www.glc.us.es/~jalonso/LMF2019/index.php?title=Definiciones_inductivas&amp;amp;diff=659&amp;amp;oldid=30&quot;&gt;Mostrar los cambios&lt;/a&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2019/index.php?title=Definiciones_inductivas&amp;diff=30&amp;oldid=prev</id>
		<title>Jalonso en 11:15 7 feb 2019</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2019/index.php?title=Definiciones_inductivas&amp;diff=30&amp;oldid=prev"/>
		<updated>2019-02-07T11:15:00Z</updated>

		<summary type="html">&lt;p&gt;&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 11:15 7 feb 2019&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>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2019/index.php?title=Definiciones_inductivas&amp;diff=19&amp;oldid=prev</id>
		<title>Jalonso en 11:09 7 feb 2019</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2019/index.php?title=Definiciones_inductivas&amp;diff=19&amp;oldid=prev"/>
		<updated>2019-02-07T11:09:18Z</updated>

		<summary type="html">&lt;p&gt;&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 {* Tema 9: Definiciones inductivas *}&lt;br /&gt;
&lt;br /&gt;
theory T9_Definiciones_inductivas&lt;br /&gt;
imports Main&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* El conjunto de los números pares *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  · El conjunto de los números pares se define inductivamente como el&lt;br /&gt;
    menor conjunto que contiene al 0 y es cerrado por la operación (+2).&lt;br /&gt;
&lt;br /&gt;
  · El conjunto de los números pares también puede definirse como los &lt;br /&gt;
    naturales divisible por 2.&lt;br /&gt;
&lt;br /&gt;
  · Veremos cómo se escriben las dos definiciones en Isabelle/HOL y cómo&lt;br /&gt;
    se demuestra su equivalencia.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Definición inductiva del conjunto de los pares *}&lt;br /&gt;
&lt;br /&gt;
inductive_set par :: &amp;quot;nat set&amp;quot; where&lt;br /&gt;
  cero [intro!]: &amp;quot;0 ∈ par&amp;quot; &lt;br /&gt;
| paso [intro!]: &amp;quot;n ∈ par ⟹ (Suc (Suc n)) ∈ par&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  · Una definición inductiva está formada con reglas de introducción.&lt;br /&gt;
&lt;br /&gt;
  · La definición inductiva genera varios teoremas:&lt;br /&gt;
    · par.cero:   0 ∈ par&lt;br /&gt;
    · par.paso:   n ∈ par ⟹ Suc (Suc n) ∈ par&lt;br /&gt;
    · par.simps:  (a ∈ par) = (a = 0 ∨ (∃n. a = Suc (Suc n) ∧ n ∈ par))&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Uso de las reglas de introducción *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lema: Los números de la forma 2*k son pares.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
― ‹La demostración automática es›&lt;br /&gt;
lemma dobles_son_pares [intro!]: &lt;br /&gt;
  &amp;quot;2*k ∈ par&amp;quot;&lt;br /&gt;
by (induct k) auto&lt;br /&gt;
&lt;br /&gt;
― ‹La demostración estructurada es›&lt;br /&gt;
lemma dobles_son_pares_2:&lt;br /&gt;
  &amp;quot;2*k ∈ par&amp;quot;&lt;br /&gt;
proof (induct k)&lt;br /&gt;
  show &amp;quot;2 * 0 ∈ par&amp;quot; by auto&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;⋀k. 2 * k ∈ par ⟹ 2 * Suc k ∈ par&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  · Nota: Nuestro objetivo es demostrar la equivalencia de la definición&lt;br /&gt;
    anterior y la definición mediante divisibilidad (even).&lt;br /&gt;
  &lt;br /&gt;
  · Lema: Si n es divisible por 2, entonces es par.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma even_imp_par: &amp;quot;even n ⟹ n ∈ par&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
subsection {* Regla de inducción *} &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Entre las reglas generadas por la definión de par está la de&lt;br /&gt;
  inducción:&lt;br /&gt;
  · par.induct: ⟦ x ∈ par; &lt;br /&gt;
                 P 0; &lt;br /&gt;
                 ⋀n. ⟦n ∈ par; P n⟧ ⟹ P (Suc (Suc n))⟧ &lt;br /&gt;
                ⟹ P x&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lema: Los números pares son divisibles por 2.&lt;br /&gt;
*} &lt;br /&gt;
&lt;br /&gt;
― ‹1ª demostración (detallada)›&lt;br /&gt;
lemma par_imp_even: &lt;br /&gt;
  &amp;quot;n ∈ par ⟹ even n&amp;quot;&lt;br /&gt;
proof (induction rule: par.induct)&lt;br /&gt;
  show &amp;quot;2 dvd (0::nat)&amp;quot; by (simp_all add: dvd_def)&lt;br /&gt;
next&lt;br /&gt;
  fix n::nat&lt;br /&gt;
  assume H1: &amp;quot;n ∈ par&amp;quot; and&lt;br /&gt;
         H2: &amp;quot;even n&amp;quot;&lt;br /&gt;
  have &amp;quot;∃k. n = 2*k&amp;quot; using H2 by (simp add: dvd_def)&lt;br /&gt;
  then obtain k where &amp;quot;n = 2*k&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;Suc (Suc n) = 2*(k+1)&amp;quot; by auto&lt;br /&gt;
  then have &amp;quot;∃k. Suc (Suc n) = 2*k&amp;quot; ..&lt;br /&gt;
  then show &amp;quot;even (Suc (Suc n))&amp;quot; by (simp add: dvd_def)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
― ‹2ª demostración (con arith)›&lt;br /&gt;
lemma par_imp_even_2: &lt;br /&gt;
  &amp;quot;n ∈ par ⟹ even n&amp;quot;&lt;br /&gt;
proof (induction rule: par.induct)&lt;br /&gt;
  show &amp;quot;even (0::nat)&amp;quot; by (simp_all add: dvd_def)&lt;br /&gt;
next&lt;br /&gt;
  fix n::nat&lt;br /&gt;
  assume H1: &amp;quot;n ∈ par&amp;quot; and&lt;br /&gt;
         H2: &amp;quot;even n&amp;quot;&lt;br /&gt;
  then show &amp;quot;even (Suc (Suc n))&amp;quot; by (auto simp add: dvd_def, arith)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
― ‹3ª demostración (automática)›&lt;br /&gt;
lemma par_imp_even_3: &lt;br /&gt;
  &amp;quot;n ∈ par ⟹ even n&amp;quot;&lt;br /&gt;
by (induction rule:par.induct) (auto simp add: dvd_def, arith)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lema: Un número n es par syss es divisible por 2. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem par_iff_even: &amp;quot;(n ∈ par) = (even n)&amp;quot;&lt;br /&gt;
by (blast intro: even_imp_par par_imp_even)&lt;br /&gt;
&lt;br /&gt;
subsection{* Generalización y regla de inducción *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  · Antes de aplicar inducción se debe de generalizar la fórmula a&lt;br /&gt;
    probar.&lt;br /&gt;
 &lt;br /&gt;
  · Vamos a ilustrar el principio anterior en el caso de los conjuntos&lt;br /&gt;
    inductivamente definidos, con el siguiente ejemplo: si n+2 es par,&lt;br /&gt;
    entonces n también lo es.&lt;br /&gt;
&lt;br /&gt;
  · El siguiente intento falla:&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;Suc (Suc n) ∈ par ⟹ n ∈ par&amp;quot;&lt;br /&gt;
  apply (erule par.induct) &lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  En el intento anterior, los subobjetivos generados son&lt;br /&gt;
     1. n ∈ par&lt;br /&gt;
     2. ⋀na. ⟦na ∈ par; n ∈ par⟧ ⟹ n ∈ par&lt;br /&gt;
  que no se pueden demostrar.&lt;br /&gt;
&lt;br /&gt;
  Se ha perdido la información sobre Suc (Suc n).&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Reformulación del lema: Si n es par, entonces n-2 también lo es.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
― ‹La demostración automática es›&lt;br /&gt;
lemma par_imp_par_menos_2: &lt;br /&gt;
  &amp;quot;n ∈ par ⟹ n - 2 ∈ par&amp;quot;&lt;br /&gt;
by (induction rule:par.induct) auto&lt;br /&gt;
&lt;br /&gt;
― ‹La demostración estructurada es›&lt;br /&gt;
lemma &amp;quot;n ∈  par ⟹ n - 2 ∈ par&amp;quot;&lt;br /&gt;
proof (induction rule:par.induct)&lt;br /&gt;
  show &amp;quot;0 - 2 ∈ par&amp;quot; by auto&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;⋀n. ⟦n ∈ par; n - 2 ∈ par⟧ ⟹ Suc (Suc n) - 2 ∈ par&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Con el lema anterior se puede demostrar el original.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
― ‹La demostración estructurada es›&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;Suc (Suc n) ∈ par&amp;quot; &lt;br /&gt;
  shows   &amp;quot;n ∈ par&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;Suc (Suc n) - 2 ∈ par&amp;quot; using assms by (rule par_imp_par_menos_2)&lt;br /&gt;
  then show &amp;quot;n ∈ par&amp;quot; by simp &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
― ‹La demostración aplicativa es›&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;Suc (Suc n) ∈ par ⟹ n ∈ par&amp;quot;&lt;br /&gt;
apply (drule par_imp_par_menos_2) &lt;br /&gt;
apply simp&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
(* Comentar el uso de drule *)&lt;br /&gt;
&lt;br /&gt;
― ‹La demostración automática es›&lt;br /&gt;
lemma Suc_Suc_par_imp_par: &lt;br /&gt;
  &amp;quot;Suc (Suc n) ∈ par ⟹ n ∈ par&amp;quot;&lt;br /&gt;
by (drule par_imp_par_menos_2, simp)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lemma. Un número natural n es par syss n+2 es par.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma [iff]: &amp;quot;((Suc (Suc n)) ∈ par) = (n ∈ par)&amp;quot;&lt;br /&gt;
by (blast dest: Suc_Suc_par_imp_par)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usa el atributo &amp;quot;iff&amp;quot; porque sirve como regla de simplificación.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Definiciones mutuamente inductivas *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Definición cruzada de los conjuntos inductivos de los pares y de los &lt;br /&gt;
  impares:&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
inductive_set&lt;br /&gt;
  Pares    :: &amp;quot;nat set&amp;quot; and&lt;br /&gt;
  Impares  :: &amp;quot;nat set&amp;quot;&lt;br /&gt;
where&lt;br /&gt;
  ceroP:    &amp;quot;0 ∈ Pares&amp;quot;&lt;br /&gt;
| ParesI:   &amp;quot;n ∈ Impares ⟹ Suc n ∈ Pares&amp;quot;&lt;br /&gt;
| ImparesI: &amp;quot;n ∈ Pares   ⟹ Suc n ∈ Impares&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El esquema de inducción generado por la definición anterior es&lt;br /&gt;
  · Pares_Impares.induct:&lt;br /&gt;
    ⟦P1 0; &lt;br /&gt;
     ⋀n. ⟦n ∈ Impares; P2 n⟧ ⟹ P1 (Suc n);&lt;br /&gt;
     ⋀n. ⟦n ∈ Pares;   P1 n⟧ ⟹ P2 (Suc n)⟧&lt;br /&gt;
    ⟹ (x1 ∈ Pares ⟶ P1 x1) ∧ (x2 ∈ Impares ⟶ P2 x2)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de demostración usando el esquema anterior.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(m ∈ Pares ⟶ even m) ∧ (n ∈ Impares ⟶ even (Suc n))&amp;quot;&lt;br /&gt;
proof (induction rule:Pares_Impares.induct)&lt;br /&gt;
  show &amp;quot;even (0::nat)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n :: &amp;quot;nat&amp;quot;&lt;br /&gt;
  assume H1: &amp;quot;n ∈ Impares&amp;quot; and&lt;br /&gt;
         H2: &amp;quot;even (Suc n)&amp;quot;&lt;br /&gt;
  show &amp;quot;even (Suc n)&amp;quot; using H2 by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n :: &amp;quot;nat&amp;quot;&lt;br /&gt;
  assume H1: &amp;quot;n ∈ Pares&amp;quot; and&lt;br /&gt;
         H2: &amp;quot;even n&amp;quot;&lt;br /&gt;
  have &amp;quot;∃k. n = 2*k&amp;quot; using H2 by (simp add: dvd_def)&lt;br /&gt;
  then obtain k where &amp;quot;n = 2*k&amp;quot; ..&lt;br /&gt;
  then have &amp;quot;Suc (Suc n) = 2*(k+1)&amp;quot; by auto&lt;br /&gt;
  then have &amp;quot;∃k. Suc (Suc n) = 2*k&amp;quot; ..&lt;br /&gt;
  then show &amp;quot;even (Suc (Suc n))&amp;quot; by (simp add: dvd_def)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
subsection {* Definición inductiva de predicados *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Definición inductiva del predicado es_par tal que (es_par n) se&lt;br /&gt;
  verifica si n es par.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
inductive es_par :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;es_par 0&amp;quot; &lt;br /&gt;
| &amp;quot;es_par n ⟹ es_par (Suc(Suc n))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Heurística para elegir entre definir conjuntos o predicados:&lt;br /&gt;
  · si se va a combinar con operaciones conjuntistas, definir conjunto;&lt;br /&gt;
  · en caso contrario, definir predicado.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
</feed>