Acciones

Diferencia entre revisiones de «Relación 6»

De Razonamiento automático (2014-15)

m (Texto reemplazado: «"isar"» por «"isabelle"»)
 
(No se muestran 2 ediciones intermedias de otro usuario)
Línea 1: Línea 1:
<source lang="isar">
+
<source lang="isabelle">
 
header {* R6: Sustitución, inversión y eliminación *}
 
header {* R6: Sustitución, inversión y eliminación *}
  
Línea 20: Línea 20:
 
*}
 
*}
  
--"jeshorcob, emimarriv,davoremar,juacorvic,marnajgom"
+
--"jeshorcob, emimarriv,davoremar,juacorvic,marnajgom, domcadgom"
 
fun sust :: "'a ⇒ 'a ⇒ 'a list ⇒ 'a list" where
 
fun sust :: "'a ⇒ 'a ⇒ 'a list ⇒ 'a list" where
 
   "sust x y [] = []"
 
   "sust x y [] = []"
Línea 34: Línea 34:
 
*}
 
*}
  
--"jeshorcob, emimarriv,davoremar,juacorvic,marnajgom"
+
--"jeshorcob, emimarriv,davoremar,juacorvic,marnajgom, domcadgom"
 
lemma sust_append:  
 
lemma sust_append:  
 
   "sust x y (xs@ys) = (sust x y xs)@(sust x y ys)"
 
   "sust x y (xs@ys) = (sust x y xs)@(sust x y ys)"
Línea 48: Línea 48:
 
*}
 
*}
  
--"jeshorcob,davoremar,marnajgom"
+
--"jeshorcob,davoremar,marnajgom, domcadgom"
 
lemma rev_sust:  
 
lemma rev_sust:  
 
   "rev(sust x y zs) = sust x y (rev zs)"
 
   "rev(sust x y zs) = sust x y (rev zs)"
Línea 66: Línea 66:
 
*}
 
*}
  
--"jeshorcob,davoremar,juacorvic,marnajgom"
+
--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
 
lemma "sust x y (sust u v zs) = sust u v (sust x y zs)"
 
lemma "sust x y (sust u v zs) = sust u v (sust x y zs)"
 
quickcheck
 
quickcheck
Línea 84: Línea 84:
 
*}
 
*}
  
--"jeshorcob,davoremar,juacorvic,marnajgom"
+
--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
 
lemma "sust y z (sust x y zs) = sust x z zs"
 
lemma "sust y z (sust x y zs) = sust x z zs"
 
quickcheck
 
quickcheck
Línea 107: Línea 107:
 
*}
 
*}
  
--"jeshorcob,davoremar,juacorvic,marnajgom"
+
--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
 
fun borra :: "'a ⇒ 'a list ⇒ 'a list" where
 
fun borra :: "'a ⇒ 'a list ⇒ 'a list" where
 
   "borra x [] = []"
 
   "borra x [] = []"
Línea 124: Línea 124:
 
*}
 
*}
  
--"jeshorcob,davoremar,juacorvic,marnajgom"
+
--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
 
fun borraTodas :: "'a ⇒ 'a list ⇒ 'a list" where
 
fun borraTodas :: "'a ⇒ 'a list ⇒ 'a list" where
 
   "borraTodas x [] = []"
 
   "borraTodas x [] = []"
Línea 139: Línea 139:
 
*}
 
*}
  
--"jeshorcob,davoremar,juacorvic,marnajgom"
+
--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
 
lemma l1: "borra x (borraTodas x xs) = borraTodas x xs"
 
lemma l1: "borra x (borraTodas x xs) = borraTodas x xs"
 
by (induct xs, simp_all)
 
by (induct xs, simp_all)
Línea 150: Línea 150:
 
*}
 
*}
  
--"jeshorcob,davoremar,juacorvic,marnajgom"
+
--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
 
lemma "borraTodas x (borraTodas x xs) = borraTodas x xs"
 
lemma "borraTodas x (borraTodas x xs) = borraTodas x xs"
 
by (induct xs, simp_all)
 
by (induct xs, simp_all)
Línea 161: Línea 161:
 
*}
 
