<?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=R10</id>
	<title>R10 - 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=R10"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2020/index.php?title=R10&amp;action=history"/>
	<updated>2026-07-20T03:30:42Z</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=R10&amp;diff=822&amp;oldid=prev</id>
		<title>Mjoseh: Protegió «R10» ([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=R10&amp;diff=822&amp;oldid=prev"/>
		<updated>2020-04-20T17:58:43Z</updated>

		<summary type="html">&lt;p&gt;Protegió «&lt;a href=&quot;/~jalonso/LMF2020/index.php/R10&quot; title=&quot;R10&quot;&gt;R10&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 17:58 20 abr 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=R10&amp;diff=821&amp;oldid=prev</id>
		<title>Mjoseh: Página creada con «&lt;source lang = &quot;isabelle&quot;&gt; chapter ‹ R10: Razonamiento sobre programas en Isabelle/HOL ›   theory R10 imports Main  begin   text ‹ -----------------------------------…»</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2020/index.php?title=R10&amp;diff=821&amp;oldid=prev"/>
		<updated>2020-04-20T17:58:33Z</updated>

		<summary type="html">&lt;p&gt;Página creada con «&amp;lt;source lang = &amp;quot;isabelle&amp;quot;&amp;gt; chapter ‹ R10: Razonamiento sobre programas en Isabelle/HOL ›   theory R10 imports Main  begin   text ‹ -----------------------------------…»&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 ‹ R10: Razonamiento sobre programas en Isabelle/HOL ›&lt;br /&gt;
 &lt;br /&gt;
theory R10&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text ‹ --------------------------------------------------------------- &lt;br /&gt;
   En toda la relación de ejercicios las demostraciones han de realizarse&lt;br /&gt;
   de las formas siguientes:&lt;br /&gt;
    (*) automática&lt;br /&gt;
    (*) detallada (bien declarativa o aplicativa)&lt;br /&gt;
  ------------------------------------------------------------------ ›&lt;br /&gt;
    &lt;br /&gt;
text ‹--------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1.1. Definir la función&lt;br /&gt;
     sumaImpares :: nat ⇒ nat&lt;br /&gt;
  tal que (sumaImpares n) es la suma de los n primeros números&lt;br /&gt;
  impares. Por ejemplo,&lt;br /&gt;
     sumaImpares 5  =  25&lt;br /&gt;
  ------------------------------------------------------------------›&lt;br /&gt;
&lt;br /&gt;
fun sumaImpares :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaImpares 0 = 0&amp;quot;&lt;br /&gt;
| &amp;quot;sumaImpares (Suc n) = sumaImpares n + (2*n+1)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaImpares 5&amp;quot;  ― ‹= 25›&lt;br /&gt;
&lt;br /&gt;
text ‹--------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1.2. Demostrar que &lt;br /&gt;
     sumaImpares n = n*n&lt;br /&gt;
  -------------------------------------------------------------------›&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración automática:›&lt;br /&gt;
lemma &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración detallada:›&lt;br /&gt;
lemma sumaImpares_d:&lt;br /&gt;
  &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
text ‹ --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Definir la función&lt;br /&gt;
     sumaPotenciasDeDosMasUno :: nat ⇒ nat&lt;br /&gt;
  tal que &lt;br /&gt;
     (sumaPotenciasDeDosMasUno n) = 1 + 2^0 + 2^1 + 2^2 + ... + 2^n. &lt;br /&gt;
  Por ejemplo, &lt;br /&gt;
     sumaPotenciasDeDosMasUno 3  =  16&lt;br /&gt;
  ------------------------------------------------------------------ ›&lt;br /&gt;
   &lt;br /&gt;
fun sumaPotenciasDeDosMasUno :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno 0       = 2&amp;quot;&lt;br /&gt;
| &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = sumaPotenciasDeDosMasUno n + 2^(n+1)&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
value &amp;quot;sumaPotenciasDeDosMasUno 3&amp;quot; ― ‹= 16›&lt;br /&gt;
 &lt;br /&gt;
text ‹ --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar que &lt;br /&gt;
     sumaPotenciasDeDosMasUno n = 2^(n+1)&lt;br /&gt;
  ------------------------------------------------------------------- ›&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración automática:›&lt;br /&gt;
lemma  &lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración detallada:›&lt;br /&gt;
lemma sumaPotenciasDeDosMasUno_d: &lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
 &lt;br /&gt;
text ‹ --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     copia :: nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (copia n x) es la lista formado por n copias del elemento&lt;br /&gt;
  x. Por ejemplo, &lt;br /&gt;
     copia 3 x = [x,x,x]&lt;br /&gt;
  ------------------------------------------------------------------ ›&lt;br /&gt;
 &lt;br /&gt;
fun copia :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;copia 0 x       = []&amp;quot;&lt;br /&gt;
| &amp;quot;copia (Suc n) x = x # copia n x&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
value &amp;quot;copia 3 x&amp;quot; ― ‹= [x,x,x]›&lt;br /&gt;
 &lt;br /&gt;
text ‹ --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     todos :: (&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (todos p xs) se verifica si todos los elementos de xs cumplen&lt;br /&gt;
  la propiedad p. Por ejemplo,&lt;br /&gt;
     todos (λx. x&amp;gt;(1::nat)) [2,6,4] = True&lt;br /&gt;
     todos (λx. x&amp;gt;(2::nat)) [2,6,4] = False&lt;br /&gt;
  Nota: La conjunción se representa por ∧&lt;br /&gt;
  ----------------------------------------------------------------- ›&lt;br /&gt;
 &lt;br /&gt;
fun todos :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;todos p []     = True&amp;quot;&lt;br /&gt;
| &amp;quot;todos p (x#xs) = (p x ∧ todos p xs)&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(1::nat)) [2,6,4]&amp;quot; ― ‹= True›&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(2::nat)) [2,6,4]&amp;quot; ― ‹= False›&lt;br /&gt;
 &lt;br /&gt;
text ‹ --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar que todos los elementos de (copia n x) son&lt;br /&gt;
  iguales a x. &lt;br /&gt;
  ------------------------------------------------------------------- ›&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración automática:›&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración detallada:›&lt;br /&gt;
lemma todos_copia_d: &lt;br /&gt;
  &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
    &lt;br /&gt;
text ‹ --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6.1. Definir, recursivamente y sin usar (@), la función&lt;br /&gt;
     amplia :: &amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (amplia xs y) es la lista obtenida añadiendo el elemento y al&lt;br /&gt;
  final de la lista xs. Por ejemplo,&lt;br /&gt;
     amplia [d,a] t = [d,a,t]&lt;br /&gt;
  ------------------------------------------------------------------ ›&lt;br /&gt;
 &lt;br /&gt;
fun amplia :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;amplia []     y = [y]&amp;quot;&lt;br /&gt;
| &amp;quot;amplia (x#xs) y = x # amplia xs y&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
value &amp;quot;amplia [d,a] t&amp;quot; ― ‹= [d,a,t]›&lt;br /&gt;
 &lt;br /&gt;
text ‹ --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6.2, Demostrar que &lt;br /&gt;
     amplia xs y = xs @ [y]&lt;br /&gt;
  ------------------------------------------------------------------- ›&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración automática:›&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración detallada:›&lt;br /&gt;
lemma amplia_append_d: &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
    &lt;br /&gt;
text ‹ &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función &lt;br /&gt;
     algunos :: (&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (algunos p xs) se verifica si algunos elementos de la lista &lt;br /&gt;
  xs cumplen la propiedad p. Por ejemplo, se verifica &lt;br /&gt;
     algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&lt;br /&gt;
     ¬algunos (λx. 1&amp;lt;length x) [[],[3]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Nota: La función algunos es equivalente a la predefinida list_ex. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
fun algunos  :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;algunos p []     = False&amp;quot;&lt;br /&gt;
| &amp;quot;algunos p (x#xs) = ((p x) ∨ (algunos p xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar o refutar&lt;br /&gt;
     todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
›&lt;br /&gt;
 ― ‹Demostración automática:›&lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración detallada:›&lt;br /&gt;
lemma todos_conj_d: &lt;br /&gt;
  &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
    &lt;br /&gt;
text ‹&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar o refutar&lt;br /&gt;
     todos P (xs @ ys) = (todos P xs ∧ todos P ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración automática:›&lt;br /&gt;
lemma &amp;quot;todos P (xs @ ys) = (todos P xs ∧ todos P ys)&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración detallada:›&lt;br /&gt;
lemma todos_append_d: &amp;quot;todos P (xs @ ys) = (todos P xs ∧ todos P ys)&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar o refutar&lt;br /&gt;
     todos P (rev xs) = todos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración automática:›&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración detallada:›&lt;br /&gt;
lemma todos_rev_d: &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
  &lt;br /&gt;
text ‹&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar o refutar:&lt;br /&gt;
    algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración automática:›&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración detallada:›&lt;br /&gt;
lemma algunos_map_e: &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
  &lt;br /&gt;
text ‹&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración automática:›&lt;br /&gt;
lemma &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración detallada:›&lt;br /&gt;
lemma algunos_append_e: &lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     algunos P (rev xs) = algunos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración automática:›&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración detallada:›&lt;br /&gt;
lemma algunos_rev_e: &lt;br /&gt;
  &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Encontrar un término no trivial Z tal que sea cierta la &lt;br /&gt;
  siguiente ecuación:&lt;br /&gt;
     algunos (λx. P x ∨ Q x) xs = Z&lt;br /&gt;
  y demostrar la equivalencia de forma automática y detallada.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración automática:›&lt;br /&gt;
lemma algunos_no_todos_d: &lt;br /&gt;
  &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
 ― ‹Demostración detallada:›&lt;br /&gt;
lemma algunos_no_todos_e: &lt;br /&gt;
  &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
 text ‹&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.1. Definir la función&lt;br /&gt;
     estaEn :: &amp;#039;a ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (estaEn x xs) se verifica si el elemento x está en la lista&lt;br /&gt;
  xs. Por ejemplo, &lt;br /&gt;
     estaEn (2::nat) [3,2,4] = True&lt;br /&gt;
     estaEn (1::nat) [3,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
›&lt;br /&gt;
&lt;br /&gt;
fun estaEn :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;estaEn x []     = False&amp;quot;&lt;br /&gt;
| &amp;quot;estaEn x (a#xs) = (a=x ∨ estaEn x xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text ‹&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17.2. Expresar la relación existente entre estaEn y algunos. &lt;br /&gt;
  Demostrar dicha relación de forma automática y detallada.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
›&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>