(* La_dama_o_el_tigre.thy La dama o el tigre. José A. Alonso Jiménez Sevilla, 12-marzo-2020 ================================================================== *) (* --------------------------------------------------------------------- En el libro de Raymond Smullyan *\La dama o el tigre?* (en inglés, [The lady or the tiger?](https://books.google.es/books?id=v9zQ2jvETgAC)) se plantea el siguiente problema Un rey somete a un prisionero a la siguiente prueba: lo enfrenta a dos puertas, de las que el prisionero debe elegir una, y entrar la en habitación correspondiente. Se informa al prisionero que en cada una de las habitaciones puede haber un tigre o una dama. Como es natural, el prisionero debe elegir la puerta que le lleva a la dama (entre otras cosas, para no ser devorado por el tigre). Para ayudarle, en cada puerta hay un letrero. El de la puerta 1 dice "en esta habitación hay una dama y en la otra un tigre" y el de la puerta 2 dice "en una de estas habitaciones hay una dama y en una de estas habitaciones hay un tigre". Sabiendo que uno de los carteles dice la verdad y el otro no, demostrar que la dama se encuentra en la segunda habitación, completando la siguiente teoría theory La_dama_o_el_tigre imports Main begin lemma assumes "c1 \ dp \ ts" "c2 \ (dp \ ts) \ (ds \ tp)" "(c1 \ \ c2) \ (c2 \ \ c1)" shows "ds" oops end donde se han usado los siguientes símbolos: + c1 que representa "el contenido del cartel de la puerta 1", + c2 que representa "el contenido del cartel de la puerta 2", + dp que representa "hay una dama en la primera habitación", + tp que representa "hay un tigre en la primera habitación", + ds que representa "hay una dama en la segunda habitación" y + ts que representa "hay un tigre en la segunda habitación". ------------------------------------------------------------------- *) theory La_dama_o_el_tigre imports Main begin (* 1\ demostración *) lemma assumes "c1 \ dp \ ts" "c2 \ (dp \ ts) \ (ds \ tp)" "(c1 \ \ c2) \ (c2 \ \ c1)" shows "ds" using assms by auto (* 2\ demostración *) lemma assumes "c1 \ dp \ ts" "c2 \ (dp \ ts) \ (ds \ tp)" "(c1 \ \ c2) \ (c2 \ \ c1)" shows "ds" proof - note \(c1 \ \ c2) \ (c2 \ \ c1)\ then show "ds" proof assume "c1 \ \ c2" then have "c1" .. with \c1 \ dp \ ts\ have "dp \ ts" .. then have "(dp \ ts) \ (ds \ tp)" .. with assms(2) have "c2" .. have "\ c2" using \c1 \ \ c2\ .. then show "ds" using \c2\ .. next assume "c2 \ \ c1" then have "c2" .. with assms(2) have "(dp \ ts) \ (ds \ tp)" .. then show "ds" proof assume "dp \ ts" with assms(1) have c1 .. have "\ c1" using \c2 \ \ c1\ .. then show ds using \c1\ .. next assume "ds \ tp" then show ds .. qed qed qed (* 3\ demostración *) lemma assumes "c1 \ dp \ ts" "c2 \ (dp \ ts) \ (ds \ tp)" "(c1 \ \ c2) \ (c2 \ \ c1)" shows "ds" proof - note \(c1 \ \ c2) \ (c2 \ \ c1)\ then show "ds" proof (rule disjE) assume "c1 \ \ c2" then have "c1" by (rule conjunct1) with \c1 \ dp \ ts\ have "dp \ ts" by (rule iffD1) then have "(dp \ ts) \ (ds \ tp)" by (rule disjI1) with assms(2) have "c2" by (rule iffD2) have "\ c2" using \c1 \ \ c2\ by (rule conjunct2) then show "ds" using \c2\ by (rule notE) next assume "c2 \ \ c1" then have "c2" by (rule conjunct1) with assms(2) have "(dp \ ts) \ (ds \ tp)" by (rule iffD1) then show "ds" proof (rule disjE) assume "dp \ ts" with assms(1) have c1 by (rule iffD2) have "\ c1" using \c2 \ \ c1\ by (rule conjunct2) then show ds using \c1\ by (rule notE) next assume "ds \ tp" then show ds by (rule conjunct1) qed qed qed end