<?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_18</id>
	<title>RA12 Relación 18 - 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_18"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/DAO/index.php?title=RA12_Relaci%C3%B3n_18&amp;action=history"/>
	<updated>2026-09-17T19:05: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_18&amp;diff=168&amp;oldid=prev</id>
		<title>Jalonso: Texto reemplazado: «lang=&quot;isar&quot;» por «lang=&quot;isabelle&quot;»</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/DAO/index.php?title=RA12_Relaci%C3%B3n_18&amp;diff=168&amp;oldid=prev"/>
		<updated>2018-07-15T11:47:29Z</updated>

		<summary type="html">&lt;p&gt;Texto reemplazado: «lang=&amp;quot;isar&amp;quot;» por «lang=&amp;quot;isabelle&amp;quot;»&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 11:47 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 {* R18: Ordenación de listas por mezcla *}&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 {* R18: Ordenación de listas por mezcla *}&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_18&amp;diff=128&amp;oldid=prev</id>
		<title>Jalonso: Página creada con &#039;&lt;source lang=&quot;isar&quot;&gt; header {* R18: Ordenación de listas por mezcla *}  theory R18 imports Main begin  text {*   En esta relación de ejercicios se define el algoritmo de orden...&#039;</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/DAO/index.php?title=RA12_Relaci%C3%B3n_18&amp;diff=128&amp;oldid=prev"/>
		<updated>2013-05-23T11:46:27Z</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 {* R18: Ordenación de listas por mezcla *}  theory R18 imports Main begin  text {*   En esta relación de ejercicios se define el algoritmo de orden...&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 {* R18: Ordenación de listas por mezcla *}&lt;br /&gt;
&lt;br /&gt;
theory R18&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 mezcla y se demuestra que es correcto.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
section {* Ordenación de listas *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. 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 2. 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 3. 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;
section {* Ordenación por mezcla *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     mezcla :: nat list ⇒ nat list ⇒ nat list&lt;br /&gt;
  tal que (mezcla xs ys) es la lista obtenida mezclando las listas&lt;br /&gt;
  ordenadas xs e ys. Por ejemplo, &lt;br /&gt;
     mezcla [1,2,5] [3,5,7] = [1,2,3,5,5,7]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun mezcla :: &amp;quot;nat list ⇒ nat list ⇒ nat list&amp;quot; where&lt;br /&gt;
  &amp;quot;mezcla xs ys = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;mezcla [1,2,5] [3,5,7]&amp;quot; -- &amp;quot;= [1,2,3,5,5,7]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     ordenaM :: nat list ⇒ nat list&lt;br /&gt;
  tal que (ordenaM xs) es la lista obtenida ordenando la lista xs&lt;br /&gt;
  mediante mezclas; es decir, la divide en dos mitades, las ordena y las&lt;br /&gt;
  mezcla. Por ejemplo, &lt;br /&gt;
     &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun ordenaM :: &amp;quot;nat list ⇒ nat list&amp;quot; where&lt;br /&gt;
  &amp;quot;ordenaM xs = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;ordenaM [3,2,5,2]&amp;quot; -- &amp;quot;= [2,2,3,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Sea x ≤ y. Si y es menor o igual que todos los elementos&lt;br /&gt;
  de xs, entonces x es menor o igual que todos los elementos de xs&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma menor_menor: &lt;br /&gt;
  &amp;quot;x ≤ y ⟹ 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 7. Demostrar que el número de veces que aparece n en la&lt;br /&gt;
  mezcla de dos listas es igual a la suma del número de apariciones en&lt;br /&gt;
  cada una de las listas&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma cuenta_mezcla: &lt;br /&gt;
  &amp;quot;cuenta (mezcla xs ys) n = cuenta xs n + cuenta ys n&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que x es menor que todos los elementos de ys y&lt;br /&gt;
  de zs, entonces también lo es de su mezcla.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma menor_mezcla:&lt;br /&gt;
  assumes &amp;quot;menor x ys&amp;quot; &lt;br /&gt;
          &amp;quot;menor x zs&amp;quot; &lt;br /&gt;
  shows   &amp;quot;menor x (mezcla ys zs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar que la mezcla de dos listas ordenadas es una&lt;br /&gt;
  lista ordenada. &lt;br /&gt;
  Indicación: Usar los siguientes lemas&lt;br /&gt;
  · linorder_not_le: (¬ x ≤ y) = (y &amp;lt; x)&lt;br /&gt;
  · order_less_le:   (x &amp;lt; y) = (x ≤ y ∧ x ≠ y)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ordenada_mezcla:&lt;br /&gt;
  assumes &amp;quot;ordenada xs&amp;quot; &lt;br /&gt;
          &amp;quot;ordenada ys&amp;quot; &lt;br /&gt;
  shows   &amp;quot;ordenada (mezcla xs ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que si x es mayor que 1, entonces el mínimo de&lt;br /&gt;
  x y su mitad es menor que x.&lt;br /&gt;
  Indicación: Usar los siguientes lemas&lt;br /&gt;
  · min_def:         min a b = (if a ≤ b then a else b)&lt;br /&gt;
  · linorder_not_le: (¬ x ≤ y) = (y &amp;lt; x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma min_mitad: &lt;br /&gt;
  &amp;quot;1 &amp;lt; x ⟹ min x (x div 2::nat) &amp;lt; x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que si x es mayor que 1, entonces x menos su&lt;br /&gt;
  mitad es menor que x. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma menos_mitad: &lt;br /&gt;
  &amp;quot;1 &amp;lt; x ⟹ x - x div (2::nat) &amp;lt; x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que (ordenaM xs) está ordenada.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
theorem ordenada_ordenaM:&lt;br /&gt;
  &amp;quot;ordenada (ordenaM xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que el número de apariciones de un elemento en&lt;br /&gt;
  la concatenación de dos listas es la suma del número de apariciones en&lt;br /&gt;
  cada una.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma cuenta_conc: &lt;br /&gt;
  &amp;quot;cuenta (xs @ ys) x = cuenta xs x + cuenta ys x&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar que las listas xs y (ordenaM xs) tienen los&lt;br /&gt;
  mismos elementos.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
theorem cuenta_ordenaM: &lt;br /&gt;
  &amp;quot;cuenta (ordenaM xs) x = cuenta xs x&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>