<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/RA2014/index.php?action=history&amp;feed=atom&amp;title=Tema_11%3A_Gram%C3%A1ticas_libre_de_contexto</id>
	<title>Tema 11: Gramáticas libre de contexto - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/RA2014/index.php?action=history&amp;feed=atom&amp;title=Tema_11%3A_Gram%C3%A1ticas_libre_de_contexto"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_11:_Gram%C3%A1ticas_libre_de_contexto&amp;action=history"/>
	<updated>2026-09-20T08:56:11Z</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/RA2014/index.php?title=Tema_11:_Gram%C3%A1ticas_libre_de_contexto&amp;diff=303&amp;oldid=prev</id>
		<title>WikiSysop en 08:18 16 jul 2018</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_11:_Gram%C3%A1ticas_libre_de_contexto&amp;diff=303&amp;oldid=prev"/>
		<updated>2018-07-16T08:18:22Z</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;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;es&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Revisión anterior&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revisión del 08:18 16 jul 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Línea 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;isar&lt;/del&gt;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;isabelle&lt;/ins&gt;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;header {* T11: Gramáticas libres de contexto *}&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;header {* T11: Gramáticas libres de contexto *}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_11:_Gram%C3%A1ticas_libre_de_contexto&amp;diff=273&amp;oldid=prev</id>
		<title>Jalonso: Página creada con &#039;&lt;source lang=&quot;isar&quot;&gt; header {* T11: Gramáticas libres de contexto *}  theory T11_Gramaticas_libre_de_contexto imports Main begin  text {*   En esta relación se definen dos gra...&#039;</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_11:_Gram%C3%A1ticas_libre_de_contexto&amp;diff=273&amp;oldid=prev"/>
		<updated>2015-01-29T12:10:21Z</updated>

		<summary type="html">&lt;p&gt;Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* T11: Gramáticas libres de contexto *}  theory T11_Gramaticas_libre_de_contexto imports Main begin  text {*   En esta relación se definen dos gra...&amp;#039;&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;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* T11: Gramáticas libres de contexto *}&lt;br /&gt;
&lt;br /&gt;
theory T11_Gramaticas_libre_de_contexto&lt;br /&gt;
imports Main&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  En esta relación se definen dos gramáticas libres de contexto y se&lt;br /&gt;
  demuestra que son equivalentes. Además, se define por recursión una&lt;br /&gt;
  función para reconocer las palabras de la gramática y se demuestra que&lt;br /&gt;
  es correcta y completa. *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Una gramática libre de contexto para las expresiones&lt;br /&gt;
  parentizadas es&lt;br /&gt;
     S ⟶ ε | &amp;#039;(&amp;#039; S &amp;#039;)&amp;#039; | SS&lt;br /&gt;
  definir inductivamente la gramática S usando A y B para &amp;#039;(&amp;#039; y &amp;#039;)&amp;#039;,&lt;br /&gt;
  respectivamente. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
datatype alfabeto = A | B&lt;br /&gt;
&lt;br /&gt;
inductive_set S :: &amp;quot;alfabeto list set&amp;quot; where&lt;br /&gt;
  S1: &amp;quot;[] ∈ S&amp;quot; &lt;br /&gt;
| S2: &amp;quot;w ∈ S ⟹ [A] @ w @ [B] ∈ S&amp;quot; &lt;br /&gt;
| S3: &amp;quot;v ∈ S ⟹ w ∈ S ⟹ v @ w ∈ S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Otra gramática libre de contexto para las expresiones&lt;br /&gt;
  parentizadas es&lt;br /&gt;
     T ⟶ ε | T &amp;#039;(&amp;#039; T &amp;#039;)&amp;#039;&lt;br /&gt;
  definir inductivamente la gramática T usando A y B para &amp;#039;(&amp;#039; y &amp;#039;)&amp;#039;,&lt;br /&gt;
  respectivamente. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
inductive_set T :: &amp;quot;alfabeto list set&amp;quot; where&lt;br /&gt;
  T1: &amp;quot;[] ∈ T&amp;quot; &lt;br /&gt;
| T2: &amp;quot;v ∈ T ⟹ w ∈ T ⟹ v @ [A] @ w @ [B] ∈ T&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar que T está contenido en S. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma T_en_S: &lt;br /&gt;
  assumes &amp;quot;w ∈ T&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;w ∈ S&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
proof (induct rule: T.induct)&lt;br /&gt;
  show &amp;quot;[] ∈ S&amp;quot; by (rule S1)&lt;br /&gt;
next&lt;br /&gt;
  fix v w&lt;br /&gt;
  assume &amp;quot;v ∈ T&amp;quot; and &amp;quot;v ∈ S&amp;quot; and &amp;quot;w ∈ T&amp;quot; and &amp;quot;w ∈ S&amp;quot; &lt;br /&gt;
  have &amp;quot;[A] @ w @ [B] ∈ S&amp;quot; using `w ∈ S` by (rule S2)&lt;br /&gt;
  with `v ∈ S` show &amp;quot;v @ [A] @ w @ [B] ∈ S&amp;quot; by (rule S3)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar que S está contenido en T. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Se usarán dos lemas auxiliares:&lt;br /&gt;
  · S_en_T_aux1: w ∈ T ⟹ [A] @ w @ [B] ∈ T&lt;br /&gt;
  · S_en_T_aux2: v ∈ T ⟹ u ∈ T ⟹ u @ v ∈ T&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del primer lema es&amp;quot;&lt;br /&gt;
lemma S_en_T_aux1: &lt;br /&gt;
  assumes &amp;quot;w ∈ T&amp;quot; &lt;br /&gt;
  shows   &amp;quot;[A] @ w @ [B] ∈ T&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;[] ∈ T&amp;quot; by (rule T1)&lt;br /&gt;
  hence &amp;quot;[] @ [A] @ w @ [B] ∈ T&amp;quot; using assms by (rule T2)&lt;br /&gt;
  thus &amp;quot;[A] @ w @ [B] ∈ T&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del primer lema es&amp;quot;&lt;br /&gt;
lemma S_en_T_aux1b: &lt;br /&gt;
  &amp;quot;w ∈ T ⟹ [A] @ w @ [B] ∈ T&amp;quot;&lt;br /&gt;
using T1 T2 [where v = &amp;quot;[]&amp;quot;] by simp &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del segundo lema es&amp;quot;&lt;br /&gt;
lemma S_en_T_aux2: &lt;br /&gt;
  &amp;quot;v ∈ T ⟹ u ∈ T ⟹ u @ v ∈ T&amp;quot;&lt;br /&gt;
proof (induct rule: T.induct)&lt;br /&gt;
  assume &amp;quot;u ∈ T&amp;quot;&lt;br /&gt;
  thus &amp;quot;u @ [] ∈ T&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix w1 w2&lt;br /&gt;
  assume &amp;quot;w1 ∈ T&amp;quot;&lt;br /&gt;
         &amp;quot;u ∈ T ⟹ u @ w1 ∈ T&amp;quot;&lt;br /&gt;
         &amp;quot;w2 ∈ T&amp;quot; &lt;br /&gt;
         &amp;quot;u ∈ T ⟹ u @ w2 ∈ T&amp;quot; &lt;br /&gt;
         &amp;quot;u ∈ T&amp;quot;&lt;br /&gt;
  hence &amp;quot;u @ w1 ∈ T&amp;quot; by simp&lt;br /&gt;
  hence &amp;quot;(u @ w1) @ [A] @ w2 @ [B] ∈ T&amp;quot; using `w2 ∈ T` by (rule T2)&lt;br /&gt;
  thus &amp;quot;u @ w1 @ [A] @ w2 @ [B] ∈ T&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma S_en_T: &lt;br /&gt;
  &amp;quot;w ∈ S ⟹ w ∈ T&amp;quot;&lt;br /&gt;
proof (induct rule: S.induct)&lt;br /&gt;
  show &amp;quot;[] ∈ T&amp;quot; by (rule T1)&lt;br /&gt;
next&lt;br /&gt;
  fix w&lt;br /&gt;
  assume &amp;quot;w ∈ S&amp;quot; &amp;quot;w ∈ T&amp;quot; &lt;br /&gt;
  show &amp;quot;[A] @ w @ [B] ∈ T&amp;quot; using `w ∈ T`  by (rule S_en_T_aux1) &lt;br /&gt;
next&lt;br /&gt;
  fix v w&lt;br /&gt;
  assume &amp;quot;v ∈ S&amp;quot; &amp;quot;v ∈ T&amp;quot; &amp;quot;w ∈ S&amp;quot; &amp;quot;w ∈ T&amp;quot;&lt;br /&gt;
  show &amp;quot;v @ w ∈ T&amp;quot; using `w ∈ T` `v ∈ T` by (rule S_en_T_aux2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar que S y T son iguales. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma S_igual_T:&lt;br /&gt;
  &amp;quot;S = T&amp;quot;&lt;br /&gt;
by (auto simp add: S_en_T T_en_S)&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. En lugar de una gramática, se puede usar el siguiente&lt;br /&gt;
  procedimiento para determinar si la cadena es una sucesión de&lt;br /&gt;
  paréntesis bien balanceada: se recorre la cadena de izquierda a&lt;br /&gt;
  derecha contando cuántos paréntesis de necesitan para que esté bien&lt;br /&gt;
  balanceada. Si el contador al final de la cadena es 0, la cadena está&lt;br /&gt;
  bien balanceada.&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     balanceada :: alfabeto list ⇒ bool&lt;br /&gt;
  tal que (balanceada w) se verifica si w está bien balanceada. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     balanceada [A,A,B,B] = True&lt;br /&gt;
     balanceada [A,B,A,B] = True&lt;br /&gt;
     balanceada [A,B,B,A] = False&lt;br /&gt;
  Indicación: Definir balanceada  usando la función auxiliar &lt;br /&gt;
     balanceada_aux :: alfabeto list ⇒ nat ⇒ bool&lt;br /&gt;
  tal que (balanceada_aux w 0) se verifica si w está bien balanceada.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun balanceada_aux :: &amp;quot;alfabeto list ⇒ nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;balanceada_aux []    0       = True&amp;quot;&lt;br /&gt;
| &amp;quot;balanceada_aux (A#w) n       = balanceada_aux w (Suc n)&amp;quot;&lt;br /&gt;
| &amp;quot;balanceada_aux (B#w) (Suc n) = balanceada_aux w n&amp;quot;&lt;br /&gt;
| &amp;quot;balanceada_aux w     n       = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun balanceada :: &amp;quot;alfabeto list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;balanceada w = balanceada_aux w 0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;balanceada [A,A,B,B]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;balanceada [A,B,A,B]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;balanceada [A,B,B,A]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que balanceada es un reconocedor correcto de la&lt;br /&gt;
  gramática S; es decir, &lt;br /&gt;
     w ∈ S ⟹ balanceada w&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota: En la demostración se usarán los siguientes lemas auxiliares:&lt;br /&gt;
  · balanceada_correcto_aux_1: &lt;br /&gt;
       balanceada_aux w n ⟹ balanceada_aux (w @ [B]) (Suc n)&lt;br /&gt;
  · balanceada_correcto_aux_2: &lt;br /&gt;
       ⟦balanceada_aux v n; &lt;br /&gt;
        balanceada_aux w 0⟧ &lt;br /&gt;
       ⟹ balanceada_aux (v @ w) n&lt;br /&gt;
  · balanceada_correcto_aux_3:&lt;br /&gt;
       w ∈ S ⟹ balanceada_aux w 0   *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del primer lema auxiliar es&amp;quot;&lt;br /&gt;
lemma balanceada_correcto_aux_1: &lt;br /&gt;
  &amp;quot;balanceada_aux w n ⟹ balanceada_aux (w @ [B]) (Suc n)&amp;quot;&lt;br /&gt;
by (induct w n rule: balanceada_aux.induct) simp_all&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del primer lema auxiliar es&amp;quot;&lt;br /&gt;
lemma balanceada_correcto_aux_1b:&lt;br /&gt;
  assumes &amp;quot;balanceada_aux w n&amp;quot; &lt;br /&gt;
  shows   &amp;quot;balanceada_aux (w @ [B]) (Suc n)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
proof (induct w n rule: balanceada_aux.induct)&lt;br /&gt;
  assume &amp;quot;balanceada_aux [] 0&amp;quot; &lt;br /&gt;
  thus &amp;quot;balanceada_aux ([] @ [B]) (Suc 0)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix w n &lt;br /&gt;
  assume &amp;quot;balanceada_aux w (Suc n) ⟹ balanceada_aux (w @ [B]) (Suc (Suc n))&amp;quot;&lt;br /&gt;
         &amp;quot;balanceada_aux (A # w) n&amp;quot;&lt;br /&gt;
  thus &amp;quot;balanceada_aux ((A # w) @ [B]) (Suc n)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix w n &lt;br /&gt;
  assume &amp;quot;balanceada_aux w n ⟹ balanceada_aux (w @ [B]) (Suc n)&amp;quot;&lt;br /&gt;
         &amp;quot;balanceada_aux (B # w) (Suc n)&amp;quot;&lt;br /&gt;
  thus   &amp;quot;balanceada_aux ((B # w) @ [B]) (Suc (Suc n))&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix v&lt;br /&gt;
  assume &amp;quot;balanceada_aux (B # v) 0&amp;quot; &lt;br /&gt;
  thus &amp;quot;balanceada_aux ((B # v) @ [B]) (Suc 0)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix v&lt;br /&gt;
  assume &amp;quot;balanceada_aux [] (Suc v)&amp;quot; &lt;br /&gt;
  thus &amp;quot;balanceada_aux ([] @ [B]) (Suc (Suc v))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del segundo lema auxiliar es&amp;quot;&lt;br /&gt;
lemma balanceada_correcto_aux_2: &lt;br /&gt;
  assumes &amp;quot;balanceada_aux v n&amp;quot; &lt;br /&gt;
          &amp;quot;balanceada_aux w 0&amp;quot; &lt;br /&gt;
  shows   &amp;quot;balanceada_aux (v @ w) n&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by (induct v n rule: balanceada_aux.induct) simp_all&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del tercer lema auxiliar es&amp;quot;&lt;br /&gt;
lemma balanceada_correcto_aux_3:&lt;br /&gt;
  &amp;quot;w ∈ S ⟹ balanceada_aux w 0&amp;quot;&lt;br /&gt;
by (induct rule: S.induct) &lt;br /&gt;
   (auto simp add: balanceada_correcto_aux_1 balanceada_correcto_aux_2)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del tercer lema auxiliar es&amp;quot;&lt;br /&gt;
lemma balanceada_correcto_aux_3b:&lt;br /&gt;
  &amp;quot;w ∈ S ⟹ balanceada_aux w 0&amp;quot;&lt;br /&gt;
proof (induct rule: S.induct) &lt;br /&gt;
  show &amp;quot;balanceada_aux [] 0&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix w&lt;br /&gt;
  assume &amp;quot;w ∈ S&amp;quot; &lt;br /&gt;
         &amp;quot;balanceada_aux w 0&amp;quot; &lt;br /&gt;
  thus &amp;quot;balanceada_aux ([A] @ w @ [B]) 0&amp;quot; &lt;br /&gt;
    by (simp add: balanceada_correcto_aux_1)&lt;br /&gt;
next&lt;br /&gt;
  fix v w&lt;br /&gt;
  assume &amp;quot;v ∈ S&amp;quot; &lt;br /&gt;
         &amp;quot;balanceada_aux v 0&amp;quot; &lt;br /&gt;
         &amp;quot;w ∈ S&amp;quot; &lt;br /&gt;
         &amp;quot;balanceada_aux w 0&amp;quot; &lt;br /&gt;
  thus &amp;quot;balanceada_aux (v @ w) 0&amp;quot; &lt;br /&gt;
    by (simp add: balanceada_correcto_aux_2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del tercer lema es&amp;quot;&lt;br /&gt;
lemma balanceada_correcto:&lt;br /&gt;
  &amp;quot;w ∈ S ⟹ balanceada w&amp;quot;&lt;br /&gt;
by (simp add: balanceada_correcto_aux_3)&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que balanceada es un reconocedor completo de &lt;br /&gt;
  la gramática S; es decir, &lt;br /&gt;
     balanceada w ⟹ w ∈ S &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del primer lema auxiliar es&amp;quot;&lt;br /&gt;
lemma balanceada_completo_aux_1:&lt;br /&gt;
  &amp;quot;[A,B] ∈ S&amp;quot;&lt;br /&gt;
using S1 S2 [where w = &amp;quot;[]&amp;quot;] by simp &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del primer lema auxiliar es&amp;quot;&lt;br /&gt;
lemma balanceada_completo_aux_1b:&lt;br /&gt;
  &amp;quot;[A,B] ∈ S&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;[] ∈ S&amp;quot; using S1 by simp&lt;br /&gt;
  hence &amp;quot;[A] @ [] @ [B] ∈ S&amp;quot; using S2 [where w = &amp;quot;[]&amp;quot;] by simp &lt;br /&gt;
  thus &amp;quot;[A,B] ∈ S&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del segundo lema auxiliar es&amp;quot;&lt;br /&gt;
lemma balanceada_completo_aux_2: &lt;br /&gt;
  assumes &amp;quot;u ∈ S&amp;quot; &lt;br /&gt;
  shows &amp;quot;⋀v w. u = v @ w ⟹ v @ A # B # w ∈ S&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
proof (induct)&lt;br /&gt;
  fix v w :: &amp;quot;alfabeto list&amp;quot;&lt;br /&gt;
  assume &amp;quot;[] = v @ w&amp;quot; &lt;br /&gt;
  thus &amp;quot;v @ A # B # w ∈ S&amp;quot; by (simp add: balanceada_completo_aux_1)&lt;br /&gt;
next&lt;br /&gt;
  fix v u w :: &amp;quot;alfabeto list&amp;quot;&lt;br /&gt;
  assume uS: &amp;quot;u ∈ S&amp;quot; and&lt;br /&gt;
         HI: &amp;quot;⋀v w. u = v @ w ⟹ v @ A # B # w ∈ S&amp;quot; and&lt;br /&gt;
         sup: &amp;quot;[A] @ u @ [B] = v @ w&amp;quot;&lt;br /&gt;
  show &amp;quot;v @ A # B # w ∈ S&amp;quot;&lt;br /&gt;
  proof (cases v)&lt;br /&gt;
    case Nil&lt;br /&gt;
    hence &amp;quot;w = A # u @ [B]&amp;quot; using sup by simp&lt;br /&gt;
    hence &amp;quot;w ∈ S&amp;quot; using uS S2 by simp&lt;br /&gt;
    hence &amp;quot;[A,B] @ w ∈ S&amp;quot; using balanceada_completo_aux_1 S3 by blast&lt;br /&gt;
    thus ?thesis using Nil by simp&lt;br /&gt;
  next&lt;br /&gt;
    case (Cons x v&amp;#039;)&lt;br /&gt;
    show ?thesis&lt;br /&gt;
    proof (cases w rule:rev_cases)&lt;br /&gt;
      case Nil&lt;br /&gt;
      have &amp;quot;A # u @ [B] ∈ S&amp;quot; using S2 uS by simp&lt;br /&gt;
      hence &amp;quot;(A # u @ [B]) @ [A,B] ∈ S&amp;quot; &lt;br /&gt;
        using balanceada_completo_aux_1 S3 by blast&lt;br /&gt;
      thus ?thesis using Nil Cons sup by auto&lt;br /&gt;
    next&lt;br /&gt;
      case (snoc w&amp;#039; y)&lt;br /&gt;
      hence u: &amp;quot;u = v&amp;#039; @ w&amp;#039;&amp;quot; and [simp]: &amp;quot;x = A ∧ y = B&amp;quot;&lt;br /&gt;
	using Cons sup by auto&lt;br /&gt;
      from u have &amp;quot;v&amp;#039; @ A # B # w&amp;#039; ∈ S&amp;quot; by (rule HI)&lt;br /&gt;
      hence &amp;quot;A # (v&amp;#039; @ A # B # w&amp;#039;) @ [B] ∈ S&amp;quot; &lt;br /&gt;
        using S2 [where w = &amp;quot;v&amp;#039; @ A # B # w&amp;#039;&amp;quot;] by simp&lt;br /&gt;
      thus ?thesis using Cons snoc by auto&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  fix v&amp;#039; w&amp;#039; v w&lt;br /&gt;
  assume v&amp;#039;S: &amp;quot;v&amp;#039; ∈ S&amp;quot;&lt;br /&gt;
     and HIv: &amp;quot;⋀v w. v&amp;#039; = v @ w ⟹ v @ A # B # w ∈ S&amp;quot;&lt;br /&gt;
     and w&amp;#039;S: &amp;quot;w&amp;#039; ∈ S&amp;quot;&lt;br /&gt;
     and HIw: &amp;quot;⋀v w. w&amp;#039; = v @ w ⟹ v @ A # B # w ∈ S&amp;quot;   &lt;br /&gt;
     and sup: &amp;quot;v&amp;#039; @ w&amp;#039; = v @ w&amp;quot;&lt;br /&gt;
  then obtain r where &amp;quot;v&amp;#039; = v @ r ∧ r @ w&amp;#039; = w ∨ v&amp;#039; @ r = v ∧ w&amp;#039; = r @ w&amp;quot;&lt;br /&gt;
    (is &amp;quot;?A ∨ ?B&amp;quot;)&lt;br /&gt;
    by (auto simp: append_eq_append_conv2)&lt;br /&gt;
  thus &amp;quot;v @ A # B # w ∈ S&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume A: ?A&lt;br /&gt;
    hence &amp;quot;v @ A # B # r ∈ S&amp;quot; using HIv by blast&lt;br /&gt;
    hence &amp;quot;(v @ A # B # r) @ w&amp;#039; ∈ S&amp;quot; using w&amp;#039;S by (rule S3)&lt;br /&gt;
    thus ?thesis using A by auto&lt;br /&gt;
  next&lt;br /&gt;
    assume B: ?B&lt;br /&gt;
    hence &amp;quot;r @ A # B # w ∈ S&amp;quot; using HIw by blast&lt;br /&gt;
    with v&amp;#039;S have &amp;quot;v&amp;#039; @ (r @ A # B # w) ∈ S&amp;quot; by (rule S3)&lt;br /&gt;
    thus ?thesis using B by auto&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del tercer lema auxiliar es&amp;quot;&lt;br /&gt;
lemma balanceada_completo_aux_3: &lt;br /&gt;
  &amp;quot;balanceada_aux w n ⟹ replicate n A @ w ∈ S&amp;quot;&lt;br /&gt;
proof (induct w n rule: balanceada_aux.induct)&lt;br /&gt;
  assume &amp;quot;balanceada_aux [] 0&amp;quot; &lt;br /&gt;
  thus &amp;quot;replicate 0 A @ [] ∈ S&amp;quot; using S1 by simp&lt;br /&gt;
next&lt;br /&gt;
  fix w n&lt;br /&gt;
  assume &amp;quot;balanceada_aux w (Suc n) ⟹ replicate (Suc n) A @ w ∈ S&amp;quot; &lt;br /&gt;
     and &amp;quot;balanceada_aux (A # w) n&amp;quot;&lt;br /&gt;
  thus &amp;quot;replicate n A @ A # w ∈ S&amp;quot; &lt;br /&gt;
    by (simp add: replicate_app_Cons_same)&lt;br /&gt;
next&lt;br /&gt;
  fix w n&lt;br /&gt;
  assume &amp;quot;balanceada_aux w n ⟹ replicate n A @ w ∈ S&amp;quot; &lt;br /&gt;
     and &amp;quot;balanceada_aux (B # w) (Suc n)&amp;quot;&lt;br /&gt;
  thus &amp;quot;replicate (Suc n) A @ B # w ∈ S&amp;quot; &lt;br /&gt;
    by (simp add: balanceada_completo_aux_2&lt;br /&gt;
        replicate_app_Cons_same[symmetric])&lt;br /&gt;
next&lt;br /&gt;
  fix v&lt;br /&gt;
  assume &amp;quot;balanceada_aux (B # v) 0&amp;quot; &lt;br /&gt;
  thus &amp;quot;replicate 0 A @ B # v ∈ S&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix v&lt;br /&gt;
  assume &amp;quot;balanceada_aux [] (Suc v)&amp;quot; &lt;br /&gt;
  thus &amp;quot;replicate (Suc v) A @ [] ∈ S&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración del lema es&amp;quot;&lt;br /&gt;
lemma balanceada_completo: &lt;br /&gt;
  assumes &amp;quot;balanceada w&amp;quot;&lt;br /&gt;
  shows   &amp;quot; w ∈ S&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;balanceada_aux w 0&amp;quot; using assms by simp&lt;br /&gt;
  hence &amp;quot;replicate 0 A @ w ∈ S&amp;quot; by (rule balanceada_completo_aux_3)&lt;br /&gt;
  thus &amp;quot;w ∈ S&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>Jalonso</name></author>
		
	</entry>
</feed>