<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/DAO/index.php?action=history&amp;feed=atom&amp;title=RA12_Relaci%C3%B3n_17</id>
	<title>RA12 Relación 17 - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/DAO/index.php?action=history&amp;feed=atom&amp;title=RA12_Relaci%C3%B3n_17"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/DAO/index.php?title=RA12_Relaci%C3%B3n_17&amp;action=history"/>
	<updated>2026-09-18T17:20:39Z</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/DAO/index.php?title=RA12_Relaci%C3%B3n_17&amp;diff=194&amp;oldid=prev</id>
		<title>Jalonso en 12:04 15 jul 2018</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/DAO/index.php?title=RA12_Relaci%C3%B3n_17&amp;diff=194&amp;oldid=prev"/>
		<updated>2018-07-15T12:04:10Z</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 12:04 15 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 {* R17: Ordenación de listas por inserción *}&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 {* R17: Ordenación de listas por inserción *}&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>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/DAO/index.php?title=RA12_Relaci%C3%B3n_17&amp;diff=127&amp;oldid=prev</id>
		<title>Jalonso: Página creada con &#039;&lt;source lang=&quot;isar&quot;&gt; header {* R17: Ordenación de listas por inserción *}  theory R17 imports Main begin  text {*   En esta relación de ejercicios se define el algoritmo de o...&#039;</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/DAO/index.php?title=RA12_Relaci%C3%B3n_17&amp;diff=127&amp;oldid=prev"/>
		<updated>2013-05-23T11:44:33Z</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 {* R17: Ordenación de listas por inserción *}  theory R17 imports Main begin  text {*   En esta relación de ejercicios se define el algoritmo de o...&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 {* R17: Ordenación de listas por inserción *}&lt;br /&gt;
&lt;br /&gt;
theory R17&lt;br /&gt;
imports Main&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  En esta relación de ejercicios se define el algoritmo de ordenación de&lt;br /&gt;
  listas por inserción y se demuestra que es correcto.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función&lt;br /&gt;
     inserta :: nat ⇒ nat list ⇒ nat list&lt;br /&gt;
  tal que (inserta a xs) es la lista obtenida insertando a delante del&lt;br /&gt;
  primer elemento de xs que es mayor o igual que a. Por ejemplo,&lt;br /&gt;
     inserta 3 [2,5,1,7] = [2,3,5,1,7]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun inserta :: &amp;quot;nat ⇒ nat list ⇒ nat list&amp;quot; where&lt;br /&gt;
  &amp;quot;inserta a xs = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inserta 3 [2,5,1,7]&amp;quot; -- &amp;quot;= [2,3,5,1,7]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     ordena :: nat list ⇒ nat list&lt;br /&gt;
  tal que (ordena xs) es la lista obtenida ordenando xs por inserción. &lt;br /&gt;
  Por ejemplo, &lt;br /&gt;
     ordena [3,2,5,3] = [2,3,3,5]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun ordena :: &amp;quot;nat list ⇒ nat list&amp;quot; where&lt;br /&gt;
  &amp;quot;ordena xs = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;ordena [3,2,5,3]&amp;quot; -- &amp;quot;[2,3,3,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     menor :: nat ⇒ nat list ⇒ bool&lt;br /&gt;
  tal que (menor a xs) se verifica si a es menor o igual que todos los&lt;br /&gt;
  elementos de xs.Por ejemplo,  &lt;br /&gt;
     menor 2 [3,2,5] = True&lt;br /&gt;
     menor 2 [3,0,5] = False&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun menor :: &amp;quot;nat ⇒ nat list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;menor a xs = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;menor 2 [3,2,5]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;menor 2 [3,0,5]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     ordenada :: nat list ⇒ bool&lt;br /&gt;
  tal que (ordenada xs) se verifica si xs es una lista ordenada de&lt;br /&gt;
  manera creciente. Por ejemplo,  &lt;br /&gt;
     ordenada [2,3,3,5] = True &lt;br /&gt;
     ordenada [2,4,3,5] = False &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun ordenada :: &amp;quot;nat list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;ordenada xs = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;ordenada [2,3,3,5]&amp;quot; -- &amp;quot;= True&amp;quot; &lt;br /&gt;
value &amp;quot;ordenada [2,4,3,5]&amp;quot; -- &amp;quot;= False&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar que si y es una cota inferior de xs y x ≤ y,&lt;br /&gt;
  entonces x es una cota inferior de xs.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma menor_menor: &lt;br /&gt;
  assumes &amp;quot;x ≤ y&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;menor y xs ⟶ menor x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar el siguiente teorema de corrección: x es una&lt;br /&gt;
  cota inferior de la lista obtenida insertando y en zs syss x ≤ y y x&lt;br /&gt;
  es una cota inferior de zs.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma menor_inserta:&lt;br /&gt;
  &amp;quot;menor x (inserta y zs) = (x ≤ y ∧ menor x zs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que al insertar un elemento la lista obtenida&lt;br /&gt;
  está ordenada syss lo estaba la original.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ordenada_inserta:&lt;br /&gt;
  &amp;quot;ordenada (inserta a xs) = ordenada xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que, para toda lista xs, (ordena xs) está&lt;br /&gt;
  ordenada. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
theorem ordenada_ordena:&lt;br /&gt;
  &amp;quot;ordenada (ordena xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. El teorema anterior no garantiza que ordena sea correcta, ya que&lt;br /&gt;
  puede que (ordena xs) no tenga los mismos elementos que xs. Por&lt;br /&gt;
  ejemplo, si se define (ordena xs) como [] se tiene que (ordena xs)&lt;br /&gt;
  está ordenada pero no es una ordenación de xs. Para ello, definimos la&lt;br /&gt;
  función cuenta.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Definir la función&lt;br /&gt;
     cuenta :: nat list =&amp;gt; nat =&amp;gt; nat&lt;br /&gt;
  tal que (cuenta xs y) es el número de veces que aparece el elemento y&lt;br /&gt;
  en la lista xs. Por ejemplo, &lt;br /&gt;
     cuenta [1,3,4,3,5] 3 = 2&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun cuenta :: &amp;quot;nat list =&amp;gt; nat =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;cuenta xs y = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;cuenta [1,3,4,3,5] 3&amp;quot; -- &amp;quot;= 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar que el número de veces que aparece y en &lt;br /&gt;
  (inserta x xs) es &lt;br /&gt;
  * uno más el número de veces que aparece en xs, si y = x; &lt;br /&gt;
  * el número de veces que aparece en xs, si y ≠ x; &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma cuenta_inserta:&lt;br /&gt;
  &amp;quot;cuenta (inserta x xs) y =&lt;br /&gt;
   (if x=y then Suc (cuenta xs y) else cuenta xs y)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que el número de veces que aparece y en &lt;br /&gt;
  (ordena xs) es el número de veces que aparece en xs.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
theorem cuenta_ordena:&lt;br /&gt;
  &amp;quot;cuenta (ordena xs) y = cuenta xs y&amp;quot;&lt;br /&gt;
oops&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>