Acciones

Examen 2C

De Lógica matemática y fundamentos [Curso 2019-20]

text Examen de Lógica Matemática y Fundamentos (9-septiembre-2020)

theory examen_9_sep
imports Main 
begin

text 
  Apellidos:
  Nombre: 
 

text Sustituye la palabra examen_9_sep por tu usuario de la Universidad 
  de Sevilla y graba el fichero con dicho usuario.thy 

text Nota 1: El tiempo de realización del ejercicio es de 9:30 a 11:30. 

text Nota 2: Además de las reglas básicas de deducción natural de la 
  lógica proposicional y de primer orden, también se pueden usar las 
  reglas notnotI y mt que demostramos a  continuación.

lemma notnotI: "P ⟹ ¬¬ P"
  by auto

lemma mt: "⟦F ⟶ G; ¬G⟧ ⟹ ¬F"
by auto

text ------------------------------------------------------------------ 
  Ejercicio 1. (2.5 puntos) Demostrar detalladamente con Isabelle, 
  sin usar métodos automáticos (como simp, auto, ...) sino sólo las 
  reglas básicas, que el siguiente argumento es correcto:
  Ningún individuo que sea candidato será derrotado si hace una
  buena campaña. Todo individuo que se postula es un candidato. Cualquier
  candidato que no sea derrotado, será elegido. Todo individuo que sea
  elegido hace una buena campaña. Por tanto, todo individuo que se 
  postula será elegido si y sólo si hace una buena campaña. 

  Simbología: I(x): x es individuo, C(x): x es candidato,
              D(x): x es derrotado, B(x): x hace una buena campaña, 
              P(x): x se postula, E(x): x es elegido. 
---------------------------------------------------------------------
   


text  -----------------------------------------------------------------
  Ejercicio 2. (2.5 puntos) Consideramos la función
     menores :: int  int list  bool
  tal que (menores a xs) es la lista de los elementos de la lista xs que 
  son menores que a. Por ejemplo,
     value "menores 2 [3,0,1] = [0,1]"
     value "menores 2 [3,0,5] = [0]"
  
  fun menores :: "int ⇒ int list ⇒ int list" where
    "menores a []     = []"
  | "menores a (x#xs) = (if x < a then x # (menores a xs)
                                else (menores a xs))"
 
  Demostrar que la longitud de la lista de elementos menores que uno 
  dado es menor o igual que la longitud de la lista original.
-----------------------------------------------------------------------
 
fun menores :: "int ⇒ int list ⇒ int list" where
  "menores a []     = []"
| "menores a (x#xs) = (if x < a then x # (menores a xs)
                                else (menores a xs))"
 
value "menores 2 [3,0,1] = [0,1]"
value "menores 2 [3,0,5] = [0]"
 
lemma menores_menor:
  "length (menores x xs) < 1 + (length xs)"
  oops


text ------------------------------------------------------------------
  Ejercicio 3. (2.5 puntos) Sea G un grupo. Demostrar que si se verifica
   x y. (((y^  x^)  y)  x = 𝟭), entonces también se verifica
   x. y. z. x  y = z  x  y = z

  Nota: No usar ninguno de los métodos automáticos: auto, blast, force,
  fast, arith o metis 
  ------------------------------------------------------------------ 

locale grupo =
  fixes prod :: "['a, 'a] ⇒ 'a" (infixl "⋅" 70)
    and neutro ("𝟭") 
    and inverso ("_^" [100] 100)
  assumes asociativa: "(x ⋅ y) ⋅ z = x ⋅ (y ⋅ z)"
      and neutro_i:   "𝟭 ⋅ x = x"
      and neutro_d:   "x ⋅ 𝟭 = x"
      and inverso_d:  "x ⋅ x^ = 𝟭"

(* Notas sobre notación:
   * El producto es ⋅ y se escribe con \ cdot (sin espacio entre ellos). 
   * El neutro es 𝟭 y se escribe con \ y one (sin espacio entre ellos).
   * El inverso de x es x^ y se escribe pulsando 2 veces en ^. *)

context grupo
begin

lemma
  assumes  "((y^ ⋅ x^) ⋅ y) ⋅ x = 𝟭"
  shows "x ⋅ y = z ⋅ x ⟶ y = z"
  oops  

end

text -----------------------------------------------------------------
 Ejercicio 4. (2.5 puntos) El conjunto de los conjuntos finitos 
 se define inductivamente por
    inductive_set Finito :: "'a set set"
      where
        vacioI:   "{} ∈ Finito" |
        insertaI: "A ∈ Finito ⟹ insert a A ∈ Finito"

 Demostrar detalladamente que la unión de dos conjuntos finitos es 
 finito; es decir.
      A  Finito; B  Finito   A  B  Finito

 Nota: Los únicos métodos que se pueden usar son induct y 
 (simp only: ...).  
 ---------------------------------------------------------------------

inductive_set Finito :: "'a set set"
  where
    vacioI:   "{} ∈ Finito" |
    insertaI: "A ∈ Finito ⟹ insert a A ∈ Finito"


lemma "⟦ A ∈ Finito; B ∈ Finito ⟧ ⟹ A ∪ B ∈ Finito"
  oops

end