*}
  
--"jeshorcob,davoremar,juacorvic,marnajgom"
+
--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
 
lemma borraTodas_borra:  
 
lemma borraTodas_borra:  
 
   "borraTodas x (borra x xs) = borraTodas x xs"
 
   "borraTodas x (borra x xs) = borraTodas x xs"
Línea 173: Línea 173:
 
*}
 
*}
  
--"jeshorcob,davoremar,juacorvic,marnajgom"
+
--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
 
lemma "borra x (borra y xs) = borra y (borra x xs)"
 
lemma "borra x (borra y xs) = borra y (borra x xs)"
 
by (induct xs, simp_all)
 
by (induct xs, simp_all)
Línea 200: Línea 200:
 
*}
 
*}
  
--"jeshorcob,davoremar,juacorvic,marnajgom"
+
--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
 
lemma "borra y (sust x y xs) = borra x xs"
 
lemma "borra y (sust x y xs) = borra x xs"
 
quickcheck
 
quickcheck
Línea 217: Línea 217:
 
*}
 
*}
  
--"jeshorcob,davoremar,juacorvic,marnajgom"
+
--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
 
lemma "borraTodas y (sust x y xs) = borraTodas x xs"
 
lemma "borraTodas y (sust x y xs) = borraTodas x xs"
 
quickcheck
 
quickcheck
Línea 234: Línea 234:
 
*}
 
*}
  
--"jeshorcob,davoremar,juacorvic,marnajgom"
+
--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
 
lemma "sust x y (borraTodas x zs) = borraTodas x zs"
 
lemma "sust x y (borraTodas x zs) = borraTodas x zs"
 
by (induct zs, simp_all)
 
by (induct zs, simp_all)
Línea 245: Línea 245:
 
*}
 
*}
  
--"jeshorcob,davoremar,juacorvic,marnajgom"
+
--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
 
lemma "sust x y (borraTodas z zs) = borraTodas z (sust x y zs)"
 
lemma "sust x y (borraTodas z zs) = borraTodas z (sust x y zs)"
 
quickcheck
 
quickcheck
Línea 263: Línea 263:
 
*}
 
*}
  
--"jeshorcob,davoremar,juacorvic,marnajgom"
+
--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
 
lemma "rev (borra x xs) = borra x (rev xs)"
 
lemma "rev (borra x xs) = borra x (rev xs)"
 
quickcheck
 
quickcheck
Línea 279: Línea 279:
 
*}
 
*}
  
--"jeshorcob,davoremar,juacorvic,marnajgom"
+
--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
 
lemma borraTodas_append:
 
lemma borraTodas_append:
 
   "borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)"
 
   "borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)"
Línea 291: Línea 291:
 
*}
 
*}
  
--"jeshorcob,davoremar,juacorvic,marnajgom"
+
--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
 
lemma "rev (borraTodas x xs) = borraTodas x (rev xs)"
 
lemma "rev (borraTodas x xs) = borraTodas x (rev xs)"
 
by (induct xs, simp_all add: borraTodas_append)
 
by (induct xs, simp_all add: borraTodas_append)

Revisión actual del 10:23 16 jul 2018

header {* R6: Sustitución, inversión y eliminación *}

theory R6
imports Main 
begin

text {*
  Nota: En esta relación se pide hacer las demostraciones de forma 
  automática. *} 

text {* 
  --------------------------------------------------------------------- 
  Ejercicio 1. Definir la función 
     sust :: "'a ⇒ 'a ⇒ 'a list ⇒ 'a list"
  tal que (sust x y zs) es la lista obtenida sustituyendo cada
  occurrencia de x por y en la lista zs. Por ejemplo,
     sust (1::int) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]
  --------------------------------------------------------------------- 
*}

--"jeshorcob, emimarriv,davoremar,juacorvic,marnajgom, domcadgom"
fun sust :: "'a ⇒ 'a ⇒ 'a list ⇒ 'a list" where
  "sust x y [] = []"
 |"sust x y (z#zs) = (if z = x then y#(sust x y zs) else z#(sust x y zs))"

