<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/DAO2011/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Maricumpli</id>
	<title>Demostración asistida por ordenador (2011-12) - Contribuciones del usuario [es]</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/DAO2011/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Maricumpli"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/DAO2011/index.php/Especial:Contribuciones/Maricumpli"/>
	<updated>2026-07-18T11:59:16Z</updated>
	<subtitle>Contribuciones del usuario</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.glc.us.es/~jalonso/DAO2011/index.php?title=Relaci%C3%B3n_1&amp;diff=39</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/DAO2011/index.php?title=Relaci%C3%B3n_1&amp;diff=39"/>
		<updated>2011-03-30T19:51:49Z</updated>

		<summary type="html">&lt;p&gt;Maricumpli: amplia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* Razonamiento en Isabelle sobre programas *}&lt;br /&gt;
&lt;br /&gt;
theory Relacion_1&lt;br /&gt;
imports Main Efficient_Nat&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función&lt;br /&gt;
     sumaImpares :: &amp;quot;nat ⇒ nat&amp;quot;&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*(Suc n) - 1)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar que &lt;br /&gt;
     sumaImpares n = n*n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     sumaPotenciasDeDosMasUno :: &amp;quot;nat ⇒ nat&amp;quot;&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^(Suc n)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar que &lt;br /&gt;
     sumaPotenciasDeDosMasUno n = 2^(n+1)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(Suc n)&amp;quot;&lt;br /&gt;
by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     copia :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot;&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 2 = [2,2,2]&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     todos :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&amp;quot;&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. 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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Definir la función&lt;br /&gt;
    factR :: &amp;quot;nat ⇒ nat&amp;quot;&lt;br /&gt;
  tal que (factR n) es el factorial de n. Por ejemplo,&lt;br /&gt;
    factR 4  =  24&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun  factR :: &amp;quot;nat \&amp;lt;Rightarrow&amp;gt; nat&amp;quot; where&lt;br /&gt;
&amp;quot;factR 0 = 1&amp;quot;&lt;br /&gt;
|&amp;quot;factR (Suc n)= (Suc n)* factR n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Se considera la siguiente definición iterativa de la&lt;br /&gt;
  función factorial &lt;br /&gt;
     factI :: Integer -&amp;gt; Integer&lt;br /&gt;
     factI n = factI&amp;#039; n 1&lt;br /&gt;
     &lt;br /&gt;
     factI&amp;#039; :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
     factI&amp;#039; 0     x = x                  -- factI&amp;#039;.1&lt;br /&gt;
     factI&amp;#039; (n+1) x = factI&amp;#039; n (n+1)*x   -- factI&amp;#039;.2&lt;br /&gt;
  Comprobar con QuickCheck que factI y factR son equivalentes sobre los&lt;br /&gt;
  números naturales.&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun factI&amp;#039; :: &amp;quot;nat \&amp;lt;Rightarrow&amp;gt; nat\&amp;lt;Rightarrow&amp;gt; nat&amp;quot; where&lt;br /&gt;
&amp;quot;factI&amp;#039; 0  x  = x&amp;quot;&lt;br /&gt;
|&amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (Suc n)* x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun factI :: &amp;quot;nat \&amp;lt;Rightarrow&amp;gt; nat&amp;quot; where &lt;br /&gt;
&amp;quot;factI n = factI&amp;#039; n 1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;factI = factR&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que, para todo n y todo x, se tiene &lt;br /&gt;
     factI&amp;#039; n x = x * factR n&lt;br /&gt;
  y, como corolario, que&lt;br /&gt;
     factI n = factR n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Definir, recursivamente y sin usar (@). la función&lt;br /&gt;
     amplia :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot;&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 [2,5] 3 = [2,5,3]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
fun amplia :: &amp;quot;&amp;#039;a list \&amp;lt;Rightarrow&amp;gt; &amp;#039;a \&amp;lt;Rightarrow&amp;gt; &amp;#039;a list&amp;quot; where&lt;br /&gt;
&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;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar que &lt;br /&gt;
     amplia xs y = xs @ [y]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maricumpli</name></author>
		
	</entry>
</feed>