Diferencia entre revisiones de «R1»
De Razonamiento automático (2019-20)
(Página creada con «<source lang="isabelle"> chapter {* R1: Programación funcional en Isabelle *} theory R1_Programacion_funcional_en_Isabelle imports Main begin text {* ------------------…») |
|||
(No se muestra una edición intermedia del mismo usuario) | |||
Línea 1: | Línea 1: | ||
<source lang="isabelle"> | <source lang="isabelle"> | ||
chapter | chapter ‹ R1: Programación funcional en Isabelle › | ||
theory R1_Programacion_funcional_en_Isabelle | theory R1_Programacion_funcional_en_Isabelle | ||
Línea 6: | Línea 6: | ||
begin | begin | ||
text | text ‹ ---------------------------------------------------------------- | ||
Ejercicio 1. Definir, por recursión, la función | Ejercicio 1. Definir, por recursión, la función | ||
longitud :: 'a list ⇒ nat | longitud :: 'a list ⇒ nat | ||
tal que (longitud xs) es la longitud de la listas xs. Por ejemplo, | tal que (longitud xs) es la longitud de la listas xs. Por ejemplo, | ||
longitud [a,b,c] = 3 | longitud [a,b,c] = 3 | ||
------------------------------------------------------------------- | ------------------------------------------------------------------- › | ||
fun longitud :: "'a list ⇒ nat" where | fun longitud :: "'a list ⇒ nat" where | ||
Línea 18: | Línea 18: | ||
value "longitud [a,b,c] = 3" | value "longitud [a,b,c] = 3" | ||
text | text ‹ --------------------------------------------------------------- | ||
Ejercicio 2. Definir la función | Ejercicio 2. Definir la función | ||
fun intercambia :: 'a × 'b ⇒ 'b × 'a | fun intercambia :: 'a × 'b ⇒ 'b × 'a | ||
Línea 24: | Línea 24: | ||
componentes del par p. Por ejemplo, | componentes del par p. Por ejemplo, | ||
intercambia (u,v) = (v,u) | intercambia (u,v) = (v,u) | ||
------------------------------------------------------------------ | ------------------------------------------------------------------ › | ||
fun intercambia :: "'a × 'b ⇒ 'b × 'a" where | fun intercambia :: "'a × 'b ⇒ 'b × 'a" where | ||
Línea 31: | Línea 31: | ||
value "intercambia (u,v) = (v,u)" | value "intercambia (u,v) = (v,u)" | ||
text | text ‹ --------------------------------------------------------------- | ||
Ejercicio 3. Definir, por recursión, la función | Ejercicio 3. Definir, por recursión, la función | ||
inversa :: 'a list ⇒ 'a list | inversa :: 'a list ⇒ 'a list | ||
Línea 37: | Línea 37: | ||
elementos de xs. Por ejemplo, | elementos de xs. Por ejemplo, | ||
inversa [a,d,c] = [c,d,a] | inversa [a,d,c] = [c,d,a] | ||
------------------------------------------------------------------ | ------------------------------------------------------------------ › | ||
fun inversa :: "'a list ⇒ 'a list" where | fun inversa :: "'a list ⇒ 'a list" where | ||
Línea 44: | Línea 44: | ||
value "inversa [a,d,c] = [c,d,a]" | value "inversa [a,d,c] = [c,d,a]" | ||
text | text ‹ --------------------------------------------------------------- | ||
Ejercicio 4. Definir la función | Ejercicio 4. Definir la función | ||
repite :: nat ⇒ 'a ⇒ 'a list | repite :: nat ⇒ 'a ⇒ 'a list | ||
Línea 50: | Línea 50: | ||
x. Por ejemplo, | x. Por ejemplo, | ||
repite 3 a = [a,a,a] | repite 3 a = [a,a,a] | ||
------------------------------------------------------------------ | ------------------------------------------------------------------ › | ||
fun repite :: "nat ⇒ 'a ⇒ 'a list" where | fun repite :: "nat ⇒ 'a ⇒ 'a list" where | ||
Línea 57: | Línea 57: | ||
value "repite 3 a = [a,a,a]" | value "repite 3 a = [a,a,a]" | ||
text | text ‹ --------------------------------------------------------------- | ||
Ejercicio 5. Definir la función | Ejercicio 5. Definir la función | ||
conc :: 'a list ⇒ 'a list ⇒ 'a list | conc :: 'a list ⇒ 'a list ⇒ 'a list | ||
Línea 63: | Línea 63: | ||
ejemplo, | ejemplo, | ||
conc [a,d] [b,d,a,c] = [a,d,b,d,a,c] | conc [a,d] [b,d,a,c] = [a,d,b,d,a,c] | ||
------------------------------------------------------------------ | ------------------------------------------------------------------ › | ||
fun conc :: "'a list ⇒ 'a list ⇒ 'a list" where | fun conc :: "'a list ⇒ 'a list ⇒ 'a list" where | ||
Línea 70: | Línea 70: | ||
value "conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]" | value "conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]" | ||
text | text ‹ --------------------------------------------------------------- | ||
Ejercicio 6. Definir la función | Ejercicio 6. Definir la función | ||
coge :: nat ⇒ 'a list ⇒ 'a list | coge :: nat ⇒ 'a list ⇒ 'a list | ||
Línea 76: | Línea 76: | ||
ejemplo, | ejemplo, | ||
coge 2 [a,c,d,b,e] = [a,c] | coge 2 [a,c,d,b,e] = [a,c] | ||
------------------------------------------------------------------ | ------------------------------------------------------------------ › | ||
fun coge :: "nat ⇒ 'a list ⇒ 'a list" where | fun coge :: "nat ⇒ 'a list ⇒ 'a list" where | ||
Línea 83: | Línea 83: | ||
value "coge 2 [a,c,d,b,e] = [a,c]" | value "coge 2 [a,c,d,b,e] = [a,c]" | ||
text | text ‹ --------------------------------------------------------------- | ||
Ejercicio 7. Definir la función | Ejercicio 7. Definir la función | ||
elimina :: nat ⇒ 'a list ⇒ 'a list | elimina :: nat ⇒ 'a list ⇒ 'a list | ||
Línea 89: | Línea 89: | ||
elementos de xs. Por ejemplo, | elementos de xs. Por ejemplo, | ||
elimina 2 [a,c,d,b,e] = [d,b,e] | elimina 2 [a,c,d,b,e] = [d,b,e] | ||
------------------------------------------------------------------ | ------------------------------------------------------------------ › | ||
fun elimina :: "nat ⇒ 'a list ⇒ 'a list" where | fun elimina :: "nat ⇒ 'a list ⇒ 'a list" where | ||
Línea 96: | Línea 96: | ||
value "elimina 2 [a,c,d,b,e] = [d,b,e]" | value "elimina 2 [a,c,d,b,e] = [d,b,e]" | ||
text | text ‹ --------------------------------------------------------------- | ||
Ejercicio 8. Definir la función | Ejercicio 8. Definir la función | ||
esVacia :: 'a list ⇒ bool | esVacia :: 'a list ⇒ bool | ||
tal que (esVacia xs) se verifica si xs es la lista vacía. Por ejemplo, | tal que (esVacia xs) se verifica si xs es la lista vacía. Por ejemplo, | ||
esVacia [a] = False | esVacia [a] = False | ||
------------------------------------------------------------------ | ------------------------------------------------------------------ › | ||
fun esVacia :: "'a list ⇒ bool" where | fun esVacia :: "'a list ⇒ bool" where | ||
Línea 108: | Línea 108: | ||
value "esVacia [a] = False" | value "esVacia [a] = False" | ||
text | text ‹ --------------------------------------------------------------- | ||
Ejercicio 9. Definir la función | Ejercicio 9. Definir la función | ||
inversaAc :: 'a list ⇒ 'a list | inversaAc :: 'a list ⇒ 'a list | ||
Línea 114: | Línea 114: | ||
acumuladores. Por ejemplo, | acumuladores. Por ejemplo, | ||
inversaAc [a,c,b,e] = [e,b,c,a] | inversaAc [a,c,b,e] = [e,b,c,a] | ||
------------------------------------------------------------------ | ------------------------------------------------------------------ › | ||
fun inversaAcAux :: "'a list ⇒ 'a list ⇒ 'a list" where | fun inversaAcAux :: "'a list ⇒ 'a list ⇒ 'a list" where | ||
Línea 124: | Línea 124: | ||
value "inversaAc [a,c,b,e] = [e,b,c,a]" | value "inversaAc [a,c,b,e] = [e,b,c,a]" | ||
text | text ‹ --------------------------------------------------------------- | ||
Ejercicio 10. Definir la función | Ejercicio 10. Definir la función | ||
sum :: nat list ⇒ nat | sum :: nat list ⇒ nat | ||
tal que (sum xs) es la suma de los elementos de xs. Por ejemplo, | tal que (sum xs) es la suma de los elementos de xs. Por ejemplo, | ||
sum [3,2,5] = 10 | sum [3,2,5] = 10 | ||
------------------------------------------------------------------ | ------------------------------------------------------------------ › | ||
fun sum :: "nat list ⇒ nat" where | fun sum :: "nat list ⇒ nat" where | ||
"sum xs = undefined" | "sum xs = undefined" | ||
text | text ‹ --------------------------------------------------------------- | ||
Ejercicio 11. Definir la función | Ejercicio 11. Definir la función | ||
map :: ('a ⇒ 'b) ⇒ 'a list ⇒ 'b list | map :: ('a ⇒ 'b) ⇒ 'a list ⇒ 'b list | ||
Línea 140: | Línea 140: | ||
elementos de xs. Por ejemplo, | elementos de xs. Por ejemplo, | ||
map (λx. 2*x) [3,2,5] = [6,4,10] | map (λx. 2*x) [3,2,5] = [6,4,10] | ||
------------------------------------------------------------------ | ------------------------------------------------------------------ › | ||
fun map :: "('a ⇒ 'b) ⇒ 'a list ⇒ 'b list" where | fun map :: "('a ⇒ 'b) ⇒ 'a list ⇒ 'b list" where |
Revisión actual del 14:44 31 oct 2019
chapter ‹ R1: Programación funcional en Isabelle ›
theory R1_Programacion_funcional_en_Isabelle
imports Main
begin
text ‹ ----------------------------------------------------------------
Ejercicio 1. Definir, por recursión, la función
longitud :: 'a list ⇒ nat
tal que (longitud xs) es la longitud de la listas xs. Por ejemplo,
longitud [a,b,c] = 3
------------------------------------------------------------------- ›
fun longitud :: "'a list ⇒ nat" where
"longitud xs = undefined"
value "longitud [a,b,c] = 3"
text ‹ ---------------------------------------------------------------
Ejercicio 2. Definir la función
fun intercambia :: 'a × 'b ⇒ 'b × 'a
tal que (intercambia p) es el par obtenido intercambiando las
componentes del par p. Por ejemplo,
intercambia (u,v) = (v,u)
------------------------------------------------------------------ ›
fun intercambia :: "'a × 'b ⇒ 'b × 'a" where
"intercambia (x,y) = undefined"
value "intercambia (u,v) = (v,u)"
text ‹ ---------------------------------------------------------------
Ejercicio 3. Definir, por recursión, la función
inversa :: 'a list ⇒ 'a list
tal que (inversa xs) es la lista obtenida invirtiendo el orden de los
elementos de xs. Por ejemplo,
inversa [a,d,c] = [c,d,a]
------------------------------------------------------------------ ›
fun inversa :: "'a list ⇒ 'a list" where
"inversa xs = undefined"
value "inversa [a,d,c] = [c,d,a]"
text ‹ ---------------------------------------------------------------
Ejercicio 4. Definir la función
repite :: nat ⇒ 'a ⇒ 'a list
tal que (repite n x) es la lista formada por n copias del elemento
x. Por ejemplo,
repite 3 a = [a,a,a]
------------------------------------------------------------------ ›
fun repite :: "nat ⇒ 'a ⇒ 'a list" where
"repite n x = undefined"
value "repite 3 a = [a,a,a]"
text ‹ ---------------------------------------------------------------
Ejercicio 5. Definir la función
conc :: 'a list ⇒ 'a list ⇒ 'a list
tal que (conc xs ys) es la concatención de las listas xs e ys. Por
ejemplo,
conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]
------------------------------------------------------------------ ›
fun conc :: "'a list ⇒ 'a list ⇒ 'a list" where
"conc xs ys = undefined"
value "conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]"
text ‹ ---------------------------------------------------------------
Ejercicio 6. Definir la función
coge :: nat ⇒ 'a list ⇒ 'a list
tal que (coge n xs) es la lista de los n primeros elementos de xs. Por
ejemplo,
coge 2 [a,c,d,b,e] = [a,c]
------------------------------------------------------------------ ›
fun coge :: "nat ⇒ 'a list ⇒ 'a list" where
"coge n xs = undefined"
value "coge 2 [a,c,d,b,e] = [a,c]"
text ‹ ---------------------------------------------------------------
Ejercicio 7. Definir la función
elimina :: nat ⇒ 'a list ⇒ 'a list
tal que (elimina n xs) es la lista obtenida eliminando los n primeros
elementos de xs. Por ejemplo,
elimina 2 [a,c,d,b,e] = [d,b,e]
------------------------------------------------------------------ ›
fun elimina :: "nat ⇒ 'a list ⇒ 'a list" where
"elimina n xs = undefined"
value "elimina 2 [a,c,d,b,e] = [d,b,e]"
text ‹ ---------------------------------------------------------------
Ejercicio 8. Definir la función
esVacia :: 'a list ⇒ bool
tal que (esVacia xs) se verifica si xs es la lista vacía. Por ejemplo,
esVacia [a] = False
------------------------------------------------------------------ ›
fun esVacia :: "'a list ⇒ bool" where
"esVacia xs = undefined"
value "esVacia [a] = False"
text ‹ ---------------------------------------------------------------
Ejercicio 9. Definir la función
inversaAc :: 'a list ⇒ 'a list
tal que (inversaAc xs) es a inversa de xs calculada usando
acumuladores. Por ejemplo,
inversaAc [a,c,b,e] = [e,b,c,a]
------------------------------------------------------------------ ›
fun inversaAcAux :: "'a list ⇒ 'a list ⇒ 'a list" where
"inversaAcAux xs ys = undefined"
fun inversaAc :: "'a list ⇒ 'a list" where
"inversaAc xs = undefined"
value "inversaAc [a,c,b,e] = [e,b,c,a]"
text ‹ ---------------------------------------------------------------
Ejercicio 10. Definir la función
sum :: nat list ⇒ nat
tal que (sum xs) es la suma de los elementos de xs. Por ejemplo,
sum [3,2,5] = 10
------------------------------------------------------------------ ›
fun sum :: "nat list ⇒ nat" where
"sum xs = undefined"
text ‹ ---------------------------------------------------------------
Ejercicio 11. Definir la función
map :: ('a ⇒ 'b) ⇒ 'a list ⇒ 'b list
tal que (map f xs) es la lista obtenida aplicando la función f a los
elementos de xs. Por ejemplo,
map (λx. 2*x) [3,2,5] = [6,4,10]
------------------------------------------------------------------ ›
fun map :: "('a ⇒ 'b) ⇒ 'a list ⇒ 'b list" where
"map f xs = undefined"
end