value "sust (1::int) 2 [1,2,3,4,1,2,3,4]" -- "= [2,2,3,4,2,2,3,4]"

text {*
  --------------------------------------------------------------------- 
  Ejercicio 2. Demostrar o refutar 
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)"
  ---------------------------------------------------------------------  
*}

--"jeshorcob, emimarriv,davoremar,juacorvic,marnajgom, domcadgom"
lemma sust_append: 
  "sust x y (xs@ys) = (sust x y xs)@(sust x y ys)"
by (induct xs) auto 

(*Pedrosrei: no es necesario auto, sirve simp_all*)

text {*
  --------------------------------------------------------------------- 
  Ejercicio 3. Demostrar o refutar 
     rev (sust x y zs) = sust x y (rev zs)
  --------------------------------------------------------------------- 
*}

--"jeshorcob,davoremar,marnajgom, domcadgom"
lemma rev_sust: 
  "rev(sust x y zs) = sust x y (rev zs)"
by (induct zs, simp_all add: sust_append)


--"juacorvic"
lemma rev_sust2: 
  "rev(sust x y zs) = sust x y (rev zs)"
by (induct zs) (auto simp add:sust_append)

text {*
  --------------------------------------------------------------------- 
  Ejercicio 4. Demostrar o refutar:
     sust x y (sust u v zs) = sust u v (sust x y zs)
  --------------------------------------------------------------------- 
*}

--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
lemma "sust x y (sust u v zs) = sust u v (sust x y zs)"
quickcheck
oops
(*Encuentra el contraejemplo:
x = a⇩1
y = a⇩2
u = a⇩2
v = a⇩1
zs = [a⇩1]
*)
text {*
  --------------------------------------------------------------------- 
  Ejercicio 5. Demostrar o refutar:
     sust y z (sust x y zs) = sust x z zs
  --------------------------------------------------------------------- 
*}

--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
lemma "sust y z (sust x y zs) = sust x z zs"
quickcheck
oops
(*Encuentra el contraejemplo:
y = a⇩1
z = a⇩2
x = a⇩2
zs = [a⇩1]
*)

text {*
  --------------------------------------------------------------------- 
  Ejercicio 6. Definir la función
     borra :: "'a ⇒ 'a list ⇒ 'a list"
  tal que (borra x ys) es la lista obtenida borrando la primera
  ocurrencia del elemento x en la lista ys. Por ejemplo,
     borra (2::int) [1,2,3,2] = [1,3,2]

  Nota: La función borra es equivalente a la predefinida remove1. 
  --------------------------------------------------------------------- 
*}

--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
fun borra :: "'a ⇒ 'a list ⇒ 'a list" where
  "borra x [] = []"
 |"borra x (y#ys) = (if y=x then ys else y#borra x ys)"

value "borra (2::int) [1,2,3,2]" -- "= [1,3,2]"

text {* 
  --------------------------------------------------------------------- 
  Ejercicio 7. Definir la función
     borraTodas :: "'a ⇒ 'a list ⇒ 'a list"
  tal que (borraTodas x ys) es la lista obtenida borrando todas las
  ocurrencias del elemento x en la lista ys. Por ejemplo,
     borraTodas (2::int) [1,2,3,2] = [1,3]
  --------------------------------------------------------------------- 
*}

--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
fun borraTodas :: "'a ⇒ 'a list ⇒ 'a list" where
  "borraTodas x [] = []"
 |"borraTodas x (y#ys) = (if y = x then borraTodas x ys 
                                   else y#borraTodas x ys)"

value "borraTodas (2::int) [1,2,3,2]" -- "= [1,3]"

text {*
  --------------------------------------------------------------------- 
  Ejercicio 8. Demostrar o refutar 
     borra x (borraTodas x xs) = borraTodas x xs
  --------------------------------------------------------------------- 
*}

--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
lemma l1: "borra x (borraTodas x xs) = borraTodas x xs"
by (induct xs, simp_all)

text {*
  --------------------------------------------------------------------- 
  Ejercicio 9. Demostrar o refutar 
     borraTodas x (borraTodas x xs) = borraTodas x xs
  --------------------------------------------------------------------- 
*}

--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
lemma "borraTodas x (borraTodas x xs) = borraTodas x xs"
by (induct xs, simp_all)

text {*
  --------------------------------------------------------------------- 
  Ejercicio 10. Demostrar o refutar automáticamente
     borraTodas x (borra x xs) = borraTodas x xs
  --------------------------------------------------------------------- 
*}

--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
lemma borraTodas_borra: 
  "borraTodas x (borra x xs) = borraTodas x xs"
by (induct xs, simp_all)

text {*
  --------------------------------------------------------------------- 
  Ejercicio 11. Demostrar o refutar 
     borra x (borra y xs) = borra y (borra x xs)
  --------------------------------------------------------------------- 
*}

--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
lemma "borra x (borra y xs) = borra y (borra x xs)"
by (induct xs, simp_all)

text {*
  --------------------------------------------------------------------- 
  Ejercicio 12. Demostrar o refutar automáticamente
     borraTodas x (borra y xs) = borra y (borraTodas x xs)
  --------------------------------------------------------------------- 
*}

--"jeshorcob,juacorvic"
lemma "borraTodas x (borra y xs) = borra y (borraTodas x xs)"
by (induct xs, simp_all add: l1)

--"davoremar"
lemma "borraTodas x (borra y xs) = borra y (borraTodas x xs)"
by (induct xs, simp_all add: borraTodas_borra) 
(*Pedrosrei: me da fallo esta última con simp_all pero no con auto *)

text {*
  --------------------------------------------------------------------- 
  Ejercicio 13. Demostrar o refutar:
     borra y (sust x y xs) = borra x xs
  --------------------------------------------------------------------- 
*}

--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
lemma "borra y (sust x y xs) = borra x xs"
quickcheck
oops
(* Encuentra el contraejemplo:
y = a⇩1
x = a⇩2
xs = [a⇩1]
*)

text {*
  --------------------------------------------------------------------- 
  Ejercicio 14. Demostrar o refutar:
     borraTodas y (sust x y xs) = borraTodas x xs"
  --------------------------------------------------------------------- 
*}

--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
lemma "borraTodas y (sust x y xs) = borraTodas x xs"
quickcheck
oops
(* Encuentra el contraejemplo:
y = a⇩1
x = a⇩2
xs = [a⇩1]
*)

text {*
  --------------------------------------------------------------------- 
  Ejercicio 15. Demostrar o refutar 
     sust x y (borraTodas x zs) = borraTodas x zs
  --------------------------------------------------------------------- 
*}

--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
lemma "sust x y (borraTodas x zs) = borraTodas x zs"
by (induct zs, simp_all)

text {*
  --------------------------------------------------------------------- 
  Ejercicio 16. Demostrar o refutar
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)
  --------------------------------------------------------------------- 
*}

--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
lemma "sust x y (borraTodas z zs) = borraTodas z (sust x y zs)"
quickcheck
oops
(* Encuentra el contraejemplo:
x = a⇩1
y = a⇩2
z = a⇩1
zs = [a⇩1]
*)

text {*
  --------------------------------------------------------------------- 
  Ejercicio 17. Demostrar o refutar:
     rev (borra x xs) = borra x (rev xs)
  --------------------------------------------------------------------- 
*}

--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
lemma "rev (borra x xs) = borra x (rev xs)"
quickcheck
oops
(* Encuentra el contraejemplo:
x = a⇩1
xs = [a⇩1, a⇩2, a⇩1]
*)

text {*
  --------------------------------------------------------------------- 
  Ejercicio 18. Demostrar o refutar 
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)
  --------------------------------------------------------------------- 
*}

--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
lemma borraTodas_append:
  "borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)"
by (induct xs, simp_all)

text {*
  --------------------------------------------------------------------- 
  Ejercicio 19. Demostrar o refutar 
     rev (borraTodas x xs) = borraTodas x (rev xs)
  --------------------------------------------------------------------- 
*}

--"jeshorcob,davoremar,juacorvic,marnajgom, domcadgom"
lemma "rev (borraTodas x xs) = borraTodas x (rev xs)"
by (induct xs, simp_all add: borraTodas_append)


end