<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/RA2014/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jalonso</id>
	<title>Razonamiento automático (2014-15) - Contribuciones del usuario [es]</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/RA2014/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jalonso"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php/Especial:Contribuciones/Jalonso"/>
	<updated>2026-07-17T06:04:38Z</updated>
	<subtitle>Contribuciones del usuario</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Documentaci%C3%B3n&amp;diff=325</id>
		<title>Documentación</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Documentaci%C3%B3n&amp;diff=325"/>
		<updated>2022-02-08T17:21:44Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En esta página se recogen en enlaces que sirven de documentación al curso de demostración asistida por ordenador (DAO). Los enlaces están actualizados en el [https://www.glc.us.es/~jalonso/RA2019/index.php/Documentaci%C3%B3n curso 2019-20].&lt;br /&gt;
&lt;br /&gt;
== Visiones generales de la DAO ==&lt;br /&gt;
&lt;br /&gt;
# J.A. Alonso. [http://goo.gl/NWk7b Razonamiento formalizado: Del sueño a la realidad de las pruebas]. &amp;#039;&amp;#039;Vestigium&amp;#039;&amp;#039;, 26 de diciembre de 2012.&lt;br /&gt;
# J. Avigad. [http://www.andrew.cmu.edu/user/avigad/Talks/icerm.pdf Interactive theorem proving, automated reasoning, and mathematical computation]. ICERM, 14 de diciembre de 2012. &lt;br /&gt;
# M. Davis. [http://www.cs.nyu.edu/cs/faculty/davism/early.ps The early history of automated deduction].&lt;br /&gt;
# J.P. Delahaye [http://interstices.info/jcms/int_63417/du-reve-a-la-realite-des-preuves Du rêve à la réalité des preuves]. &amp;#039;&amp;#039;Interstices&amp;#039;&amp;#039;, 8 de julio de 2012.&lt;br /&gt;
# J. Germoni [http://images.math.cnrs.fr/Coq-et-caracteres.html Coq et caractères: Preuve formelle du théorème de Feit et Thompson]. &amp;#039;&amp;#039;Images des Mathématiques&amp;#039;&amp;#039;, CNRS, 23 de noviembre de 2012. &lt;br /&gt;
# H. Geuvers [http://www.ias.ac.in/sadhana/Pdf2009Feb/3.pdf Proof assistants: History, ideas and future]. &amp;#039;&amp;#039;Sadhana&amp;#039;&amp;#039;, Vol. 34-1, pp. 3-25, février 2009.&lt;br /&gt;
# G. Gonthier [http://www.ams.org/notices/200811/tx081101382p.pdf The four-color theorem]. &amp;#039;&amp;#039;Notices of the AMS&amp;#039;&amp;#039;, Vol. 55, n° 11, pp. 1382-1393, 2008.&lt;br /&gt;
# T. Hales. [http://www.ams.org/notices/200811/tx081101370p.pdf Formal proof]. &amp;#039;&amp;#039;Notices of AMS&amp;#039;&amp;#039;, Vol. 55, N. 11 (2008) pp. 1370-1380.&lt;br /&gt;
# J. Harrison. [http://www.cl.cam.ac.uk/~jrh13/papers/ab.html A short survey of automated reasoning]. &amp;#039;&amp;#039;Lecture Notes in Computer Science&amp;#039;&amp;#039;, Vol. 4545, pp. 334-349, 2007.&lt;br /&gt;
# J. Harrison. [http://www.ams.org/notices/200811/tx081101395p.pdf Formal proof: Theory and practice]. &amp;#039;&amp;#039;Notices of the AMS&amp;#039;&amp;#039;, Vol. 55, N. 11 (2008) p.1395-1406. &lt;br /&gt;
# G. Kolata. [http://www.nytimes.com/library/cyber/week/1210math.html Computer math proof shows reasoning power]. &amp;#039;&amp;#039;The New York Times&amp;#039;&amp;#039;, 10 de diciembre de 1996.&lt;br /&gt;
# D. MacKenzie [https://backspaces.net/temp/Spring2010Seminar/18%20unconventional%20essays%20on%20the%20nature%20of%20mathematics.pdf#page=147 Computers and the sociology of mathematical proof].&lt;br /&gt;
# G. Sutcliffe. [http://tptp.org/OverviewOfATP.html What is automated theorem proving?].&lt;br /&gt;
# F. Wiedijk [http://www.cs.ru.nl/~freek/100/ Formalizing the «top 100» of mathematical theorems].&lt;br /&gt;
# F. Wiedijk [http://www.ams.org/notices/200811/tx081101408p.pdf Formal proof - Getting started]. &amp;#039;&amp;#039;Notices of the AMS&amp;#039;&amp;#039;, Vol. 55, n° 11, pp. 1408-1414, 2008.&lt;br /&gt;
# F. Wiedijk, [https://www.cs.ru.nl/F.Wiedijk/pubs/qed2.pdf The QED manifesto revisited]. &amp;#039;&amp;#039;Studies in Logic, Grammar and Rhetoric&amp;#039;&amp;#039;, Vol. 10(23), pp. 121-133, 2007.&lt;br /&gt;
&lt;br /&gt;
== Referencias sobre Isabelle/HOL ==&lt;br /&gt;
# B. Grechuk [https://web.cs.wpi.edu/~dd/resources_isabelle/isabelle_primer_mathematicians.pdf Isabelle primer for mathematicians].&lt;br /&gt;
# T. Nipkow [https://isabelle.in.tum.de/doc/prog-prove.pdf Programming and proving in Isabelle/HOL]. &lt;br /&gt;
# T. Nipkow, M. Wenzel y L.C. Paulson [https://isabelle.in.tum.de/website-Isabelle2009/dist/Isabelle/doc/tutorial.pdf A proof assistant for higher-order logic]. &lt;br /&gt;
# [http://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/library/HOL/HOL/document.pdf Isabelle/HOL — Higher-Order Logic]. &lt;br /&gt;
# [http://www.cl.cam.ac.uk/research/hvg/Isabelle/documentation.html Tutorials and manuals for Isabelle].&lt;br /&gt;
&lt;br /&gt;
== Lecturas complementarias ==&lt;br /&gt;
=== Programación funcional ===&lt;br /&gt;
# J.A. Alonso [http://www.cs.us.es/~jalonso/cursos/i1m-12/temas/2012-13-IM-temas-PF.pdf  Temas de &amp;quot;Programación funcional&amp;quot;]. Publicaciones del Grupo de Lógica Computacional. Universidad de Sevilla, 2012.&lt;br /&gt;
# J.A. Alonso y M.J. Hidalgo [http://www.cs.us.es/~jalonso/publicaciones/Piensa_en_Haskell.pdf Piensa en Haskell (Ejercicios de programación funcional con Haskell)]. Publicaciones del Grupo de Lógica Computacional. Universidad de Sevilla, 2012.&lt;br /&gt;
# G. Hutton [http://goo.gl/pKqG Programming in Haskell]. Cambridge University Press, 2007. &lt;br /&gt;
# M. Lipovača [http://aprendehaskell.es ¡Aprende Haskell por el bien de todos!].&lt;br /&gt;
&lt;br /&gt;
=== Lógica computacional ===&lt;br /&gt;
# J.A. Alonso [http://www.cs.us.es/~jalonso/cursos/li-12/temas/temas-LI-2012-13.pdf Temas de &amp;quot;Lógica informática&amp;quot; (2012-13)]. Publicaciones del Grupo de Lógica Computacional. Universidad de Sevilla, 2012.&lt;br /&gt;
# R. Bornat [http://bit.ly/oithic Proof and disproof in formal logic: an introduction for programmers]. Oxford University Press, 2005.&lt;br /&gt;
# K. Broda, S. Eisenbach, H. Khoshnevisan y S. Vickers [https://www.doc.ic.ac.uk/~susan/firstyearbook.pdf Reasoned programming]. Imperial College, 1994.&lt;br /&gt;
# K. Doets y J. van Eijck [https://books.google.es/books?id=YCC6lwEACAAJ&amp;amp;dq=The+Haskell+Road+to+Logic,+Maths+and+Programming&amp;amp;hl=es&amp;amp;sa=X&amp;amp;redir_esc=y The Haskell Road to Logic, Maths and Programming].&lt;br /&gt;
# M. Huth y M. Ryan [http://goo.gl/TMqOo Logic in computer science: Modelling and reasoning about systems]. Cambridge University Press, 2004. (Incluye el [http://www.cs.bham.ac.uk/research/lics/tutor/index.html tutor en la Red]).&lt;br /&gt;
&lt;br /&gt;
== Cursos relacionados ==&lt;br /&gt;
=== Cursos con Isabelle/HOL ===&lt;br /&gt;
# Clemens Ballarin. [http://cl-informatik.uibk.ac.at/teaching/ss08/atp/introduction.php Automatic Deduction]. (Univ de Innsbruck, 2008).&lt;br /&gt;
# Clemens Ballarin y Gerwin Klein [http://isabelle.in.tum.de/coursematerial/IJCAR04 Introduction to the Isabelle Proof Assistant]. (en el IJCAR-2004).&lt;br /&gt;
# Clemens Ballarin y Tjark Weber. [http://cl-informatik.uibk.ac.at/teaching/ws06/atp/introduction.php Automated Theorem Proving in Isabelle/HOL]. (Univ. de Innsbruck, 2006-07).&lt;br /&gt;
# A.D. Brucker, D. Basin, J.G. Smaus y B. Wolff. [http://archiv.infsec.ethz.ch/education/permanent/csmr.html Computer-supported Modeling and Reasoning]. (ETH Zurich, 2011).&lt;br /&gt;
# Mads Dam. [http://www.csc.kth.se/utbildning/kth/kurser/DD2453/aform07/ Advanced formal methods]. (KTH Royal Institute of Technology, 2007).&lt;br /&gt;
# Jacques Fleuriot y Paul Jackson. [http://www.inf.ed.ac.uk/teaching/courses/ar/slides/ Automated reasoning]. (Univ. de Edimburgo, 2012-13).&lt;br /&gt;
# Thomas Genet [http://www.irisa.fr/celtique/genet/ACF Software formal analysis and design]. (Univ. de Rennes)&lt;br /&gt;
# Gerwin Klein. [http://www.cse.unsw.edu.au/~kleing/teaching/thprv-04 Theorem Proving - Principles, Techniques, Applications]. (NICTA, 2004).&lt;br /&gt;
# Gerwin Klein. [http://www.cse.unsw.edu.au/~cs4161/index.html Advanced Topics in Software Verification]. (NICTA, 2012).&lt;br /&gt;
# Joao Marcos. [http://www.dimap.ufrn.br/~jmarcos/courses/LC/Ementa.htm Lógica computacional: Demonstração assistida e semi-automática de teoremas].(UFRN, 2000).&lt;br /&gt;
# Tobias Nipkow. [https://www21.in.tum.de/teaching/semantics/WS1920/ Semantics of programming languages]. (Univ. de Munich, 2012-13).&lt;br /&gt;
# Tobias Nipkow [http://isabelle.in.tum.de/coursematerial/PSV2009-1 Theorem Proving with Isabelle/HOL An Intensive Course]. &lt;br /&gt;
# Larry Paulson. [http://www.cl.cam.ac.uk/teaching/0910/L21/ Interactive Formal Verification]. (Univ. de Cambridge, 2009-10).&lt;br /&gt;
# Jan-Georg Smaus. [http://www.informatik.uni-freiburg.de/~ki/teaching/ws0910/csmr/lecture.html Computer-supported modeling and reasoning]. (Univ. de Feiburgo, 2009).&lt;br /&gt;
# Christian Sternagel [http://cl-informatik.uibk.ac.at/teaching/ss11/eve/content.php Experiments in Verification – Introduction to Isabelle/HOL]. (Univ. de Innsbruck, 2011-12).&lt;br /&gt;
# Tjark Weber. [http://www.cl.cam.ac.uk/teaching/1011/L21/ Interactive Formal Verification]. (Univ. de Cambridge, 2010-11).&lt;br /&gt;
&lt;br /&gt;
=== Otros cursos ===&lt;br /&gt;
# José A. Alonso [http://www.cs.us.es/~jalonso/cursos/li-12/ Lógica informática] (Univ. de Sevilla, 2012-13).&lt;br /&gt;
# Yves Bertot, Pierre Casteran, Benjamin Gregoire, Pierre Letouzey y Assia Mahboubi [http://www.di.ens.fr/~zappa/teaching/coq/ecole11 Modelling and verifying algorithms in Coq: an introduction]. (INRIA Paris-Rocquencourt, 14-18 noviembre 2011).&lt;br /&gt;
# Pierre Castéran [http://www.labri.fr/perso/casteran/FM/Logique/index.html Logic (Master In Verification)] (Univ. de Burdeos, 2011-12).&lt;br /&gt;
# Ian Hodkinson [http://www.doc.ic.ac.uk/~imh/teaching/140_logic/logic.html Logic] (Imperial College, Londres, 2010-11).&lt;br /&gt;
# Peter Lucas [http://www.cs.ru.nl/~peterl/teaching/KeR/ Knowledge Representation and Reasoning] (Radboud University # egen, 2011-12).&lt;br /&gt;
# Larry Paulson [http://www.cl.cam.ac.uk/Teaching/current/LogicProof/ Logic and Proof] (Univ. de Cambridge, 2011-12).&lt;br /&gt;
# Riccardo Pucella [http://www.ccs.neu.edu/home/riccardo/courses/csu290-sp09/index.html Logic and Computation] (Northeastern University, 2009). Curso con ACL2.&lt;br /&gt;
&lt;br /&gt;
== Bibliotecas de ejemplos de verificación ==&lt;br /&gt;
# [http://afp.sourceforge.net Archive of Formal Proofs].&lt;br /&gt;
# [http://www.cs.ru.nl/~freek/100 Formalizing 100 Theorems].&lt;br /&gt;
# [http://toccata.lri.fr/gallery Gallery of verified programs].&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Documentaci%C3%B3n&amp;diff=324</id>
		<title>Documentación</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Documentaci%C3%B3n&amp;diff=324"/>
		<updated>2022-02-08T10:59:35Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En esta página se recogen en enlaces que sirven de documentación al curso de demostración asistida por ordenador (DAO).&lt;br /&gt;
&lt;br /&gt;
== Visiones generales de la DAO ==&lt;br /&gt;
&lt;br /&gt;
# J.A. Alonso. [http://goo.gl/NWk7b Razonamiento formalizado: Del sueño a la realidad de las pruebas]. &amp;#039;&amp;#039;Vestigium&amp;#039;&amp;#039;, 26 de diciembre de 2012.&lt;br /&gt;
# J. Avigad. [http://www.andrew.cmu.edu/user/avigad/Talks/icerm.pdf Interactive theorem proving, automated reasoning, and mathematical computation]. ICERM, 14 de diciembre de 2012. &lt;br /&gt;
# M. Davis. [http://www.cs.nyu.edu/cs/faculty/davism/early.ps The early history of automated deduction].&lt;br /&gt;
# J.P. Delahaye [http://interstices.info/jcms/int_63417/du-reve-a-la-realite-des-preuves Du rêve à la réalité des preuves]. &amp;#039;&amp;#039;Interstices&amp;#039;&amp;#039;, 8 de julio de 2012.&lt;br /&gt;
# J. Germoni [http://images.math.cnrs.fr/Coq-et-caracteres.html Coq et caractères: Preuve formelle du théorème de Feit et Thompson]. &amp;#039;&amp;#039;Images des Mathématiques&amp;#039;&amp;#039;, CNRS, 23 de noviembre de 2012. &lt;br /&gt;
# H. Geuvers [http://www.ias.ac.in/sadhana/Pdf2009Feb/3.pdf Proof assistants: History, ideas and future]. &amp;#039;&amp;#039;Sadhana&amp;#039;&amp;#039;, Vol. 34-1, pp. 3-25, février 2009.&lt;br /&gt;
# G. Gonthier [http://www.ams.org/notices/200811/tx081101382p.pdf The four-color theorem]. &amp;#039;&amp;#039;Notices of the AMS&amp;#039;&amp;#039;, Vol. 55, n° 11, pp. 1382-1393, 2008.&lt;br /&gt;
# T. Hales. [http://www.ams.org/notices/200811/tx081101370p.pdf Formal proof]. &amp;#039;&amp;#039;Notices of AMS&amp;#039;&amp;#039;, Vol. 55, N. 11 (2008) pp. 1370-1380.&lt;br /&gt;
# J. Harrison. [http://www.cl.cam.ac.uk/~jrh13/papers/ab.html A short survey of automated reasoning]. &amp;#039;&amp;#039;Lecture Notes in Computer Science&amp;#039;&amp;#039;, Vol. 4545, pp. 334-349, 2007.&lt;br /&gt;
# J. Harrison. [http://www.ams.org/notices/200811/tx081101395p.pdf Formal proof: Theory and practice]. &amp;#039;&amp;#039;Notices of the AMS&amp;#039;&amp;#039;, Vol. 55, N. 11 (2008) p.1395-1406. &lt;br /&gt;
# G. Kolata. [http://www.nytimes.com/library/cyber/week/1210math.html Computer math proof shows reasoning power]. &amp;#039;&amp;#039;The New York Times&amp;#039;&amp;#039;, 10 de diciembre de 1996.&lt;br /&gt;
# D. MacKenzie [https://backspaces.net/temp/Spring2010Seminar/18%20unconventional%20essays%20on%20the%20nature%20of%20mathematics.pdf#page=147 Computers and the sociology of mathematical proof].&lt;br /&gt;
# G. Sutcliffe. [http://tptp.org/OverviewOfATP.html What is automated theorem proving?].&lt;br /&gt;
# F. Wiedijk [http://www.cs.ru.nl/~freek/100/ Formalizing the «top 100» of mathematical theorems].&lt;br /&gt;
# F. Wiedijk [http://www.ams.org/notices/200811/tx081101408p.pdf Formal proof - Getting started]. &amp;#039;&amp;#039;Notices of the AMS&amp;#039;&amp;#039;, Vol. 55, n° 11, pp. 1408-1414, 2008.&lt;br /&gt;
# F. Wiedijk, [https://www.cs.ru.nl/F.Wiedijk/pubs/qed2.pdf The QED manifesto revisited]. &amp;#039;&amp;#039;Studies in Logic, Grammar and Rhetoric&amp;#039;&amp;#039;, Vol. 10(23), pp. 121-133, 2007.&lt;br /&gt;
&lt;br /&gt;
== Referencias sobre Isabelle/HOL ==&lt;br /&gt;
# B. Grechuk [https://web.cs.wpi.edu/~dd/resources_isabelle/isabelle_primer_mathematicians.pdf Isabelle primer for mathematicians].&lt;br /&gt;
# T. Nipkow [https://isabelle.in.tum.de/doc/prog-prove.pdf Programming and proving in Isabelle/HOL]. &lt;br /&gt;
# T. Nipkow, M. Wenzel y L.C. Paulson [https://isabelle.in.tum.de/website-Isabelle2009/dist/Isabelle/doc/tutorial.pdf A proof assistant for higher-order logic]. &lt;br /&gt;
# [http://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/library/HOL/HOL/document.pdf Isabelle/HOL — Higher-Order Logic]. &lt;br /&gt;
# [http://www.cl.cam.ac.uk/research/hvg/Isabelle/documentation.html Tutorials and manuals for Isabelle].&lt;br /&gt;
&lt;br /&gt;
== Lecturas complementarias ==&lt;br /&gt;
=== Programación funcional ===&lt;br /&gt;
# J.A. Alonso [http://www.cs.us.es/~jalonso/cursos/i1m-12/temas/2012-13-IM-temas-PF.pdf  Temas de &amp;quot;Programación funcional&amp;quot;]. Publicaciones del Grupo de Lógica Computacional. Universidad de Sevilla, 2012.&lt;br /&gt;
# J.A. Alonso y M.J. Hidalgo [http://www.cs.us.es/~jalonso/publicaciones/Piensa_en_Haskell.pdf Piensa en Haskell (Ejercicios de programación funcional con Haskell)]. Publicaciones del Grupo de Lógica Computacional. Universidad de Sevilla, 2012.&lt;br /&gt;
# G. Hutton [http://goo.gl/pKqG Programming in Haskell]. Cambridge University Press, 2007. &lt;br /&gt;
# M. Lipovača [http://aprendehaskell.es ¡Aprende Haskell por el bien de todos!].&lt;br /&gt;
&lt;br /&gt;
=== Lógica computacional ===&lt;br /&gt;
# J.A. Alonso [http://www.cs.us.es/~jalonso/cursos/li-12/temas/temas-LI-2012-13.pdf Temas de &amp;quot;Lógica informática&amp;quot; (2012-13)]. Publicaciones del Grupo de Lógica Computacional. Universidad de Sevilla, 2012.&lt;br /&gt;
# R. Bornat [http://bit.ly/oithic Proof and disproof in formal logic: an introduction for programmers]. Oxford University Press, 2005.&lt;br /&gt;
# K. Broda, S. Eisenbach, H. Khoshnevisan y S. Vickers [https://www.doc.ic.ac.uk/~susan/firstyearbook.pdf Reasoned programming]. Imperial College, 1994.&lt;br /&gt;
# K. Doets y J. van Eijck [https://books.google.es/books?id=YCC6lwEACAAJ&amp;amp;dq=The+Haskell+Road+to+Logic,+Maths+and+Programming&amp;amp;hl=es&amp;amp;sa=X&amp;amp;redir_esc=y The Haskell Road to Logic, Maths and Programming].&lt;br /&gt;
# M. Huth y M. Ryan [http://goo.gl/TMqOo Logic in computer science: Modelling and reasoning about systems]. Cambridge University Press, 2004. (Incluye el [http://www.cs.bham.ac.uk/research/lics/tutor/index.html tutor en la Red]).&lt;br /&gt;
&lt;br /&gt;
== Cursos relacionados ==&lt;br /&gt;
=== Cursos con Isabelle/HOL ===&lt;br /&gt;
# Clemens Ballarin. [http://cl-informatik.uibk.ac.at/teaching/ss08/atp/introduction.php Automatic Deduction]. (Univ de Innsbruck, 2008).&lt;br /&gt;
# Clemens Ballarin y Gerwin Klein [http://isabelle.in.tum.de/coursematerial/IJCAR04 Introduction to the Isabelle Proof Assistant]. (en el IJCAR-2004).&lt;br /&gt;
# Clemens Ballarin y Tjark Weber. [http://cl-informatik.uibk.ac.at/teaching/ws06/atp/introduction.php Automated Theorem Proving in Isabelle/HOL]. (Univ. de Innsbruck, 2006-07).&lt;br /&gt;
# A.D. Brucker, D. Basin, J.G. Smaus y B. Wolff. [http://archiv.infsec.ethz.ch/education/permanent/csmr.html Computer-supported Modeling and Reasoning]. (ETH Zurich, 2011).&lt;br /&gt;
# Mads Dam. [http://www.csc.kth.se/utbildning/kth/kurser/DD2453/aform07/ Advanced formal methods]. (KTH Royal Institute of Technology, 2007).&lt;br /&gt;
# Jacques Fleuriot y Paul Jackson. [http://www.inf.ed.ac.uk/teaching/courses/ar/slides/ Automated reasoning]. (Univ. de Edimburgo, 2012-13).&lt;br /&gt;
# Thomas Genet [http://www.irisa.fr/celtique/genet/ACF Software formal analysis and design]. (Univ. de Rennes)&lt;br /&gt;
# Gerwin Klein. [http://www.cse.unsw.edu.au/~kleing/teaching/thprv-04 Theorem Proving - Principles, Techniques, Applications]. (NICTA, 2004).&lt;br /&gt;
# Gerwin Klein. [http://www.cse.unsw.edu.au/~cs4161/index.html Advanced Topics in Software Verification]. (NICTA, 2012).&lt;br /&gt;
# Joao Marcos. [http://www.dimap.ufrn.br/~jmarcos/courses/LC/Ementa.htm Lógica computacional: Demonstração assistida e semi-automática de teoremas].(UFRN, 2000).&lt;br /&gt;
# Tobias Nipkow. [https://www21.in.tum.de/teaching/semantics/WS1920/ Semantics of programming languages]. (Univ. de Munich, 2012-13).&lt;br /&gt;
# Tobias Nipkow [http://isabelle.in.tum.de/coursematerial/PSV2009-1 Theorem Proving with Isabelle/HOL An Intensive Course]. &lt;br /&gt;
# Larry Paulson. [http://www.cl.cam.ac.uk/teaching/0910/L21/ Interactive Formal Verification]. (Univ. de Cambridge, 2009-10).&lt;br /&gt;
# Jan-Georg Smaus. [http://www.informatik.uni-freiburg.de/~ki/teaching/ws0910/csmr/lecture.html Computer-supported modeling and reasoning]. (Univ. de Feiburgo, 2009).&lt;br /&gt;
# Christian Sternagel [http://cl-informatik.uibk.ac.at/teaching/ss11/eve/content.php Experiments in Verification – Introduction to Isabelle/HOL]. (Univ. de Innsbruck, 2011-12).&lt;br /&gt;
# Tjark Weber. [http://www.cl.cam.ac.uk/teaching/1011/L21/ Interactive Formal Verification]. (Univ. de Cambridge, 2010-11).&lt;br /&gt;
&lt;br /&gt;
=== Otros cursos ===&lt;br /&gt;
# José A. Alonso [http://www.cs.us.es/~jalonso/cursos/li-12/ Lógica informática] (Univ. de Sevilla, 2012-13).&lt;br /&gt;
# Yves Bertot, Pierre Casteran, Benjamin Gregoire, Pierre Letouzey y Assia Mahboubi [http://www.di.ens.fr/~zappa/teaching/coq/ecole11 Modelling and verifying algorithms in Coq: an introduction]. (INRIA Paris-Rocquencourt, 14-18 noviembre 2011).&lt;br /&gt;
# Pierre Castéran [http://www.labri.fr/perso/casteran/FM/Logique/index.html Logic (Master In Verification)] (Univ. de Burdeos, 2011-12).&lt;br /&gt;
# Ian Hodkinson [http://www.doc.ic.ac.uk/~imh/teaching/140_logic/logic.html Logic] (Imperial College, Londres, 2010-11).&lt;br /&gt;
# Peter Lucas [http://www.cs.ru.nl/~peterl/teaching/KeR/ Knowledge Representation and Reasoning] (Radboud University # egen, 2011-12).&lt;br /&gt;
# Larry Paulson [http://www.cl.cam.ac.uk/Teaching/current/LogicProof/ Logic and Proof] (Univ. de Cambridge, 2011-12).&lt;br /&gt;
# Riccardo Pucella [http://www.ccs.neu.edu/home/riccardo/courses/csu290-sp09/index.html Logic and Computation] (Northeastern University, 2009). Curso con ACL2.&lt;br /&gt;
&lt;br /&gt;
== Bibliotecas de ejemplos de verificación ==&lt;br /&gt;
# [http://afp.sourceforge.net Archive of Formal Proofs].&lt;br /&gt;
# [http://www.cs.ru.nl/~freek/100 Formalizing 100 Theorems].&lt;br /&gt;
# [http://toccata.lri.fr/gallery Gallery of verified programs].&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Documentaci%C3%B3n&amp;diff=279</id>
		<title>Documentación</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Documentaci%C3%B3n&amp;diff=279"/>
		<updated>2015-02-04T05:50:00Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: /* Otros cursos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En esta página se recogen en enlaces que sirven de documentación al curso de demostración asistida por ordenador (DAO).&lt;br /&gt;
&lt;br /&gt;
== Visiones generales de la DAO ==&lt;br /&gt;
&lt;br /&gt;
# J.A. Alonso. [http://goo.gl/NWk7b Razonamiento formalizado: Del sueño a la realidad de las pruebas]. &amp;#039;&amp;#039;Vestigium&amp;#039;&amp;#039;, 26 de diciembre de 2012.&lt;br /&gt;
# J. Avigad. [http://www.andrew.cmu.edu/user/avigad/Talks/icerm.pdf Interactive theorem proving, automated reasoning, and mathematical computation]. ICERM, 14 de diciembre de 2012. &lt;br /&gt;
# M. Davis. [http://www.cs.nyu.edu/cs/faculty/davism/early.ps The early history of automated deduction].&lt;br /&gt;
# J.P. Delahaye [http://interstices.info/jcms/int_63417/du-reve-a-la-realite-des-preuves Du rêve à la réalité des preuves]. &amp;#039;&amp;#039;Interstices&amp;#039;&amp;#039;, 8 de julio de 2012.&lt;br /&gt;
# J. Germoni [http://images.math.cnrs.fr/Coq-et-caracteres.html Coq et caractères: Preuve formelle du théorème de Feit et Thompson]. &amp;#039;&amp;#039;Images des Mathématiques&amp;#039;&amp;#039;, CNRS, 23 de noviembre de 2012. &lt;br /&gt;
# H. Geuvers [http://www.ias.ac.in/sadhana/Pdf2009Feb/3.pdf Proof assistants: History, ideas and future]. &amp;#039;&amp;#039;Sadhana&amp;#039;&amp;#039;, Vol. 34-1, pp. 3-25, février 2009.&lt;br /&gt;
# G. Gonthier [http://www.ams.org/notices/200811/tx081101382p.pdf The four-color theorem]. &amp;#039;&amp;#039;Notices of the AMS&amp;#039;&amp;#039;, Vol. 55, n° 11, pp. 1382-1393, 2008.&lt;br /&gt;
# T. Hales. [http://www.ams.org/notices/200811/tx081101370p.pdf Formal proof]. &amp;#039;&amp;#039;Notices of AMS&amp;#039;&amp;#039;, Vol. 55, N. 11 (2008) pp. 1370-1380.&lt;br /&gt;
# J. Harrison. [http://www.cl.cam.ac.uk/~jrh13/papers/ab.html A short survey of automated reasoning]. &amp;#039;&amp;#039;Lecture Notes in Computer Science&amp;#039;&amp;#039;, Vol. 4545, pp. 334-349, 2007.&lt;br /&gt;
# J. Harrison. [http://www.ams.org/notices/200811/tx081101395p.pdf Formal proof: Theory and practice]. &amp;#039;&amp;#039;Notices of the AMS&amp;#039;&amp;#039;, Vol. 55, N. 11 (2008) p.1395-1406. &lt;br /&gt;
# G. Kolata. [http://www.nytimes.com/library/cyber/week/1210math.html Computer math proof shows reasoning power]. &amp;#039;&amp;#039;The New York Times&amp;#039;&amp;#039;, 10 de diciembre de 1996.&lt;br /&gt;
# D. MacKenzie [http://www.bcs.org/server.php?show=ConWebDoc.4364 Computers and the sociology of mathematical proof].&lt;br /&gt;
# G. Sutcliffe. [http://www.cs.miami.edu/~tptp/OverviewOfATP.html What is automated theorem proving?].&lt;br /&gt;
# F. Wiedijk [http://www.cs.ru.nl/~freek/100/ Formalizing the «top 100» of mathematical theorems].&lt;br /&gt;
# F. Wiedijk [http://www.ams.org/notices/200811/tx081101408p.pdf Formal proof - Getting started]. &amp;#039;&amp;#039;Notices of the AMS&amp;#039;&amp;#039;, Vol. 55, n° 11, pp. 1408-1414, 2008.&lt;br /&gt;
# F. Wiedijk, [http://www.cs.ru.nl/~freek/pubs/qed2.ps.gz The QED manifesto revisited]. &amp;#039;&amp;#039;Studies in Logic, Grammar and Rhetoric&amp;#039;&amp;#039;, Vol. 10(23), pp. 121-133, 2007.&lt;br /&gt;
&lt;br /&gt;
== Referencias sobre Isabelle/HOL ==&lt;br /&gt;
# B. Grechuk [http://dream.inf.ed.ac.uk/projects/isabelle/Isabelle_Primer.pdf Isabelle primer for mathematicians].&lt;br /&gt;
# T. Nipkow [http://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/Isabelle2013-2/doc/prog-prove.pdf Programming and proving in Isabelle/HOL]. 5 de diciembre de 2013.&lt;br /&gt;
# T. Nipkow, M. Wenzel y L.C. Paulson [http://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/Isabelle2013-2/doc/tutorial.pdf A proof assistant for higher-order logic]. Springer-Verlag. 5 de diciembre de   2013.&lt;br /&gt;
# [http://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/library/HOL/HOL/document.pdf Isabelle/HOL — Higher-Order Logic]. 5 de diciembre de 2013.&lt;br /&gt;
# M. Wenzel [http://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/Isabelle2013-2/doc/isar-ref.pdf The Isabelle/Isar Reference Manual]. 5 de diciembre de 2013.&lt;br /&gt;
# M. Wenzel [https://www.lri.fr/~wenzel/Isabelle2011-Paris/quickref.pdf The  Isabelle/Isar quick reference].&lt;br /&gt;
# J. Siek [http://ecee.colorado.edu/~siek/ecen3703/spring10/quick-ref.pdf Quick Reference for Isabelle/Isar Propositional Logic].&lt;br /&gt;
# J. Siek [http://ecee.colorado.edu/~siek/ecen3703/spring10/quick-ref2.pdf Quick Reference for Isabelle/Isar More Proof Techniques].&lt;br /&gt;
# J. Siek [http://ecee.colorado.edu/~siek/ecen3703/spring10/quick-ref3.pdf Quick Reference for Isabelle/Isar First-Order Logic].&lt;br /&gt;
# [http://www.cl.cam.ac.uk/research/hvg/Isabelle/documentation.html Tutorials and manuals for Isabelle2013].&lt;br /&gt;
&lt;br /&gt;
== Lecturas complementarias ==&lt;br /&gt;
=== Programación funcional ===&lt;br /&gt;
# J.A. Alonso [http://www.cs.us.es/~jalonso/cursos/i1m/temas/2012-13-IM-temas-PF.pdf  Temas de &amp;quot;Programación funcional&amp;quot;]. Publicaciones del Grupo de Lógica Computacional. Universidad de Sevilla, 2012.&lt;br /&gt;
# J.A. Alonso y M.J. Hidalgo [http://www.cs.us.es/~jalonso/publicaciones/Piensa_en_Haskell.pdf Piensa en Haskell (Ejercicios de programación funcional con Haskell)]. Publicaciones del Grupo de Lógica Computacional. Universidad de Sevilla, 2012.&lt;br /&gt;
# G. Hutton [http://goo.gl/pKqG Programming in Haskell]. Cambridge University Press, 2007. &lt;br /&gt;
# M. Lipovača [http://aprendehaskell.es ¡Aprende Haskell por el bien de todos!].&lt;br /&gt;
&lt;br /&gt;
=== Lógica computacional ===&lt;br /&gt;
# J.A. Alonso [http://www.cs.us.es/~jalonso/cursos/li/temas/temas-LI-2012-13.pdf Temas de &amp;quot;Lógica informática&amp;quot; (2012-13)]. Publicaciones del Grupo de Lógica Computacional. Universidad de Sevilla, 2012.&lt;br /&gt;
# R. Bornat [http://bit.ly/oithic Proof and disproof in formal logic: an introduction for programmers]. Oxford University Press, 2005.&lt;br /&gt;
# K. Broda, S. Eisenbach, H. Khoshnevisan y S. Vickers [http://pubs.doc.ic.ac.uk/reasoned-programming/reasoned-programming.pdf Reasoned programming]. Imperial College, 1994.&lt;br /&gt;
# K. Doets y J. van Eijck [http://www.ldc.usb.ve/~astorga/Haskell.Road.pdf The Haskell Road to Logic, Maths and Programming].&lt;br /&gt;
# M. Huth y M. Ryan [http://goo.gl/TMqOo Logic in computer science: Modelling and reasoning about systems]. Cambridge University Press, 2004. (Incluye el [http://www.cs.bham.ac.uk/research/lics/tutor/index.html tutor en la Red]).&lt;br /&gt;
&lt;br /&gt;
== Cursos relacionados ==&lt;br /&gt;
=== Cursos con Isabelle/HOL ===&lt;br /&gt;
# Jeremy Avigad. [http://www.phil.cmu.edu/~avigad/formal/ Logic and Formal Verification]. (Carnegie Mellon, 2009).&lt;br /&gt;
# Clemens Ballarin. [http://cl-informatik.uibk.ac.at/teaching/ss08/atp/introduction.php Automatic Deduction]. (Univ de Innsbruck, 2008).&lt;br /&gt;
# Clemens Ballarin. [http://www4.in.tum.de/~ballarin/belgrade08-tut/ Introduction to the Isabelle Proof Assistant]. (Belgrado, 2008). &lt;br /&gt;
# Clemens Ballarin y Gerwin Klein [http://isabelle.in.tum.de/coursematerial/IJCAR04 Introduction to the Isabelle Proof Assistant]. (en el IJCAR-2004).&lt;br /&gt;
# Clemens Ballarin y Tjark Weber. [http://cl-informatik.uibk.ac.at/teaching/ws06/atp/introduction.php Automated Theorem Proving in Isabelle/HOL]. (Univ. de Innsbruck, 2006-07).&lt;br /&gt;
# A.D. Brucker, D. Basin, J.G. Smaus y B. Wolff. [http://archiv.infsec.ethz.ch/education/permanent/csmr.html Computer-supported Modeling and Reasoning]. (ETH Zurich, 2011).&lt;br /&gt;
# Mads Dam. [http://www.csc.kth.se/utbildning/kth/kurser/DD2453/aform07/ Advanced formal methods]. (KTH Royal Institute of Technology, 2007).&lt;br /&gt;
# Jacques Fleuriot y Paul Jackson. [http://www.inf.ed.ac.uk/teaching/courses/ar/slides/ Automated reasoning]. (Univ. de Edimburgo, 2012-13).&lt;br /&gt;
# Thomas Genet [http://www.irisa.fr/celtique/genet/ACF Software formal analysis and design]. (Univ. de Rennes)&lt;br /&gt;
# Gerwin Klein. [http://www.cse.unsw.edu.au/~kleing/teaching/thprv-04 Theorem Proving - Principles, Techniques, Applications]. (NICTA, 2004).&lt;br /&gt;
# Gerwin Klein. [http://www.cse.unsw.edu.au/~cs4161/index.html Advanced Topics in Software Verification]. (NICTA, 2012).&lt;br /&gt;
# Joao Marcos. [http://www.dimap.ufrn.br/~jmarcos/courses/LC/Ementa.htm Lógica computacional: Demonstração assistida e semi-automática de teoremas].(UFRN, 2000).&lt;br /&gt;
# Tobias Nipkow. [http://www4.informatik.tu-muenchen.de/~nipkow/semantics/ Semantics of programming languages]. (Univ. de Munich, 2012-13).&lt;br /&gt;
# Tobias Nipkow [http://isabelle.in.tum.de/coursematerial/PSV2009-1 Theorem Proving with Isabelle/HOL An Intensive Course]. &lt;br /&gt;
# Larry Paulson. [http://www.cl.cam.ac.uk/teaching/0910/L21/ Interactive Formal Verification]. (Univ. de Cambridge, 2009-10).&lt;br /&gt;
# Arnd Poetzsch-Heffter. [https://softech.informatik.uni-kl.de/Homepage/SVHOL10 Specification and Verification with Higher-Order Logic]. &lt;br /&gt;
# Viorel Preoteasa, Ralph-Johan Back y Charmi Panchal. [http://users.abo.fi/vpreotea/isabelle-2012 Introduction to mechanized reasoning with Isabelle/HOL]. (Åbo Akademi University, 2012).&lt;br /&gt;
# Jeremy G. Siek. [http://www.cs.colorado.edu/~siek/7000/spring07/ Practical Theorem Proving with Isabelle/Isar]. (Univ. de Colorado, 2007).&lt;br /&gt;
# Jeremy G. Siek. [http://ecee.colorado.edu/~siek/ecen5013/spring11/ Theorem proving in Isabelle]. (Univ. de Colorado, 2011).&lt;br /&gt;
# Jan-Georg Smaus. [http://www.informatik.uni-freiburg.de/~ki/teaching/ws0910/csmr/lecture.html Computer-supported modeling and reasoning]. (Univ. de Feiburgo, 2009).&lt;br /&gt;
# Christian Sternagel [http://cl-informatik.uibk.ac.at/teaching/ss11/eve/content.php Experiments in Verification – Introduction to Isabelle/HOL]. (Univ. de Innsbruck, 2011-12).&lt;br /&gt;
# Tjark Weber. [http://www.cl.cam.ac.uk/teaching/1011/L21/ Interactive Formal Verification]. (Univ. de Cambridge, 2010-11).&lt;br /&gt;
&lt;br /&gt;
=== Otros cursos ===&lt;br /&gt;
# José A. Alonso [http://www.cs.us.es/~jalonso/cursos/li/ Lógica informática] (Univ. de Sevilla, 2012-13).&lt;br /&gt;
# Thorsten Altenkirch y Peter Morris [http://www.cs.nott.ac.uk/~txa/g52ifr Introduction to formal reasoning] (Univ. de Nottingham, 2010-11).&lt;br /&gt;
# Yves Bertot, Pierre Casteran, Benjamin Gregoire, Pierre Letouzey y Assia Mahboubi [http://www.di.ens.fr/~zappa/teaching/coq/ecole11 Modelling and verifying algorithms in Coq: an introduction]. (INRIA Paris-Rocquencourt, 14-18 noviembre 2011).&lt;br /&gt;
# Pierre Castéran [http://www.labri.fr/perso/casteran/FM/Logique/index.html Logic (Master In Verification)] (Univ. de Burdeos, 2011-12).&lt;br /&gt;
# Adam Chlipala [http://stellar.mit.edu/S/course/6/fa11/6.892/ Interactive computer theorem proving]. (MIT, 2012-13).&lt;br /&gt;
# Adam Chlipala y Armando Solar Lezama [https://stellar.mit.edu/S/course/6/fa13/6.820/index.html Foundations of program analysis]. (MIT, 2013-14).&lt;br /&gt;
# Robby Findler [http://www.eecs.northwestern.edu/~robby/courses/395-495-2013-fall Certified programming with dependent types]. (Northwestern, 2013-14).&lt;br /&gt;
# Nuno Gaspar [http://www-sop.inria.fr/members/Nuno.Gaspar/teaching/coq2012.php Verification with the Coq Proof Assistant] (INRIA Sophia Antipolis, 2012-13).&lt;br /&gt;
# Carlos Luna y Gustavo Betarte. [https://eva.fing.edu.uy/course/view.php?id=363 Construcción formal de programas en teoría de tipos]. (Univ. de la República, Uruguay, 2013-14).&lt;br /&gt;
# Michael Genesereth [http://logic.stanford.edu/classes/cs157/2011/cs157.html Computational Logic] (Univ. de Stanford, 2011-12).&lt;br /&gt;
# Ian Hodkinson [http://www.doc.ic.ac.uk/~imh/teaching/140_logic/logic.html Logic] (Imperial College, Londres, 2010-11).&lt;br /&gt;
# Peter Lucas [http://www.cs.ru.nl/~peterl/teaching/KeR/ Knowledge Representation and Reasoning] (Radboud University # egen, 2011-12).&lt;br /&gt;
# Larry Paulson [http://www.cl.cam.ac.uk/Teaching/current/LogicProof/ Logic and Proof] (Univ. de Cambridge, 2011-12).&lt;br /&gt;
# David Pichardie [http://www.irisa.fr/celtique/pichardie/teaching/M2/MDV/ Méthode de vérification] (Universidad de Rennes, 2006-07).&lt;br /&gt;
# Michael Winter [Logic in Computer Science] (Brock University, Ontario, Canada, 2010-11).&lt;br /&gt;
&lt;br /&gt;
== Bibliotecas de ejemplos de verificación ==&lt;br /&gt;
# [http://afp.sourceforge.net Archive of Formal Proofs].&lt;br /&gt;
# [http://www.cs.ru.nl/~freek/100 Formalizing 100 Theorems].&lt;br /&gt;
# [http://toccata.lri.fr/gallery Gallery of verified programs].&lt;br /&gt;
# [http://www.cs.nott.ac.uk/~lad/research/challenges/ Induction Challenge Problems].&lt;br /&gt;
# [http://automatedreasoning.net/ Larry Wos&amp;#039; Notebooks].&lt;br /&gt;
# [http://www.cs.miami.edu/~tptp/ The TPTP Problem Library for Automated Theorem Proving].&lt;br /&gt;
# [http://www.macs.hw.ac.uk/vstte10/Competition.html The 1st Verified Software Competition].&lt;br /&gt;
# [https://sites.google.com/site/vstte2012/compet The 2nd Verified Software Competition].&lt;br /&gt;
# [http://verifythis.cost-ic0701.org VerifyThis (A collection of verification benchmarks].&lt;br /&gt;
&lt;br /&gt;
== Artículos recientes ==&lt;br /&gt;
Están en orden cronológico inverso a la fecha de su reseña en [http://www.glc.us.es/~jalonso/vestigium/tag/resena Vestigium]:&lt;br /&gt;
# [http://bit.ly/1iZjgqN Proof Pearl: A probabilistic proof for the Girth-Chromatic number theorem]. L. Noschinski &lt;br /&gt;
# [http://bit.ly/1iJ8uVz A graph library for Isabelle]. ~ L. Noschinski &lt;br /&gt;
# [http://bit.ly/I0CU80 Gödel’s incompleteness theorems]. ~ L.C. Paulson &lt;br /&gt;
# [http://bit.ly/I0CPRN The hereditarily finite sets]. ~ L.C. Paulson &lt;br /&gt;
# [http://bit.ly/HBiIJI Applications of real number theorem proving in PVS]. ~ H. Gottliebsen, R. Hardy, O. Lightfoot y U. Martin &lt;br /&gt;
# [http://bit.ly/1awnMLB A machine-assisted proof of Gödel’s incompleteness theorems for the theory of hereditarily finite sets]. ~ L.C. Paulson &lt;br /&gt;
# [http://bit.ly/19lWeYy Verified AIG algorithms in ACL2]. ~ J. Davis y S. Swords &lt;br /&gt;
# [http://bit.ly/GAhC00 A formal model and correctness proof for an access control policy framework]. ~ C. Wu, X. Zhang y C. Urban &lt;br /&gt;
# [http://bit.ly/16SMvSS The ontological argument in PVS]. ~ J. Rushby &lt;br /&gt;
# [http://bit.ly/1dRt9n0  Formalizing Moessner’s theorem and generalizations in Nuprl]. ~ M. Bickford, D. Kozen y A. Silva &lt;br /&gt;
# [http://bit.ly/1bSeDNB Formalization in PVS of balancing properties necessary for the security of the Dolev-Yao cascade protocol model]. ~ M. Ayala y Y. Santos &lt;br /&gt;
# [http://bit.ly/1feFqWE Proof assistant based on didactic considerations]. ~ J. Pais y A Tasistro &lt;br /&gt;
# [http://bit.ly/18tHNBi Theory exploration for interactive theorem proving]. ~ M. Johansson &lt;br /&gt;
# [http://bit.ly/1b0242s From Tarski to Hilbert]. ~ G. Braun y J. Narboux &lt;br /&gt;
# [http://bit.ly/18HaXaR Formal verification of language-based concurrent noninterference]. ~ A. Popescu, J. Hölzl y T. Nipkow &lt;br /&gt;
# [http://bit.ly/1aRTQsU A Traffic Alert and Collision Avoidance System(TCAS-II) Resolution Advisory Algorithm]. ~ C. Muñoz, A. Narkawicz y J. Chamberlain &lt;br /&gt;
# [http://bit.ly/1dNwhDI Formal verification of cryptographic security proofs]. ~ M. Berg &lt;br /&gt;
# [http://bit.ly/17muAUv Polygonal numbers in Mizar]. ~ A. Grabowski &lt;br /&gt;
# [http://bit.ly/1hk5z6L A mechanised proof of Gödel’s incompleteness theorems using Nominal Isabelle]. ~ L.C. Paulson &lt;br /&gt;
# [http://bit.ly/1cSL0wE Steps towards verified implementations of HOL Light]. ~ M.O. Myreen, S. Owens y R. Kumar &lt;br /&gt;
# [http://bit.ly/16Kbgm0 Generic datatypes à la carte]. ~ S. Keuchel y T. Schrijvers &lt;br /&gt;
# [http://bit.ly/1bqJGx4 Proof pearl: A verified bignum implementation in x86-64 machine code]. ~ M.O. Myreen y G. Curello &lt;br /&gt;
# [http://bit.ly/142ow2Q Mechanized metatheory for a λ λ-calculus with trust types]. ~ R. Ribeiro, C. Camarão y L. Figueiredo &lt;br /&gt;
# [http://bit.ly/15WZBDy Proving soundness of combinatorial Vickrey auctions and generating verified executable code]. ~ M.B. Caminati, M. Kerber, C. Lange y C. Rowat &lt;br /&gt;
# [http://bit.ly/198g4n9 A computer-assisted proof of correctness of a marching cubes algorithm]. ~ A.N. Chernikov y J. Xu &lt;br /&gt;
# [http://bit.ly/11QA5g7 Verifying the bridge between simplicial topology and algebra: the Eilenberg-Zilber algorithm]. ~ L. Lambán, J. Rubio, F.J. Martín y J.L. Ruiz &lt;br /&gt;
# [http://bit.ly/1cJAXYk The Königsberg bridge problem and the friendship theorem]. ~ W. Li &lt;br /&gt;
# [http://bit.ly/13DBK9R Formal verification of a proof procedure for the description logic ALC]. ~ M. Chaabani, M. Mezghiche y M. Strecker &lt;br /&gt;
# [http://bit.ly/1ep2ex9 Pratt’s primality certificates]. ~ S. Wimmer y L. Noschinski &lt;br /&gt;
# [http://bit.ly/13C95Ci Reasoning about higher-order relational specifications]. ~ Y. Wang, K. Chaudhuri, A. Gacek y G. Nadathur &lt;br /&gt;
# [http://bit.ly/18QQLcL Proofs you can believe in – Proving equivalences between Prolog semantics in Coq]. ~ J. Kriener, A. King y S. Blazy &lt;br /&gt;
# [http://bit.ly/19uc82J Certified, efficient and sharp univariate Taylor models in Coq]. ~ E. Martin-Dorel, L. Rideau, L. Théry, M. Mayero y I. Paşca &lt;br /&gt;
# [http://bit.ly/1c4Rzel Ordinals in HOL: Transfinite arithmetic up to (and beyond) ω₁]. ~ M. Norrish y B. Huffman   &lt;br /&gt;
# [http://bit.ly/14b4Akz Program verification based on Kleene algebra in Isabelle/HOL] ~ A. Armstrong, G. Struth y T. Weber &lt;br /&gt;
# [http://bit.ly/1aOgRKx Reading an algebra textbook (by translating it to a formal document in the Isabelle/Isar language)]. ~ C. Ballarin &lt;br /&gt;
# [http://bit.ly/11HKixj Computational verification of network programs in Coq]. ~ G. Stewart &lt;br /&gt;
# [http://www.glc.us.es/~jalonso/vestigium/resena-certifying-homological-algorithms-to-study-biomedical-images Certifying homological algorithms to study biomedical images]. ~ M. Poza &lt;br /&gt;
# [http://bit.ly/16Nks9m Formalizing cut elimination of coalgebraic logics in Coq]. ~ H. Tews &lt;br /&gt;
# [http://www.glc.us.es/~jalonso/vestigium/resena-the-formalization-of-syntax-based-mathematical-algorithms-using-quotation-and-evaluation/ The formalization of syntax-based mathematical algorithms using quotation and evaluation]. ~ W.M. Farmer &lt;br /&gt;
# [http://www.glc.us.es/~jalonso/vestigium/resena-certified-symbolic-manipulation-bivariate-simplicial-polynomials/ Certified symbolic manipulation: Bivariate simplicial polynomials]. ~ L. Lambán, F.J. Martín, J. Rubio y J.L. Ruiz &lt;br /&gt;
# [http://www.glc.us.es/~jalonso/vestigium/resena-solveurs-cpfd-verifies-formellement/ Solveurs CP(FD) vérifiés formellement]. ~ C Dubois y A. Gotlieb &lt;br /&gt;
# [http://www.glc.us.es/~jalonso/vestigium/resena-formalizing-bounded-increase/ Formalizing bounded increase]. ~ R. Thiemann &lt;br /&gt;
# [http://www.glc.us.es/~jalonso/vestigium/resena-formal-mathematics-on-display-a-wiki-for-flyspeck/ Formal mathematics on display: A wiki for Flyspeck]. ~ C. Tankink, C. Kaliszyk, J. Urban y H. Geuvers &lt;br /&gt;
# [http://www.glc.us.es/~jalonso/vestigium/resena-theorem-of-three-circles-in-coq Theorem of three circles in Coq]. ~ J. Zsidó &lt;br /&gt;
# [http://bit.ly/19fiWAY Certified HLints with Isabelle/HOLCF-Prelude]. ~ J. Breitner, B. Huffman, N. Mitchell y C. Sternagel &lt;br /&gt;
# [http://bit.ly/ZfSQrQ Automatic data refinement]. ~ P. Lammich &lt;br /&gt;
# [http://bit.ly/18vyjm7 The rooster and the butterflies (a machine-checked proof of the Jordan-Hölder theorem for finite groups)]. ~ A. Mahboubi &lt;br /&gt;
# [http://bit.ly/114oyZV Mechanical verification of SAT refutations with extended resolution]. ~ N. Wetzler, M.J.H. Heule y W.A. Hunt Jr. &lt;br /&gt;
# [http://bit.ly/13H0REu Type classes and filters for mathematical analysis in Isabelle/HOL] ~ J. Hölzl, F. Immler y B. Huffman &lt;br /&gt;
# [http://bit.ly/10fv8wO Verifying refutations with extended resolution]. ~ M. J. H. Heule, W. A. Hunt, Jr. y N. Wetzler  &lt;br /&gt;
# [http://bit.ly/10EcFWj A Web interface for Isabelle: The next generation]. ~ C. Lüth y M. Ring  &lt;br /&gt;
# [http://bit.ly/18P9CSv On the formalization of continuous-time Markov chains in HOL]. ~ L. Liu, O. Hasan y S. Tahar &lt;br /&gt;
# [http://bit.ly/17H2mqy Formalizing Turing machines]. ~ A. Asperti y W. Ricciotti &lt;br /&gt;
# [http://bit.ly/YwuCeL Light-weight containers for Isabelle: efficient, extensible, nestable]. ~ A. Lochbihler &lt;br /&gt;
# [http://bit.ly/10XLrRA Graph theory]. ~ L. Noschinski &lt;br /&gt;
# [http://bit.ly/19kPEP4 A machine-checked proof of the odd order theorem]. ~ G. Gonthier et als. &lt;br /&gt;
# [http://goo.gl/LdihL A constructive theory of regular languages in Coq]. ~ C. Doczkal, J.O. Kaiser y G. Smolka &lt;br /&gt;
# [http://goo.gl/gwcwL A formal proof of Kruskal’s tree theorem in Isabelle/HOL]. ~ C. Sternagel &lt;br /&gt;
# [http://goo.gl/CUF3e Formalizing Knuth-Bendix orders and Knuth-Bendix completion]. ~ C. Sternagel y R. Thiemann  &lt;br /&gt;
# [http://goo.gl/9JAfX Developing an auction theory toolbox]. ~ C. Lange, C. Rowat, W. Windsteiger y M. Kerber &lt;br /&gt;
# [http://goo.gl/6OfmQ Formalization of incremental simplex algorithm by stepwise refinement]. ~ M. Spasić y F. Marić  &lt;br /&gt;
# [http://goo.gl/Guxky Coinductive pearl: Modular first-order logic completeness]. ~ J.C. Blanchette, A. Popescu y D. Traytel &lt;br /&gt;
# [http://goo.gl/HUOl8 A fully verified executable LTL model checker]. ~ J. Esparza et als. &lt;br /&gt;
# [http://goo.gl/RV54S ForMaRE - formal mathematical reasoning in economics]. ~ M. Kerber, C. Lange y C. Rowat. &lt;br /&gt;
# [http://goo.gl/Y7sIq AI over large formal knowledge bases: The first decade]. ~ J. Urban. &lt;br /&gt;
# [http://goo.gl/vvqNg Formalization of real analysis: A survey of proof assistants and libraries]. ~ S. Boldo, C. Lelay y G. Melquiond. &lt;br /&gt;
# [http://goo.gl/bEFYa Data refinement in Isabelle/HOL]. ~ F. Haftmann, A. Krauss, O. Kunčar y T. Nipkow &lt;br /&gt;
# [http://goo.gl/xTyvE Formalizing the confluence of orthogonal rewriting systems]. ~ A.C. Rocha y M. Ayala. &lt;br /&gt;
# [http://goo.gl/zCYHj Formalization of the complex number theory in HOL4]. ~ Z. Shi et als. &lt;br /&gt;
# [http://goo.gl/kM0dI Programming and reasonning with PowerLists in Coq]. ~ F. Loulergue y V. Niculescu  &lt;br /&gt;
# [http://goo.gl/KkU6s A hierarchy of mathematical structures in ACL2]. ~ J. Heras, F.J. Martín y V. Pascual. &lt;br /&gt;
# [http://www.inf.kcl.ac.uk/staff/urbanc/Publications/tm.pdf Mechanising Turing Machines and Computability Theory in Isabelle/HOL] ~ J. Xu, X. Zhang y C. Urban&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_12e:_Sudoku&amp;diff=278</id>
		<title>Tema 12e: Sudoku</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_12e:_Sudoku&amp;diff=278"/>
		<updated>2015-01-29T12:14:36Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; (*  Title:      HOL/ex/Sudoku.thy     Author:     Tjark Weber     Copyright   2005-2014 *)  header {* A SAT-based Sudoku Solver *}  theory T12e_Sudoku impor...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
(*  Title:      HOL/ex/Sudoku.thy&lt;br /&gt;
    Author:     Tjark Weber&lt;br /&gt;
    Copyright   2005-2014&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
header {* A SAT-based Sudoku Solver *}&lt;br /&gt;
&lt;br /&gt;
theory T12e_Sudoku&lt;br /&gt;
imports Main&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  See the paper &amp;quot;A SAT-based Sudoku Solver&amp;quot; (Tjark Weber, published at&lt;br /&gt;
  LPAR&amp;#039;05) for further explanations.  (The paper describes an older &lt;br /&gt;
  version of this theory that used the model finder refute to find &lt;br /&gt;
  Sudoku solutions. The refute tool has since been superseded by &lt;br /&gt;
  nitpick, which is used below.)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
no_notation Groups.one_class.one (&amp;quot;1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
datatype digit = A (&amp;quot;1&amp;quot;) | B (&amp;quot;2&amp;quot;) | C (&amp;quot;3&amp;quot;) | D (&amp;quot;4&amp;quot;) | E (&amp;quot;5&amp;quot;) | &lt;br /&gt;
                 F (&amp;quot;6&amp;quot;) | G (&amp;quot;7&amp;quot;) | H (&amp;quot;8&amp;quot;) | I (&amp;quot;9&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
definition valid :: &amp;quot;digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; &lt;br /&gt;
                     digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; bool&amp;quot; where&lt;br /&gt;
  &amp;quot;valid x1 x2 x3 x4 x5 x6 x7 x8 x9 ≡&lt;br /&gt;
   (x1≠x2)∧(x1≠x3)∧(x1≠x4)∧(x1≠x5)∧(x1≠x6)∧(x1≠x7)∧(x1≠x8)∧(x1≠x9)&lt;br /&gt;
          ∧(x2≠x3)∧(x2≠x4)∧(x2≠x5)∧(x2≠x6)∧(x2≠x7)∧(x2≠x8)∧(x2≠x9)&lt;br /&gt;
                   ∧(x3≠x4)∧(x3≠x5)∧(x3≠x6)∧(x3≠x7)∧(x3≠x8)∧(x3≠x9)&lt;br /&gt;
                            ∧(x4≠x5)∧(x4≠x6)∧(x4≠x7)∧(x4≠x8)∧(x4≠x9)&lt;br /&gt;
                                     ∧(x5≠x6)∧(x5≠x7)∧(x5≠x8)∧(x5≠x9)&lt;br /&gt;
                                              ∧(x6≠x7)∧(x6≠x8)∧(x6≠x9)&lt;br /&gt;
                                                       ∧(x7≠x8)∧(x7≠x9)&lt;br /&gt;
                                                                ∧(x8≠x9)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
definition sudoku :: &lt;br /&gt;
  &amp;quot;digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt;&lt;br /&gt;
   digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt;&lt;br /&gt;
   digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt;&lt;br /&gt;
   digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt;&lt;br /&gt;
   digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt;&lt;br /&gt;
   digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt;&lt;br /&gt;
   digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt;&lt;br /&gt;
   digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt;&lt;br /&gt;
   digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; digit =&amp;gt; &lt;br /&gt;
   bool&amp;quot; where&lt;br /&gt;
  &amp;quot;sudoku x11 x12 x13 x14 x15 x16 x17 x18 x19&lt;br /&gt;
          x21 x22 x23 x24 x25 x26 x27 x28 x29&lt;br /&gt;
          x31 x32 x33 x34 x35 x36 x37 x38 x39&lt;br /&gt;
          x41 x42 x43 x44 x45 x46 x47 x48 x49&lt;br /&gt;
          x51 x52 x53 x54 x55 x56 x57 x58 x59&lt;br /&gt;
          x61 x62 x63 x64 x65 x66 x67 x68 x69&lt;br /&gt;
          x71 x72 x73 x74 x75 x76 x77 x78 x79&lt;br /&gt;
          x81 x82 x83 x84 x85 x86 x87 x88 x89&lt;br /&gt;
          x91 x92 x93 x94 x95 x96 x97 x98 x99 ≡&lt;br /&gt;
&lt;br /&gt;
       valid x11 x12 x13 x14 x15 x16 x17 x18 x19&lt;br /&gt;
     ∧ valid x21 x22 x23 x24 x25 x26 x27 x28 x29&lt;br /&gt;
     ∧ valid x31 x32 x33 x34 x35 x36 x37 x38 x39&lt;br /&gt;
     ∧ valid x41 x42 x43 x44 x45 x46 x47 x48 x49&lt;br /&gt;
     ∧ valid x51 x52 x53 x54 x55 x56 x57 x58 x59&lt;br /&gt;
     ∧ valid x61 x62 x63 x64 x65 x66 x67 x68 x69&lt;br /&gt;
     ∧ valid x71 x72 x73 x74 x75 x76 x77 x78 x79&lt;br /&gt;
     ∧ valid x81 x82 x83 x84 x85 x86 x87 x88 x89&lt;br /&gt;
     ∧ valid x91 x92 x93 x94 x95 x96 x97 x98 x99&lt;br /&gt;
&lt;br /&gt;
     ∧ valid x11 x21 x31 x41 x51 x61 x71 x81 x91&lt;br /&gt;
     ∧ valid x12 x22 x32 x42 x52 x62 x72 x82 x92&lt;br /&gt;
     ∧ valid x13 x23 x33 x43 x53 x63 x73 x83 x93&lt;br /&gt;
     ∧ valid x14 x24 x34 x44 x54 x64 x74 x84 x94&lt;br /&gt;
     ∧ valid x15 x25 x35 x45 x55 x65 x75 x85 x95&lt;br /&gt;
     ∧ valid x16 x26 x36 x46 x56 x66 x76 x86 x96&lt;br /&gt;
     ∧ valid x17 x27 x37 x47 x57 x67 x77 x87 x97&lt;br /&gt;
     ∧ valid x18 x28 x38 x48 x58 x68 x78 x88 x98&lt;br /&gt;
     ∧ valid x19 x29 x39 x49 x59 x69 x79 x89 x99&lt;br /&gt;
&lt;br /&gt;
     ∧ valid x11 x12 x13 x21 x22 x23 x31 x32 x33&lt;br /&gt;
     ∧ valid x14 x15 x16 x24 x25 x26 x34 x35 x36&lt;br /&gt;
     ∧ valid x17 x18 x19 x27 x28 x29 x37 x38 x39&lt;br /&gt;
     ∧ valid x41 x42 x43 x51 x52 x53 x61 x62 x63&lt;br /&gt;
     ∧ valid x44 x45 x46 x54 x55 x56 x64 x65 x66&lt;br /&gt;
     ∧ valid x47 x48 x49 x57 x58 x59 x67 x68 x69&lt;br /&gt;
     ∧ valid x71 x72 x73 x81 x82 x83 x91 x92 x93&lt;br /&gt;
     ∧ valid x74 x75 x76 x84 x85 x86 x94 x95 x96&lt;br /&gt;
     ∧ valid x77 x78 x79 x87 x88 x89 x97 x98 x99&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Just an arbitrary Sudoku grid:&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;¬ sudoku&lt;br /&gt;
    x11 x12 x13 x14 x15 x16 x17 x18 x19&lt;br /&gt;
    x21 x22 x23 x24 x25 x26 x27 x28 x29&lt;br /&gt;
    x31 x32 x33 x34 x35 x36 x37 x38 x39&lt;br /&gt;
    x41 x42 x43 x44 x45 x46 x47 x48 x49&lt;br /&gt;
    x51 x52 x53 x54 x55 x56 x57 x58 x59&lt;br /&gt;
    x61 x62 x63 x64 x65 x66 x67 x68 x69&lt;br /&gt;
    x71 x72 x73 x74 x75 x76 x77 x78 x79&lt;br /&gt;
    x81 x82 x83 x84 x85 x86 x87 x88 x89&lt;br /&gt;
    x91 x92 x93 x94 x95 x96 x97 x98 x99&amp;quot;&lt;br /&gt;
  nitpick [expect=genuine]&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  An ``easy&amp;#039;&amp;#039; Sudoku:&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;¬ sudoku&lt;br /&gt;
     5   3  x13 x14  7  x16 x17 x18 x19&lt;br /&gt;
     6  x22 x23  1   9   5  x27 x28 x29&lt;br /&gt;
    x31  9   8  x34 x35 x36 x37  6  x39&lt;br /&gt;
     8  x42 x43 x44  6  x46 x47 x48  3 &lt;br /&gt;
     4  x52 x53  8  x55  3  x57 x58  1 &lt;br /&gt;
     7  x62 x63 x64  2  x66 x67 x68  6 &lt;br /&gt;
    x71  6  x73 x74 x75 x76  2   8  x79&lt;br /&gt;
    x81 x82 x83  4   1   9  x87 x88  5 &lt;br /&gt;
    x91 x92 x93 x94  8  x96 x97  7   9 &amp;quot;&lt;br /&gt;
  nitpick [expect=genuine]&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  A ``hard&amp;#039;&amp;#039; Sudoku:&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;¬ sudoku&lt;br /&gt;
    x11  2  x13 x14 x15 x16 x17 x18 x19&lt;br /&gt;
    x21 x22 x23  6  x25 x26 x27 x28  3 &lt;br /&gt;
    x31  7   4  x34  8  x36 x37 x38 x39&lt;br /&gt;
    x41 x42 x43 x44 x45  3  x47 x48  2 &lt;br /&gt;
    x51  8  x53 x54  4  x56 x57  1  x59&lt;br /&gt;
     6  x62 x63  5  x65 x66 x67 x68 x69&lt;br /&gt;
    x71 x72 x73 x74  1  x76  7   8  x79&lt;br /&gt;
     5  x82 x83 x84 x85  9  x87 x88 x89&lt;br /&gt;
    x91 x92 x93 x94 x95 x96 x97  4  x99&amp;quot;&lt;br /&gt;
  nitpick [expect=genuine]&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Some ``exceptionally difficult&amp;#039;&amp;#039; Sudokus, taken from&lt;br /&gt;
  @{url &amp;quot;http://en.wikipedia.org/w/index.php?title=Algorithmics_of_sudoku&amp;amp;oldid=254685903&amp;quot;}&lt;br /&gt;
  (accessed December~2, 2008).&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
\begin{verbatim}&lt;br /&gt;
Rating Program: gsf&amp;#039;s sudoku q1 (rating) &lt;br /&gt;
Rating: 99408 &lt;br /&gt;
Poster: JPF &lt;br /&gt;
Label: Easter Monster &lt;br /&gt;
1.......2.9.4...5...6...7...5.9.3.......7.......85..4.7.....6...3...9.8...2.....1 &lt;br /&gt;
1 . . | . . . | . . 2  &lt;br /&gt;
. 9 . | 4 . . | . 5 .  &lt;br /&gt;
. . 6 | . . . | 7 . .  &lt;br /&gt;
------+-------+------ &lt;br /&gt;
. 5 . | 9 . 3 | . . .  &lt;br /&gt;
. . . | . 7 . | . . .  &lt;br /&gt;
. . . | 8 5 . | . 4 .  &lt;br /&gt;
------+-------+------ &lt;br /&gt;
7 . . | . . . | 6 . .  &lt;br /&gt;
. 3 . | . . 9 | . 8 .  &lt;br /&gt;
. . 2 | . . . | . . 1  &lt;br /&gt;
\end{verbatim}&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;¬ sudoku&lt;br /&gt;
     1  x12 x13 x14 x15 x16 x17 x18  2 &lt;br /&gt;
    x21  9  x23  4  x25 x26 x27  5  x29&lt;br /&gt;
    x31 x32  6  x34 x35 x36  7  x38 x39&lt;br /&gt;
    x41  5  x43  9  x45  3  x47 x48 x49&lt;br /&gt;
    x51 x52 x53 x54  7  x56 x57 x58 x59&lt;br /&gt;
    x61 x62 x63  8   5  x66 x67  4  x69&lt;br /&gt;
     7  x72 x73 x74 x75 x76  6  x78 x79&lt;br /&gt;
    x81  3  x83 x84 x85  9  x87  8  x89&lt;br /&gt;
    x91 x92  2  x94 x95 x96 x97 x98  1 &amp;quot;&lt;br /&gt;
  nitpick [expect=genuine]&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
\begin{verbatim}&lt;br /&gt;
Rating Program: gsf&amp;#039;s sudoku q1 (Processing time) &lt;br /&gt;
Rating: 4m19s@2 GHz &lt;br /&gt;
Poster: tarek &lt;br /&gt;
Label: tarek071223170000-052 &lt;br /&gt;
..1..4.......6.3.5...9.....8.....7.3.......285...7.6..3...8...6..92......4...1... &lt;br /&gt;
. . 1 | . . 4 | . . .  &lt;br /&gt;
. . . | . 6 . | 3 . 5  &lt;br /&gt;
. . . | 9 . . | . . .  &lt;br /&gt;
------+-------+------ &lt;br /&gt;
8 . . | . . . | 7 . 3  &lt;br /&gt;
. . . | . . . | . 2 8  &lt;br /&gt;
5 . . | . 7 . | 6 . .  &lt;br /&gt;
------+-------+------ &lt;br /&gt;
3 . . | . 8 . | . . 6  &lt;br /&gt;
. . 9 | 2 . . | . . .  &lt;br /&gt;
. 4 . | . . 1 | . . .  &lt;br /&gt;
\end{verbatim}&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;¬ sudoku&lt;br /&gt;
    x11 x12  1  x14 x15  4  x17 x18 x19&lt;br /&gt;
    x21 x22 x23 x24  6  x26  3  x28  5 &lt;br /&gt;
    x31 x32 x33  9  x35 x36 x37 x38 x39&lt;br /&gt;
     8  x42 x43 x44 x45 x46  7  x48  3 &lt;br /&gt;
    x51 x52 x53 x54 x55 x56 x57  2   8 &lt;br /&gt;
     5  x62 x63 x64  7  x66  6  x68 x69&lt;br /&gt;
     3  x72 x73 x74  8  x76 x77 x78  6 &lt;br /&gt;
    x81 x82  9   2  x85 x86 x87 x88 x89&lt;br /&gt;
    x91  4  x93 x94 x95  1  x97 x98 x99&amp;quot;&lt;br /&gt;
  nitpick [expect=genuine]&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
\begin{verbatim}&lt;br /&gt;
Rating Program: Nicolas Juillerat&amp;#039;s Sudoku explainer 1.2.1 &lt;br /&gt;
Rating: 11.9 &lt;br /&gt;
Poster: tarek &lt;br /&gt;
Label: golden nugget &lt;br /&gt;
.......39.....1..5..3.5.8....8.9...6.7...2...1..4.......9.8..5..2....6..4..7..... &lt;br /&gt;
. . . | . . . | . 3 9  &lt;br /&gt;
. . . | . . 1 | . . 5  &lt;br /&gt;
. . 3 | . 5 . | 8 . .  &lt;br /&gt;
------+-------+------ &lt;br /&gt;
. . 8 | . 9 . | . . 6  &lt;br /&gt;
. 7 . | . . 2 | . . .  &lt;br /&gt;
1 . . | 4 . . | . . .  &lt;br /&gt;
------+-------+------ &lt;br /&gt;
. . 9 | . 8 . | . 5 .  &lt;br /&gt;
. 2 . | . . . | 6 . .  &lt;br /&gt;
4 . . | 7 . . | . . .  &lt;br /&gt;
\end{verbatim}&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;¬ sudoku&lt;br /&gt;
    x11 x12 x13 x14 x15 x16 x17  3   9 &lt;br /&gt;
    x21 x22 x23 x24 x25  1  x27 x28  5 &lt;br /&gt;
    x31 x32  3  x34  5  x36  8  x38 x39&lt;br /&gt;
    x41 x42  8  x44  9  x46 x47 x48  6 &lt;br /&gt;
    x51  7  x53 x54 x55  2  x57 x58 x59&lt;br /&gt;
     1  x62 x63  4  x65 x66 x67 x68 x69&lt;br /&gt;
    x71 x72  9  x74  8  x76 x77  5  x79&lt;br /&gt;
    x81  2  x83 x84 x85 x86  6  x88 x89&lt;br /&gt;
     4  x92 x93  7  x95 x96 x97 x98 x99&amp;quot;&lt;br /&gt;
  nitpick [expect=genuine]&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
\begin{verbatim}&lt;br /&gt;
Rating Program: dukuso&amp;#039;s suexrat9 &lt;br /&gt;
Rating: 4483 &lt;br /&gt;
Poster: coloin &lt;br /&gt;
Label: col-02-08-071 &lt;br /&gt;
.2.4.37.........32........4.4.2...7.8...5.........1...5.....9...3.9....7..1..86.. &lt;br /&gt;
. 2 . | 4 . 3 | 7 . .  &lt;br /&gt;
. . . | . . . | . 3 2  &lt;br /&gt;
. . . | . . . | . . 4  &lt;br /&gt;
------+-------+------ &lt;br /&gt;
. 4 . | 2 . . | . 7 .  &lt;br /&gt;
8 . . | . 5 . | . . .  &lt;br /&gt;
. . . | . . 1 | . . .  &lt;br /&gt;
------+-------+------ &lt;br /&gt;
5 . . | . . . | 9 . .  &lt;br /&gt;
. 3 . | 9 . . | . . 7  &lt;br /&gt;
. . 1 | . . 8 | 6 . .  &lt;br /&gt;
\end{verbatim}&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;¬ sudoku&lt;br /&gt;
    x11  2  x13  4  x15  3   7  x18 x19&lt;br /&gt;
    x21 x22 x23 x24 x25 x26 x27  3   2 &lt;br /&gt;
    x31 x32 x33 x34 x35 x36 x37 x38  4 &lt;br /&gt;
    x41  4  x43  2  x45 x46 x47  7  x49&lt;br /&gt;
     8  x52 x53 x54  5  x56 x57 x58 x59&lt;br /&gt;
    x61 x62 x63 x64 x65  1  x67 x68 x69&lt;br /&gt;
     5  x72 x73 x74 x75 x76  9  x78 x79&lt;br /&gt;
    x81  3  x83  9  x85 x86 x87 x88  7 &lt;br /&gt;
    x91 x92  1  x94 x95  8   6  x98 x99&amp;quot;&lt;br /&gt;
  nitpick [expect=genuine]&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
\begin{verbatim}&lt;br /&gt;
Rating Program: dukuso&amp;#039;s suexratt (10000 2 option) &lt;br /&gt;
Rating: 2141 &lt;br /&gt;
Poster: tarek &lt;br /&gt;
Label: golden nugget &lt;br /&gt;
.......39.....1..5..3.5.8....8.9...6.7...2...1..4.......9.8..5..2....6..4..7..... &lt;br /&gt;
. . . | . . . | . 3 9  &lt;br /&gt;
. . . | . . 1 | . . 5  &lt;br /&gt;
. . 3 | . 5 . | 8 . .  &lt;br /&gt;
------+-------+------ &lt;br /&gt;
. . 8 | . 9 . | . . 6  &lt;br /&gt;
. 7 . | . . 2 | . . .  &lt;br /&gt;
1 . . | 4 . . | . . .  &lt;br /&gt;
------+-------+------ &lt;br /&gt;
. . 9 | . 8 . | . 5 .  &lt;br /&gt;
. 2 . | . . . | 6 . .  &lt;br /&gt;
4 . . | 7 . . | . . .&lt;br /&gt;
\end{verbatim}&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;¬ sudoku&lt;br /&gt;
    x11 x12 x13 x14 x15 x16 x17  3   9 &lt;br /&gt;
    x21 x22 x23 x24 x25  1  x27 x28  5 &lt;br /&gt;
    x31 x32  3  x34  5  x36  8  x38 x39&lt;br /&gt;
    x41 x42  8  x44  9  x46 x47 x48  6 &lt;br /&gt;
    x51  7  x53 x54 x55  2  x57 x58 x59&lt;br /&gt;
     1  x62 x63  4  x65 x66 x67 x68 x69&lt;br /&gt;
    x71 x72  9  x74  8  x76 x77  5  x79&lt;br /&gt;
    x81  2  x83 x84 x85 x86  6  x88 x89&lt;br /&gt;
     4  x92 x93  7  x95 x96 x97 x98 x99&amp;quot;&lt;br /&gt;
  nitpick [expect=genuine]&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_12d:_Pasos_elementales&amp;diff=277</id>
		<title>Tema 12d: Pasos elementales</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_12d:_Pasos_elementales&amp;diff=277"/>
		<updated>2015-01-29T12:13:52Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* T12d: Pasos elementales *}  theory T12d_Pasos_elementales imports Main begin  text {* &amp;quot;thm&amp;quot; escribe el enunciado de los teoremas cuyos nombres se ...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* T12d: Pasos elementales *}&lt;br /&gt;
&lt;br /&gt;
theory T12d_Pasos_elementales&lt;br /&gt;
imports Main&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* &amp;quot;thm&amp;quot; escribe el enunciado de los teoremas cuyos nombres se&lt;br /&gt;
  indican. *}&lt;br /&gt;
thm conjI impI iffI notI&lt;br /&gt;
&lt;br /&gt;
text{* Instanciación de teoremas con &amp;quot;of&amp;quot;: *}&lt;br /&gt;
thm conjI&lt;br /&gt;
thm conjI[of &amp;quot;A&amp;quot; &amp;quot;B&amp;quot;]&lt;br /&gt;
thm conjI[of &amp;quot;A&amp;quot;]&lt;br /&gt;
thm conjI[of _ &amp;quot;B&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
text{* Instanciación de teoremas con &amp;quot;where&amp;quot;: *}&lt;br /&gt;
thm conjI&lt;br /&gt;
thm conjI [where ?Q = &amp;quot;B&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
text {* Composición de teoremas con &amp;quot;OF&amp;quot;: *}&lt;br /&gt;
thm refl&lt;br /&gt;
thm refl [of &amp;quot;a&amp;quot;]&lt;br /&gt;
thm conjI&lt;br /&gt;
thm conjI [OF refl [of &amp;quot;a&amp;quot;] refl [of &amp;quot;b&amp;quot;]]&lt;br /&gt;
thm conjI [OF refl [of &amp;quot;a&amp;quot;]]&lt;br /&gt;
thm conjI [OF _ refl [of &amp;quot;b&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
text {* Una demostración por razonamiento hacia atrás: *}&lt;br /&gt;
lemma &amp;quot;⟦ A; B ⟧ ⟹ A ∧ B&amp;quot;&lt;br /&gt;
apply (rule conjI)&lt;br /&gt;
apply assumption&lt;br /&gt;
apply assumption&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
text {* Indicación de regla de introducción a &amp;quot;blast&amp;quot;: *}&lt;br /&gt;
&lt;br /&gt;
thm le_trans&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;⟦ (a::nat) ≤ b; b ≤ c; c ≤ d ⟧ ⟹ a ≤ d&amp;quot;&lt;br /&gt;
by (blast intro: le_trans)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_12c:_Automatizaci%C3%B3n&amp;diff=276</id>
		<title>Tema 12c: Automatización</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_12c:_Automatizaci%C3%B3n&amp;diff=276"/>
		<updated>2015-01-29T12:13:02Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* T12c: Automatización *}  theory T12c_Automatizacion imports Main begin  section {* Lógica y conjuntos *}  subsection {* Demostraciones con auto ...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* T12c: Automatización *}&lt;br /&gt;
&lt;br /&gt;
theory T12c_Automatizacion&lt;br /&gt;
imports Main&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Lógica y conjuntos *}&lt;br /&gt;
&lt;br /&gt;
subsection {* Demostraciones con auto *}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;∀x. ∃y. x=y&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;A ⊆ B ∩ C ⟹ A ⊆ B ∪ C&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
subsection {* Demostraciones con fastforce *}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;⟦ ∀xs ∈ A. ∃ys. xs = ys @ ys;  us:A ⟧ ⟹ ∃n. length us = n+n&amp;quot;&lt;br /&gt;
by fastforce&lt;br /&gt;
&lt;br /&gt;
text {* Nota: Obsérvese la notación de los cuantificadores acotados: *} &lt;br /&gt;
&lt;br /&gt;
text {* Nota: Con auto no se puede probar el lema anterior. *}&lt;br /&gt;
&lt;br /&gt;
subsection {* Demostraciones con blast *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota: Muchas propiedades de la LPO y de la teoría de conjuntos se&lt;br /&gt;
  pueden demostrar automáticamente.&lt;br /&gt;
&lt;br /&gt;
  Prop.: Si T es total, A es antisimétrica y T es un subconjunto de A,&lt;br /&gt;
  entonces A es un subconjunto de T.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma AT:&lt;br /&gt;
  &amp;quot;⟦ ∀x y. T x y ∨ T y x;&lt;br /&gt;
     ∀x y. A x y ∧ A y x ⟶ x = y;&lt;br /&gt;
     ∀x y. T x y ⟶ A x y ⟧&lt;br /&gt;
   ⟹ ∀x y. A x y ⟶ T x y&amp;quot;&lt;br /&gt;
by blast&lt;br /&gt;
&lt;br /&gt;
text {* Nota: Con auto no se puede probar el lema anterior. *}&lt;br /&gt;
&lt;br /&gt;
section{* Sledgehammer *}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;⟦xs @ ys = ys @ xs; length xs = length ys⟧ ⟹ xs = ys&amp;quot;&lt;br /&gt;
by (metis append_eq_conv_conj)&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;R^* ⊆ (R ∪ S)^*&amp;quot;&lt;br /&gt;
by (metis Un_upper1 rtrancl_mono)&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;a # xs = ys @ [a] ⟹ P&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;xs @ ys = ys @ xs ⟹ P&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
section {* Aritmética *}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;⟦ (a::nat) ≤ x + b; 2*x &amp;lt; c ⟧ ⟹ 2*a+1 ≤ 2*b+c&amp;quot;&lt;br /&gt;
by arith&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_12b:_Razonamiento_modular&amp;diff=275</id>
		<title>Tema 12b: Razonamiento modular</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_12b:_Razonamiento_modular&amp;diff=275"/>
		<updated>2015-01-29T12:12:10Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* T12b: Razonamiento modular mediante entornos locales *}  theory T12b_Razonamiento_modular imports Main begin  text {*   Basado en    http://www.cs...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* T12b: Razonamiento modular mediante entornos locales *}&lt;br /&gt;
&lt;br /&gt;
theory T12b_Razonamiento_modular&lt;br /&gt;
imports Main&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Basado en &lt;br /&gt;
  http://www.cse.unsw.edu.au/~kleing/teaching/thprv-04/slides/Demo14.thy&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
section {* Ejemplo 1 *}&lt;br /&gt;
&lt;br /&gt;
locale semi =&lt;br /&gt;
  fixes prod :: &amp;quot;[&amp;#039;a, &amp;#039;a] =&amp;gt; &amp;#039;a&amp;quot; (infixl &amp;quot;⋅&amp;quot; 70)&lt;br /&gt;
  assumes assoc: &amp;quot;(x ⋅ y) ⋅ z = x ⋅ (y ⋅ z)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
locale group = semi +&lt;br /&gt;
  fixes one (&amp;quot;𝟭&amp;quot;) and inv (&amp;quot;_⇧-&amp;quot; [100] 100)&lt;br /&gt;
  assumes l_one: &amp;quot;𝟭 ⋅ x = x&amp;quot;&lt;br /&gt;
  assumes l_inv: &amp;quot;x⇧-⋅ x = 𝟭&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma (in group) r_inv: &lt;br /&gt;
  &amp;quot;x ⋅ x⇧- = 𝟭&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;x ⋅ x⇧- = 𝟭 ⋅ (x ⋅ x⇧-)&amp;quot; by (simp only: l_one)&lt;br /&gt;
  also have &amp;quot;… = (𝟭 ⋅ x) ⋅ x⇧-&amp;quot; by (simp only: assoc)&lt;br /&gt;
  also have &amp;quot;… = (((x⇧-)⇧- ⋅ x⇧-) ⋅ x) ⋅ x⇧-&amp;quot; by (simp only: l_inv)&lt;br /&gt;
  also have &amp;quot;… = ((x⇧-)⇧- ⋅ (x⇧- ⋅ x)) ⋅ x⇧-&amp;quot; by (simp only: assoc)&lt;br /&gt;
  also have &amp;quot;… = ((x⇧-)⇧- ⋅ 𝟭) ⋅ x⇧-&amp;quot; by (simp only: l_inv)&lt;br /&gt;
  also have &amp;quot;… = (x⇧-)⇧- ⋅ (𝟭 ⋅ x⇧-)&amp;quot; by (simp only: assoc)&lt;br /&gt;
  also have &amp;quot;… = (x⇧-)⇧- ⋅ x⇧-&amp;quot; by (simp only: l_one)&lt;br /&gt;
  also have &amp;quot;… = 𝟭&amp;quot; by (simp only: l_inv)&lt;br /&gt;
  finally show ?thesis .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma (in group) r_one: &lt;br /&gt;
  &amp;quot;x ⋅ 𝟭 = x&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;x ⋅ 𝟭 = x ⋅ (x⇧- ⋅ x)&amp;quot; by (simp only: l_inv)&lt;br /&gt;
  also have &amp;quot;… = (x ⋅ x⇧-) ⋅ x&amp;quot; by (simp only: assoc)&lt;br /&gt;
  also have &amp;quot;… = 𝟭 ⋅ x&amp;quot; by (simp only: r_inv)&lt;br /&gt;
  also have &amp;quot;… = x&amp;quot; by (simp only: l_one)&lt;br /&gt;
  finally show &amp;quot;x ⋅ 𝟭 = x&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma (in group) l_cancel [simp]: &lt;br /&gt;
  &amp;quot;(x ⋅ y = x ⋅ z) = (y = z)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;x ⋅ y = x ⋅ z&amp;quot;&lt;br /&gt;
  then have &amp;quot;(x⇧- ⋅ x) ⋅ y = (x⇧- ⋅ x) ⋅ z&amp;quot; by (simp add: assoc)&lt;br /&gt;
  then show &amp;quot;y = z&amp;quot; by (simp add: l_inv l_one)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;y = z&amp;quot;&lt;br /&gt;
  then show &amp;quot;x ⋅ y = x ⋅ z&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
subsection {* Exportación *}&lt;br /&gt;
&lt;br /&gt;
thm semi.assoc group.l_cancel&lt;br /&gt;
&lt;br /&gt;
subsection {* Definiciones *}&lt;br /&gt;
&lt;br /&gt;
locale semi2 = semi +&lt;br /&gt;
  fixes rprod (infixl &amp;quot;⊙&amp;quot; 70)&lt;br /&gt;
  defines rprod_def: &amp;quot;rprod x y ≡ y ⋅ x &amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma (in semi2) r_assoc:&lt;br /&gt;
  &amp;quot;(x ⊙ y) ⊙ z = x ⊙ (y ⊙ z)&amp;quot;&lt;br /&gt;
by (simp only: rprod_def assoc)&lt;br /&gt;
&lt;br /&gt;
thm semi2.r_assoc&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_12a:_Razonamiento_modular_(Teor%C3%ADa_de_grupos)&amp;diff=274</id>
		<title>Tema 12a: Razonamiento modular (Teoría de grupos)</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_12a:_Razonamiento_modular_(Teor%C3%ADa_de_grupos)&amp;diff=274"/>
		<updated>2015-01-29T12:11:13Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* T12a: Razonamiento modular. La teoría de grupos *}  theory T12a_Razonamiento_modular_Teoria_de_grupos imports Main begin  text {*   El objetivo d...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* T12a: Razonamiento modular. La teoría de grupos *}&lt;br /&gt;
&lt;br /&gt;
theory T12a_Razonamiento_modular_Teoria_de_grupos&lt;br /&gt;
imports Main&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El objetivo de este tema es mostrar cómo se puede trabajar en&lt;br /&gt;
  estructuras algebraicas por medio de locales. Se usará como ejemplo la&lt;br /&gt;
  teoría de grupos. *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo 1. Un grupo es una estructura (G,·,𝟭,^) tal que G es un&lt;br /&gt;
  conjunto, · es una operación binaria en G, 𝟭 es un elemento de G y ^&lt;br /&gt;
  es una función de G en G tales que se cumplen las siguientes&lt;br /&gt;
  propiedades:&lt;br /&gt;
  * asociativa: ∀x y z. x ⋅ (y ⋅ z) = (x ⋅ y) ⋅ z&lt;br /&gt;
  * neutro por la izquierda: ∀x. 𝟭 ⋅ x = x&lt;br /&gt;
  * inverso por la izquierda: ∀x. x^ ⋅ x = 𝟭 &lt;br /&gt;
  Definir el entorno axiomático de los grupos. *}&lt;br /&gt;
&lt;br /&gt;
locale grupo = &lt;br /&gt;
  fixes prod :: &amp;quot;[&amp;#039;a, &amp;#039;a] ⇒ &amp;#039;a&amp;quot; (infixl &amp;quot;⋅&amp;quot; 70)&lt;br /&gt;
    and neutro (&amp;quot;𝟭&amp;quot;) &lt;br /&gt;
    and inverso (&amp;quot;_^&amp;quot; [100] 100)&lt;br /&gt;
  assumes asociativa: &amp;quot;(x ⋅ y) ⋅ z = x ⋅ (y ⋅ z)&amp;quot;&lt;br /&gt;
      and neutro_i:   &amp;quot;𝟭 ⋅ x = x&amp;quot;&lt;br /&gt;
      and inverso_i:  &amp;quot;x^ ⋅ x = 𝟭&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Notas sobre notación:&lt;br /&gt;
  * El producto es ⋅ y se escribe con \ cdot (sin espacio entre ellos). &lt;br /&gt;
  * El neutro es 𝟭 y se escribe con \ y &amp;lt;one&amp;gt; (sin espacio entre ellos).&lt;br /&gt;
  * El inverso de x es x^ y se escribe con pulsando 2 veces en ^. *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  A continuación se crea un contexto en el que se supone la notación y&lt;br /&gt;
  axiomas de grupos. En el contexto se demuestran propiedades de los&lt;br /&gt;
  grupos. *}&lt;br /&gt;
&lt;br /&gt;
context grupo&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo 2. En los grupos, x^ también es el inverso de x por la&lt;br /&gt;
  derecha; es decir &lt;br /&gt;
     x ⋅ x^ = 𝟭   *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática (obtenida con Sledgehammer) es&amp;quot;&lt;br /&gt;
lemma inverso_d: &lt;br /&gt;
  &amp;quot;x ⋅ x^ = 𝟭&amp;quot;&lt;br /&gt;
by (metis asociativa inverso_i neutro_i)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma inverso_d_2: &lt;br /&gt;
  &amp;quot;x ⋅ x^ = 𝟭&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;x ⋅ x^ = 𝟭 ⋅ (x ⋅ x^)&amp;quot; by (simp only: neutro_i)&lt;br /&gt;
  also have &amp;quot;… = (𝟭 ⋅ x) ⋅ x^&amp;quot; by (simp only: asociativa)&lt;br /&gt;
  also have &amp;quot;… = (((x^)^ ⋅ x^) ⋅ x) ⋅ x^&amp;quot; by (simp only: inverso_i)&lt;br /&gt;
  also have &amp;quot;… = ((x^)^ ⋅ (x^ ⋅ x)) ⋅ x^&amp;quot; by (simp only: asociativa)&lt;br /&gt;
  also have &amp;quot;… = ((x^)^ ⋅ 𝟭) ⋅ x^&amp;quot; by (simp only: inverso_i)&lt;br /&gt;
  also have &amp;quot;… = (x^)^ ⋅ (𝟭 ⋅ x^)&amp;quot; by (simp only: asociativa)&lt;br /&gt;
  also have &amp;quot;… = (x^)^ ⋅ x^&amp;quot; by (simp only: neutro_i)&lt;br /&gt;
  also have &amp;quot;… = 𝟭&amp;quot; by (simp only: inverso_i)&lt;br /&gt;
  finally show ?thesis .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo 2. En los grupos, 𝟭 también es el neutro por la derecha; es decir &lt;br /&gt;
     x ⋅ 𝟭 = x   *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es (obtenida con Sledgehammer) es&amp;quot;&lt;br /&gt;
lemma neutro_d: &lt;br /&gt;
  &amp;quot;x ⋅ 𝟭 = x&amp;quot;&lt;br /&gt;
by (metis asociativa inverso_i neutro_i)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma neutro_d_2: &lt;br /&gt;
  &amp;quot;x ⋅ 𝟭 = x&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;x ⋅ 𝟭 = x ⋅ (x^ ⋅ x)&amp;quot; by (simp only: inverso_i)&lt;br /&gt;
  also have &amp;quot;… = (x ⋅ x^) ⋅ x&amp;quot; by (simp only: asociativa)&lt;br /&gt;
  also have &amp;quot;… = 𝟭 ⋅ x&amp;quot; by (simp only: inverso_d)&lt;br /&gt;
  also have &amp;quot;… = x&amp;quot; by (simp only: neutro_i)&lt;br /&gt;
  finally show &amp;quot;x ⋅ 𝟭 = x&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo 3. En los grupos, se tiene la propiedad cancelativa por la&lt;br /&gt;
  izquierda; es decir,&lt;br /&gt;
     x ⋅ y = x ⋅ z syss y = z   *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es (obtenida con Sledgehammer) es&amp;quot;&lt;br /&gt;
lemma cancelativa_i: &lt;br /&gt;
  &amp;quot;(x ⋅ y = x ⋅ z) = (y = z)&amp;quot;&lt;br /&gt;
by (metis asociativa inverso_i neutro_i)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma cancelativa_i_2: &lt;br /&gt;
  &amp;quot;(x ⋅ y = x ⋅ z) = (y = z)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;x ⋅ y = x ⋅ z&amp;quot;&lt;br /&gt;
  hence &amp;quot;x^ ⋅ (x ⋅ y) = x^ ⋅ (x ⋅ z)&amp;quot; by simp&lt;br /&gt;
  hence &amp;quot;(x^ ⋅ x) ⋅ y = (x^ ⋅ x) ⋅ z&amp;quot; by (simp only: asociativa)&lt;br /&gt;
  hence &amp;quot;𝟭 ⋅ y = 𝟭 ⋅ z&amp;quot; by (simp only: inverso_i)&lt;br /&gt;
  thus &amp;quot;y = z&amp;quot; by (simp only: neutro_i)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;y = z&amp;quot;&lt;br /&gt;
  then show &amp;quot;x ⋅ y = x ⋅ z&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo 4. En los grupos, el elemento neutro por la izquierda es&lt;br /&gt;
  único; es decir, si e es un elemento tal que para todo x se tiene que &lt;br /&gt;
  e ⋅ x = x, entonces e = 𝟭. *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es (obtenida con Sledgehammer) es&amp;quot;&lt;br /&gt;
lemma unicidad_neutro_i:&lt;br /&gt;
  assumes &amp;quot;e ⋅ x = x&amp;quot;&lt;br /&gt;
  shows &amp;quot;𝟭 = e&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by (metis asociativa inverso_i neutro_i)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma unicidad_neutro_i_2:&lt;br /&gt;
  assumes &amp;quot;e ⋅ x = x&amp;quot;&lt;br /&gt;
  shows &amp;quot;𝟭 = e&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;𝟭 = x ⋅ x^&amp;quot; by (simp only: inverso_d)&lt;br /&gt;
  also have &amp;quot;... = (e ⋅ x) ⋅ x^&amp;quot; using assms by simp&lt;br /&gt;
  also have &amp;quot;... = e ⋅ (x ⋅ x^)&amp;quot; by (simp only: asociativa)&lt;br /&gt;
  also have &amp;quot;... = e ⋅ 𝟭&amp;quot; by (simp only: inverso_d)&lt;br /&gt;
  also have &amp;quot;... = e&amp;quot; by (simp only: neutro_d)&lt;br /&gt;
  finally show ?thesis .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo 5. En los grupos, los inversos por la izquierda son únicos; es&lt;br /&gt;
  decir, si x&amp;#039; es un elemento tal que x&amp;#039; ⋅ x = 𝟭, entonces x^ x&amp;#039;. *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es (obtenida con Sledgehammer) es&amp;quot;&lt;br /&gt;
lemma unicidad_inverso_i:&lt;br /&gt;
  assumes &amp;quot;x&amp;#039; ⋅ x = 𝟭&amp;quot;&lt;br /&gt;
  shows &amp;quot;x^ = x&amp;#039;&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by (metis asociativa inverso_i neutro_i)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma unicidad_inverso_i_2:&lt;br /&gt;
  assumes &amp;quot;x&amp;#039; ⋅ x = 𝟭&amp;quot;&lt;br /&gt;
  shows &amp;quot;x^ = x&amp;#039;&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;x^ = 𝟭 ⋅ x^&amp;quot; by (simp only: neutro_i)&lt;br /&gt;
  also have &amp;quot;... = (x&amp;#039; ⋅ x) ⋅ x^&amp;quot; using assms by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;#039; ⋅ (x ⋅ x^)&amp;quot; by (simp only: asociativa)&lt;br /&gt;
  also have &amp;quot;... = x&amp;#039; ⋅ 𝟭&amp;quot; by (simp only: inverso_d)&lt;br /&gt;
  also have &amp;quot;... = x&amp;#039;&amp;quot; by (simp only: neutro_d)&lt;br /&gt;
  finally show ?thesis .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo 6. En los grupos, es inverso de un producto es el producto de&lt;br /&gt;
  los inversos cambiados de orden; es decir,&lt;br /&gt;
     (x ⋅ y)^ = y^ ⋅ x^    *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es (obtenida con Sledgehammer) es&amp;quot;&lt;br /&gt;
lemma inversa_producto:&lt;br /&gt;
  &amp;quot;(x ⋅ y)^ = y^ ⋅ x^&amp;quot;&lt;br /&gt;
by (metis asociativa inverso_i neutro_i)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma inversa_producto_2:&lt;br /&gt;
  &amp;quot;(x ⋅ y)^ = y^ ⋅ x^&amp;quot;&lt;br /&gt;
proof (rule unicidad_inverso_i)&lt;br /&gt;
  show &amp;quot;(y^ ⋅ x^) ⋅ (x ⋅ y) = 𝟭&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    have &amp;quot;(y^ ⋅ x^) ⋅ (x ⋅ y) = (y^ ⋅ (x^ ⋅ x)) ⋅ y&amp;quot; by (simp only: asociativa)&lt;br /&gt;
    also have &amp;quot;... = (y^ ⋅ 𝟭) ⋅ y&amp;quot; by (simp only: inverso_i)&lt;br /&gt;
    also have &amp;quot;... = y^ ⋅ y&amp;quot; by (simp only: neutro_d)&lt;br /&gt;
    also have &amp;quot;... = 𝟭&amp;quot; by (simp only: inverso_i)&lt;br /&gt;
    finally show ?thesis .&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo 7. En los grupos, el inverso del inverso es el propio&lt;br /&gt;
  elemento; es decir, &lt;br /&gt;
     (x^)^ = x    *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es (obtenida con Sledgehammer) es&amp;quot;&lt;br /&gt;
lemma inverso_inverso: &lt;br /&gt;
  &amp;quot;(x^)^ = x&amp;quot;&lt;br /&gt;
by (metis inverso_d unicidad_inverso_i)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma inverso_inverso_2: &lt;br /&gt;
  &amp;quot;(x^)^ = x&amp;quot;&lt;br /&gt;
proof (rule unicidad_inverso_i)&lt;br /&gt;
  show &amp;quot;x ⋅ x^ = 𝟭&amp;quot; by (simp only: inverso_d)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo 8. En los grupos, la función inversa es inyectiva; es decir,&lt;br /&gt;
  si x e y tienen los mismos inversos, entonces son iguales. *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es (obtenida con Sledgehammer) es&amp;quot;&lt;br /&gt;
lemma inversa_inyectiva:&lt;br /&gt;
  assumes &amp;quot;x^ = y^&amp;quot;&lt;br /&gt;
  shows &amp;quot;x = y&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by (metis inverso_inverso)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática estructurada es&amp;quot;&lt;br /&gt;
lemma inversa_inyectiva_2:&lt;br /&gt;
  assumes &amp;quot;x^ = y^&amp;quot;&lt;br /&gt;
  shows &amp;quot;x = y&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;(x^)^ = (y^)^&amp;quot; using assms by simp&lt;br /&gt;
  thus &amp;quot;x = y&amp;quot; by (simp only: inverso_inverso)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_11:_Gram%C3%A1ticas_libre_de_contexto&amp;diff=273</id>
		<title>Tema 11: Gramáticas libre de contexto</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_11:_Gram%C3%A1ticas_libre_de_contexto&amp;diff=273"/>
		<updated>2015-01-29T12:10:21Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* T11: Gramáticas libres de contexto *}  theory T11_Gramaticas_libre_de_contexto imports Main begin  text {*   En esta relación se definen dos gra...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* T11: Gramáticas libres de contexto *}&lt;br /&gt;
&lt;br /&gt;
theory T11_Gramaticas_libre_de_contexto&lt;br /&gt;
imports Main&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  En esta relación se definen dos gramáticas libres de contexto y se&lt;br /&gt;
  demuestra que son equivalentes. Además, se define por recursión una&lt;br /&gt;
  función para reconocer las palabras de la gramática y se demuestra que&lt;br /&gt;
  es correcta y completa. *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Una gramática libre de contexto para las expresiones&lt;br /&gt;
  parentizadas es&lt;br /&gt;
     S ⟶ ε | &amp;#039;(&amp;#039; S &amp;#039;)&amp;#039; | SS&lt;br /&gt;
  definir inductivamente la gramática S usando A y B para &amp;#039;(&amp;#039; y &amp;#039;)&amp;#039;,&lt;br /&gt;
  respectivamente. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
datatype alfabeto = A | B&lt;br /&gt;
&lt;br /&gt;
inductive_set S :: &amp;quot;alfabeto list set&amp;quot; where&lt;br /&gt;
  S1: &amp;quot;[] ∈ S&amp;quot; &lt;br /&gt;
| S2: &amp;quot;w ∈ S ⟹ [A] @ w @ [B] ∈ S&amp;quot; &lt;br /&gt;
| S3: &amp;quot;v ∈ S ⟹ w ∈ S ⟹ v @ w ∈ S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Otra gramática libre de contexto para las expresiones&lt;br /&gt;
  parentizadas es&lt;br /&gt;
     T ⟶ ε | T &amp;#039;(&amp;#039; T &amp;#039;)&amp;#039;&lt;br /&gt;
  definir inductivamente la gramática T usando A y B para &amp;#039;(&amp;#039; y &amp;#039;)&amp;#039;,&lt;br /&gt;
  respectivamente. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
inductive_set T :: &amp;quot;alfabeto list set&amp;quot; where&lt;br /&gt;
  T1: &amp;quot;[] ∈ T&amp;quot; &lt;br /&gt;
| T2: &amp;quot;v ∈ T ⟹ w ∈ T ⟹ v @ [A] @ w @ [B] ∈ T&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar que T está contenido en S. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma T_en_S: &lt;br /&gt;
  assumes &amp;quot;w ∈ T&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;w ∈ S&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
proof (induct rule: T.induct)&lt;br /&gt;
  show &amp;quot;[] ∈ S&amp;quot; by (rule S1)&lt;br /&gt;
next&lt;br /&gt;
  fix v w&lt;br /&gt;
  assume &amp;quot;v ∈ T&amp;quot; and &amp;quot;v ∈ S&amp;quot; and &amp;quot;w ∈ T&amp;quot; and &amp;quot;w ∈ S&amp;quot; &lt;br /&gt;
  have &amp;quot;[A] @ w @ [B] ∈ S&amp;quot; using `w ∈ S` by (rule S2)&lt;br /&gt;
  with `v ∈ S` show &amp;quot;v @ [A] @ w @ [B] ∈ S&amp;quot; by (rule S3)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar que S está contenido en T. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Se usarán dos lemas auxiliares:&lt;br /&gt;
  · S_en_T_aux1: w ∈ T ⟹ [A] @ w @ [B] ∈ T&lt;br /&gt;
  · S_en_T_aux2: v ∈ T ⟹ u ∈ T ⟹ u @ v ∈ T&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del primer lema es&amp;quot;&lt;br /&gt;
lemma S_en_T_aux1: &lt;br /&gt;
  assumes &amp;quot;w ∈ T&amp;quot; &lt;br /&gt;
  shows   &amp;quot;[A] @ w @ [B] ∈ T&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;[] ∈ T&amp;quot; by (rule T1)&lt;br /&gt;
  hence &amp;quot;[] @ [A] @ w @ [B] ∈ T&amp;quot; using assms by (rule T2)&lt;br /&gt;
  thus &amp;quot;[A] @ w @ [B] ∈ T&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del primer lema es&amp;quot;&lt;br /&gt;
lemma S_en_T_aux1b: &lt;br /&gt;
  &amp;quot;w ∈ T ⟹ [A] @ w @ [B] ∈ T&amp;quot;&lt;br /&gt;
using T1 T2 [where v = &amp;quot;[]&amp;quot;] by simp &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del segundo lema es&amp;quot;&lt;br /&gt;
lemma S_en_T_aux2: &lt;br /&gt;
  &amp;quot;v ∈ T ⟹ u ∈ T ⟹ u @ v ∈ T&amp;quot;&lt;br /&gt;
proof (induct rule: T.induct)&lt;br /&gt;
  assume &amp;quot;u ∈ T&amp;quot;&lt;br /&gt;
  thus &amp;quot;u @ [] ∈ T&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix w1 w2&lt;br /&gt;
  assume &amp;quot;w1 ∈ T&amp;quot;&lt;br /&gt;
         &amp;quot;u ∈ T ⟹ u @ w1 ∈ T&amp;quot;&lt;br /&gt;
         &amp;quot;w2 ∈ T&amp;quot; &lt;br /&gt;
         &amp;quot;u ∈ T ⟹ u @ w2 ∈ T&amp;quot; &lt;br /&gt;
         &amp;quot;u ∈ T&amp;quot;&lt;br /&gt;
  hence &amp;quot;u @ w1 ∈ T&amp;quot; by simp&lt;br /&gt;
  hence &amp;quot;(u @ w1) @ [A] @ w2 @ [B] ∈ T&amp;quot; using `w2 ∈ T` by (rule T2)&lt;br /&gt;
  thus &amp;quot;u @ w1 @ [A] @ w2 @ [B] ∈ T&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma S_en_T: &lt;br /&gt;
  &amp;quot;w ∈ S ⟹ w ∈ T&amp;quot;&lt;br /&gt;
proof (induct rule: S.induct)&lt;br /&gt;
  show &amp;quot;[] ∈ T&amp;quot; by (rule T1)&lt;br /&gt;
next&lt;br /&gt;
  fix w&lt;br /&gt;
  assume &amp;quot;w ∈ S&amp;quot; &amp;quot;w ∈ T&amp;quot; &lt;br /&gt;
  show &amp;quot;[A] @ w @ [B] ∈ T&amp;quot; using `w ∈ T`  by (rule S_en_T_aux1) &lt;br /&gt;
next&lt;br /&gt;
  fix v w&lt;br /&gt;
  assume &amp;quot;v ∈ S&amp;quot; &amp;quot;v ∈ T&amp;quot; &amp;quot;w ∈ S&amp;quot; &amp;quot;w ∈ T&amp;quot;&lt;br /&gt;
  show &amp;quot;v @ w ∈ T&amp;quot; using `w ∈ T` `v ∈ T` by (rule S_en_T_aux2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar que S y T son iguales. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma S_igual_T:&lt;br /&gt;
  &amp;quot;S = T&amp;quot;&lt;br /&gt;
by (auto simp add: S_en_T T_en_S)&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. En lugar de una gramática, se puede usar el siguiente&lt;br /&gt;
  procedimiento para determinar si la cadena es una sucesión de&lt;br /&gt;
  paréntesis bien balanceada: se recorre la cadena de izquierda a&lt;br /&gt;
  derecha contando cuántos paréntesis de necesitan para que esté bien&lt;br /&gt;
  balanceada. Si el contador al final de la cadena es 0, la cadena está&lt;br /&gt;
  bien balanceada.&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     balanceada :: alfabeto list ⇒ bool&lt;br /&gt;
  tal que (balanceada w) se verifica si w está bien balanceada. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     balanceada [A,A,B,B] = True&lt;br /&gt;
     balanceada [A,B,A,B] = True&lt;br /&gt;
     balanceada [A,B,B,A] = False&lt;br /&gt;
  Indicación: Definir balanceada  usando la función auxiliar &lt;br /&gt;
     balanceada_aux :: alfabeto list ⇒ nat ⇒ bool&lt;br /&gt;
  tal que (balanceada_aux w 0) se verifica si w está bien balanceada.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun balanceada_aux :: &amp;quot;alfabeto list ⇒ nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;balanceada_aux []    0       = True&amp;quot;&lt;br /&gt;
| &amp;quot;balanceada_aux (A#w) n       = balanceada_aux w (Suc n)&amp;quot;&lt;br /&gt;
| &amp;quot;balanceada_aux (B#w) (Suc n) = balanceada_aux w n&amp;quot;&lt;br /&gt;
| &amp;quot;balanceada_aux w     n       = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun balanceada :: &amp;quot;alfabeto list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;balanceada w = balanceada_aux w 0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;balanceada [A,A,B,B]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;balanceada [A,B,A,B]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;balanceada [A,B,B,A]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que balanceada es un reconocedor correcto de la&lt;br /&gt;
  gramática S; es decir, &lt;br /&gt;
     w ∈ S ⟹ balanceada w&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota: En la demostración se usarán los siguientes lemas auxiliares:&lt;br /&gt;
  · balanceada_correcto_aux_1: &lt;br /&gt;
       balanceada_aux w n ⟹ balanceada_aux (w @ [B]) (Suc n)&lt;br /&gt;
  · balanceada_correcto_aux_2: &lt;br /&gt;
       ⟦balanceada_aux v n; &lt;br /&gt;
        balanceada_aux w 0⟧ &lt;br /&gt;
       ⟹ balanceada_aux (v @ w) n&lt;br /&gt;
  · balanceada_correcto_aux_3:&lt;br /&gt;
       w ∈ S ⟹ balanceada_aux w 0   *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del primer lema auxiliar es&amp;quot;&lt;br /&gt;
lemma balanceada_correcto_aux_1: &lt;br /&gt;
  &amp;quot;balanceada_aux w n ⟹ balanceada_aux (w @ [B]) (Suc n)&amp;quot;&lt;br /&gt;
by (induct w n rule: balanceada_aux.induct) simp_all&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del primer lema auxiliar es&amp;quot;&lt;br /&gt;
lemma balanceada_correcto_aux_1b:&lt;br /&gt;
  assumes &amp;quot;balanceada_aux w n&amp;quot; &lt;br /&gt;
  shows   &amp;quot;balanceada_aux (w @ [B]) (Suc n)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
proof (induct w n rule: balanceada_aux.induct)&lt;br /&gt;
  assume &amp;quot;balanceada_aux [] 0&amp;quot; &lt;br /&gt;
  thus &amp;quot;balanceada_aux ([] @ [B]) (Suc 0)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix w n &lt;br /&gt;
  assume &amp;quot;balanceada_aux w (Suc n) ⟹ balanceada_aux (w @ [B]) (Suc (Suc n))&amp;quot;&lt;br /&gt;
         &amp;quot;balanceada_aux (A # w) n&amp;quot;&lt;br /&gt;
  thus &amp;quot;balanceada_aux ((A # w) @ [B]) (Suc n)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix w n &lt;br /&gt;
  assume &amp;quot;balanceada_aux w n ⟹ balanceada_aux (w @ [B]) (Suc n)&amp;quot;&lt;br /&gt;
         &amp;quot;balanceada_aux (B # w) (Suc n)&amp;quot;&lt;br /&gt;
  thus   &amp;quot;balanceada_aux ((B # w) @ [B]) (Suc (Suc n))&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix v&lt;br /&gt;
  assume &amp;quot;balanceada_aux (B # v) 0&amp;quot; &lt;br /&gt;
  thus &amp;quot;balanceada_aux ((B # v) @ [B]) (Suc 0)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix v&lt;br /&gt;
  assume &amp;quot;balanceada_aux [] (Suc v)&amp;quot; &lt;br /&gt;
  thus &amp;quot;balanceada_aux ([] @ [B]) (Suc (Suc v))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del segundo lema auxiliar es&amp;quot;&lt;br /&gt;
lemma balanceada_correcto_aux_2: &lt;br /&gt;
  assumes &amp;quot;balanceada_aux v n&amp;quot; &lt;br /&gt;
          &amp;quot;balanceada_aux w 0&amp;quot; &lt;br /&gt;
  shows   &amp;quot;balanceada_aux (v @ w) n&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by (induct v n rule: balanceada_aux.induct) simp_all&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del tercer lema auxiliar es&amp;quot;&lt;br /&gt;
lemma balanceada_correcto_aux_3:&lt;br /&gt;
  &amp;quot;w ∈ S ⟹ balanceada_aux w 0&amp;quot;&lt;br /&gt;
by (induct rule: S.induct) &lt;br /&gt;
   (auto simp add: balanceada_correcto_aux_1 balanceada_correcto_aux_2)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del tercer lema auxiliar es&amp;quot;&lt;br /&gt;
lemma balanceada_correcto_aux_3b:&lt;br /&gt;
  &amp;quot;w ∈ S ⟹ balanceada_aux w 0&amp;quot;&lt;br /&gt;
proof (induct rule: S.induct) &lt;br /&gt;
  show &amp;quot;balanceada_aux [] 0&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix w&lt;br /&gt;
  assume &amp;quot;w ∈ S&amp;quot; &lt;br /&gt;
         &amp;quot;balanceada_aux w 0&amp;quot; &lt;br /&gt;
  thus &amp;quot;balanceada_aux ([A] @ w @ [B]) 0&amp;quot; &lt;br /&gt;
    by (simp add: balanceada_correcto_aux_1)&lt;br /&gt;
next&lt;br /&gt;
  fix v w&lt;br /&gt;
  assume &amp;quot;v ∈ S&amp;quot; &lt;br /&gt;
         &amp;quot;balanceada_aux v 0&amp;quot; &lt;br /&gt;
         &amp;quot;w ∈ S&amp;quot; &lt;br /&gt;
         &amp;quot;balanceada_aux w 0&amp;quot; &lt;br /&gt;
  thus &amp;quot;balanceada_aux (v @ w) 0&amp;quot; &lt;br /&gt;
    by (simp add: balanceada_correcto_aux_2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del tercer lema es&amp;quot;&lt;br /&gt;
lemma balanceada_correcto:&lt;br /&gt;
  &amp;quot;w ∈ S ⟹ balanceada w&amp;quot;&lt;br /&gt;
by (simp add: balanceada_correcto_aux_3)&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que balanceada es un reconocedor completo de &lt;br /&gt;
  la gramática S; es decir, &lt;br /&gt;
     balanceada w ⟹ w ∈ S &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del primer lema auxiliar es&amp;quot;&lt;br /&gt;
lemma balanceada_completo_aux_1:&lt;br /&gt;
  &amp;quot;[A,B] ∈ S&amp;quot;&lt;br /&gt;
using S1 S2 [where w = &amp;quot;[]&amp;quot;] by simp &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del primer lema auxiliar es&amp;quot;&lt;br /&gt;
lemma balanceada_completo_aux_1b:&lt;br /&gt;
  &amp;quot;[A,B] ∈ S&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;[] ∈ S&amp;quot; using S1 by simp&lt;br /&gt;
  hence &amp;quot;[A] @ [] @ [B] ∈ S&amp;quot; using S2 [where w = &amp;quot;[]&amp;quot;] by simp &lt;br /&gt;
  thus &amp;quot;[A,B] ∈ S&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del segundo lema auxiliar es&amp;quot;&lt;br /&gt;
lemma balanceada_completo_aux_2: &lt;br /&gt;
  assumes &amp;quot;u ∈ S&amp;quot; &lt;br /&gt;
  shows &amp;quot;⋀v w. u = v @ w ⟹ v @ A # B # w ∈ S&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
proof (induct)&lt;br /&gt;
  fix v w :: &amp;quot;alfabeto list&amp;quot;&lt;br /&gt;
  assume &amp;quot;[] = v @ w&amp;quot; &lt;br /&gt;
  thus &amp;quot;v @ A # B # w ∈ S&amp;quot; by (simp add: balanceada_completo_aux_1)&lt;br /&gt;
next&lt;br /&gt;
  fix v u w :: &amp;quot;alfabeto list&amp;quot;&lt;br /&gt;
  assume uS: &amp;quot;u ∈ S&amp;quot; and&lt;br /&gt;
         HI: &amp;quot;⋀v w. u = v @ w ⟹ v @ A # B # w ∈ S&amp;quot; and&lt;br /&gt;
         sup: &amp;quot;[A] @ u @ [B] = v @ w&amp;quot;&lt;br /&gt;
  show &amp;quot;v @ A # B # w ∈ S&amp;quot;&lt;br /&gt;
  proof (cases v)&lt;br /&gt;
    case Nil&lt;br /&gt;
    hence &amp;quot;w = A # u @ [B]&amp;quot; using sup by simp&lt;br /&gt;
    hence &amp;quot;w ∈ S&amp;quot; using uS S2 by simp&lt;br /&gt;
    hence &amp;quot;[A,B] @ w ∈ S&amp;quot; using balanceada_completo_aux_1 S3 by blast&lt;br /&gt;
    thus ?thesis using Nil by simp&lt;br /&gt;
  next&lt;br /&gt;
    case (Cons x v&amp;#039;)&lt;br /&gt;
    show ?thesis&lt;br /&gt;
    proof (cases w rule:rev_cases)&lt;br /&gt;
      case Nil&lt;br /&gt;
      have &amp;quot;A # u @ [B] ∈ S&amp;quot; using S2 uS by simp&lt;br /&gt;
      hence &amp;quot;(A # u @ [B]) @ [A,B] ∈ S&amp;quot; &lt;br /&gt;
        using balanceada_completo_aux_1 S3 by blast&lt;br /&gt;
      thus ?thesis using Nil Cons sup by auto&lt;br /&gt;
    next&lt;br /&gt;
      case (snoc w&amp;#039; y)&lt;br /&gt;
      hence u: &amp;quot;u = v&amp;#039; @ w&amp;#039;&amp;quot; and [simp]: &amp;quot;x = A ∧ y = B&amp;quot;&lt;br /&gt;
	using Cons sup by auto&lt;br /&gt;
      from u have &amp;quot;v&amp;#039; @ A # B # w&amp;#039; ∈ S&amp;quot; by (rule HI)&lt;br /&gt;
      hence &amp;quot;A # (v&amp;#039; @ A # B # w&amp;#039;) @ [B] ∈ S&amp;quot; &lt;br /&gt;
        using S2 [where w = &amp;quot;v&amp;#039; @ A # B # w&amp;#039;&amp;quot;] by simp&lt;br /&gt;
      thus ?thesis using Cons snoc by auto&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  fix v&amp;#039; w&amp;#039; v w&lt;br /&gt;
  assume v&amp;#039;S: &amp;quot;v&amp;#039; ∈ S&amp;quot;&lt;br /&gt;
     and HIv: &amp;quot;⋀v w. v&amp;#039; = v @ w ⟹ v @ A # B # w ∈ S&amp;quot;&lt;br /&gt;
     and w&amp;#039;S: &amp;quot;w&amp;#039; ∈ S&amp;quot;&lt;br /&gt;
     and HIw: &amp;quot;⋀v w. w&amp;#039; = v @ w ⟹ v @ A # B # w ∈ S&amp;quot;   &lt;br /&gt;
     and sup: &amp;quot;v&amp;#039; @ w&amp;#039; = v @ w&amp;quot;&lt;br /&gt;
  then obtain r where &amp;quot;v&amp;#039; = v @ r ∧ r @ w&amp;#039; = w ∨ v&amp;#039; @ r = v ∧ w&amp;#039; = r @ w&amp;quot;&lt;br /&gt;
    (is &amp;quot;?A ∨ ?B&amp;quot;)&lt;br /&gt;
    by (auto simp: append_eq_append_conv2)&lt;br /&gt;
  thus &amp;quot;v @ A # B # w ∈ S&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume A: ?A&lt;br /&gt;
    hence &amp;quot;v @ A # B # r ∈ S&amp;quot; using HIv by blast&lt;br /&gt;
    hence &amp;quot;(v @ A # B # r) @ w&amp;#039; ∈ S&amp;quot; using w&amp;#039;S by (rule S3)&lt;br /&gt;
    thus ?thesis using A by auto&lt;br /&gt;
  next&lt;br /&gt;
    assume B: ?B&lt;br /&gt;
    hence &amp;quot;r @ A # B # w ∈ S&amp;quot; using HIw by blast&lt;br /&gt;
    with v&amp;#039;S have &amp;quot;v&amp;#039; @ (r @ A # B # w) ∈ S&amp;quot; by (rule S3)&lt;br /&gt;
    thus ?thesis using B by auto&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada del tercer lema auxiliar es&amp;quot;&lt;br /&gt;
lemma balanceada_completo_aux_3: &lt;br /&gt;
  &amp;quot;balanceada_aux w n ⟹ replicate n A @ w ∈ S&amp;quot;&lt;br /&gt;
proof (induct w n rule: balanceada_aux.induct)&lt;br /&gt;
  assume &amp;quot;balanceada_aux [] 0&amp;quot; &lt;br /&gt;
  thus &amp;quot;replicate 0 A @ [] ∈ S&amp;quot; using S1 by simp&lt;br /&gt;
next&lt;br /&gt;
  fix w n&lt;br /&gt;
  assume &amp;quot;balanceada_aux w (Suc n) ⟹ replicate (Suc n) A @ w ∈ S&amp;quot; &lt;br /&gt;
     and &amp;quot;balanceada_aux (A # w) n&amp;quot;&lt;br /&gt;
  thus &amp;quot;replicate n A @ A # w ∈ S&amp;quot; &lt;br /&gt;
    by (simp add: replicate_app_Cons_same)&lt;br /&gt;
next&lt;br /&gt;
  fix w n&lt;br /&gt;
  assume &amp;quot;balanceada_aux w n ⟹ replicate n A @ w ∈ S&amp;quot; &lt;br /&gt;
     and &amp;quot;balanceada_aux (B # w) (Suc n)&amp;quot;&lt;br /&gt;
  thus &amp;quot;replicate (Suc n) A @ B # w ∈ S&amp;quot; &lt;br /&gt;
    by (simp add: balanceada_completo_aux_2&lt;br /&gt;
        replicate_app_Cons_same[symmetric])&lt;br /&gt;
next&lt;br /&gt;
  fix v&lt;br /&gt;
  assume &amp;quot;balanceada_aux (B # v) 0&amp;quot; &lt;br /&gt;
  thus &amp;quot;replicate 0 A @ B # v ∈ S&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix v&lt;br /&gt;
  assume &amp;quot;balanceada_aux [] (Suc v)&amp;quot; &lt;br /&gt;
  thus &amp;quot;replicate (Suc v) A @ [] ∈ S&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración del lema es&amp;quot;&lt;br /&gt;
lemma balanceada_completo: &lt;br /&gt;
  assumes &amp;quot;balanceada w&amp;quot;&lt;br /&gt;
  shows   &amp;quot; w ∈ S&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;balanceada_aux w 0&amp;quot; using assms by simp&lt;br /&gt;
  hence &amp;quot;replicate 0 A @ w ∈ S&amp;quot; by (rule balanceada_completo_aux_3)&lt;br /&gt;
  thus &amp;quot;w ∈ S&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Temas&amp;diff=272</id>
		<title>Temas</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Temas&amp;diff=272"/>
		<updated>2015-01-29T12:09:21Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Temas de &amp;#039;&amp;#039;Razonamiento automático (2014-15)&amp;#039;&amp;#039; ==&lt;br /&gt;
* [[Tema 1: Programación funcional en Isabelle]].&lt;br /&gt;
* Tema 2: Razonamiento sobre programas:&lt;br /&gt;
** [http://www.cs.us.es/~jalonso/cursos/i1m/temas/tema-8t.pdf Tema 2a: Razonamiento sobre programas Haskell]&lt;br /&gt;
** [[Tema 2b: Razonamiento automático sobre programas en Isabelle/HOL]].&lt;br /&gt;
* [[Tema 3: Razonamiento estructurado sobre programas en Isabelle/HOL]].&lt;br /&gt;
* [[Tema 4: Razonamiento por casos y por inducción]].&lt;br /&gt;
* Tema 5: Verificación de algoritmos de ordenación:&lt;br /&gt;
** [[Tema 5a: Verificación de la ordenación por inserción]].&lt;br /&gt;
** [[Tema 5b: Verificación de la ordenación por mezcla]].&lt;br /&gt;
* [[Tema 6: Caso de estudio: Compilación de expresiones]].&lt;br /&gt;
* Tema 7: Deducción natural proposicional:&lt;br /&gt;
** [http://www.cs.us.es/~jalonso/cursos/li/temas/tema-2.pdf Tema 7a: Deducción natural proposicional]].&lt;br /&gt;
** [[Tema 7b: Deducción natural proposicional con Isabelle/HOL]].&lt;br /&gt;
* Tema 8: Deducción natural de primer orden:&lt;br /&gt;
** [http://www.cs.us.es/~jalonso/cursos/li/temas/tema-8.pdf Tema 8a: Deducción natural en lógica de primer orden]].&lt;br /&gt;
** [[Tema 8b: Deducción natural en lógica de primer orden con Isabelle/HOL]]&lt;br /&gt;
* [[Tema 9: Conjuntos, funciones y relaciones]].&lt;br /&gt;
* [[Tema 10: Conjuntos definidos inductivamente]].&lt;br /&gt;
* [[Tema 11: Gramáticas libre de contexto]].&lt;br /&gt;
* Tema 12: Misceláneas:&lt;br /&gt;
** [[Tema 12a: Razonamiento modular (Teoría de grupos)]].&lt;br /&gt;
** [[Tema 12b: Razonamiento modular]].&lt;br /&gt;
** [[Tema 12c: Automatización]].&lt;br /&gt;
** [[Tema 12d: Pasos elementales]].&lt;br /&gt;
** [[Tema 12e: Sudoku]].&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Temas&amp;diff=271</id>
		<title>Temas</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Temas&amp;diff=271"/>
		<updated>2015-01-29T12:08:57Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Temas de &amp;#039;&amp;#039;Razonamiento automático (2014-15)&amp;#039;&amp;#039; ==&lt;br /&gt;
* [[Tema 1: Programación funcional en Isabelle]].&lt;br /&gt;
* Tema 2: Razonamiento sobre programas:&lt;br /&gt;
** [http://www.cs.us.es/~jalonso/cursos/i1m/temas/tema-8t.pdf Tema 2a: Razonamiento sobre programas Haskell]&lt;br /&gt;
** [[Tema 2b: Razonamiento automático sobre programas en Isabelle/HOL]].&lt;br /&gt;
* [[Tema 3: Razonamiento estructurado sobre programas en Isabelle/HOL]].&lt;br /&gt;
* [[Tema 4: Razonamiento por casos y por inducción]].&lt;br /&gt;
* Tema 5: Verificación de algoritmos de ordenación:&lt;br /&gt;
** [[Tema 5a: Verificación de la ordenación por inserción]].&lt;br /&gt;
** [[Tema 5b: Verificación de la ordenación por mezcla]].&lt;br /&gt;
* [[Tema 6: Caso de estudio: Compilación de expresiones]].&lt;br /&gt;
* Tema 7: Deducción natural proposicional:&lt;br /&gt;
** [http://www.cs.us.es/~jalonso/cursos/li/temas/tema-2.pdf Tema 7a: Deducción natural proposicional]].&lt;br /&gt;
** [[Tema 7b: Deducción natural proposicional con Isabelle/HOL]].&lt;br /&gt;
* Tema 8: Deducción natural de primer orden:&lt;br /&gt;
** [http://www.cs.us.es/~jalonso/cursos/li/temas/tema-8.pdf Tema 8a: Deducción natural en lógica de primer orden]].&lt;br /&gt;
** [[Tema 8b: Deducción natural en lógica de primer orden con Isabelle/HOL]]&lt;br /&gt;
* [[Tema 9: Conjuntos, funciones y relaciones]].&lt;br /&gt;
* [[Tema 10: Conjuntos definidos inductivamente]].&lt;br /&gt;
* [[Tema 11: Gramáticas libre de contexto]].&lt;br /&gt;
* Tema 12: Misceláneas:&lt;br /&gt;
* [[Tema 12a: Razonamiento modular (Teoría de grupos)]].&lt;br /&gt;
* [[Tema 12b: Razonamiento modular]].&lt;br /&gt;
* [[Tema 12c: Automatización]].&lt;br /&gt;
* [[Tema 12d: Pasos elementales]].&lt;br /&gt;
* [[Tema 12e: Sudoku]].&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Temas&amp;diff=270</id>
		<title>Temas</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Temas&amp;diff=270"/>
		<updated>2015-01-29T12:05:58Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Temas de &amp;#039;&amp;#039;Razonamiento automático (2014-15)&amp;#039;&amp;#039; ==&lt;br /&gt;
* [[Tema 1: Programación funcional en Isabelle]].&lt;br /&gt;
* Tema 2: Razonamiento sobre programas:&lt;br /&gt;
** [http://www.cs.us.es/~jalonso/cursos/i1m/temas/tema-8t.pdf Tema 2a: Razonamiento sobre programas Haskell]&lt;br /&gt;
** [[Tema 2b: Razonamiento automático sobre programas en Isabelle/HOL]].&lt;br /&gt;
* [[Tema 3: Razonamiento estructurado sobre programas en Isabelle/HOL]].&lt;br /&gt;
* [[Tema 4: Razonamiento por casos y por inducción]].&lt;br /&gt;
* Tema 5: Verificación de algoritmos de ordenación:&lt;br /&gt;
** [[Tema 5a: Verificación de la ordenación por inserción]].&lt;br /&gt;
** [[Tema 5b: Verificación de la ordenación por mezcla]].&lt;br /&gt;
* [[Tema 6: Caso de estudio: Compilación de expresiones]].&lt;br /&gt;
* Tema 7: Deducción natural proposicional:&lt;br /&gt;
** [http://www.cs.us.es/~jalonso/cursos/li/temas/tema-2.pdf Tema 7a: Deducción natural proposicional]].&lt;br /&gt;
** [[Tema 7b: Deducción natural proposicional con Isabelle/HOL]].&lt;br /&gt;
* Tema 8: Deducción natural de primer orden:&lt;br /&gt;
** [http://www.cs.us.es/~jalonso/cursos/li/temas/tema-8.pdf Tema 8a: Deducción natural en lógica de primer orden]].&lt;br /&gt;
** [[Tema 8b: Deducción natural en lógica de primer orden con Isabelle/HOL]]&lt;br /&gt;
* [[Tema 9: Conjuntos, funciones y relaciones]].&lt;br /&gt;
* [[Tema 10: Conjuntos definidos inductivamente]].&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_10:_Conjuntos_definidos_inductivamente&amp;diff=265</id>
		<title>Tema 10: Conjuntos definidos inductivamente</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_10:_Conjuntos_definidos_inductivamente&amp;diff=265"/>
		<updated>2015-01-22T05:30:07Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* Tema 10: Conjuntos definidos inductivamente *}  theory T10_Conjuntos_definidos_inductivamente imports Main begin  section {* El conjunto de los n...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* Tema 10: Conjuntos definidos inductivamente *}&lt;br /&gt;
&lt;br /&gt;
theory T10_Conjuntos_definidos_inductivamente&lt;br /&gt;
imports Main&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* El conjunto de los números pares *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  · El conjunto de los números pares se define inductivamente como el&lt;br /&gt;
    menor conjunto que contiene al 0 y es cerrado por la operación (+2).&lt;br /&gt;
&lt;br /&gt;
  · El conjunto de los números pares también puede definirse como los &lt;br /&gt;
    naturales divisible por 2.&lt;br /&gt;
&lt;br /&gt;
  · Veremos cómo se escriben las dos definiciones en Isabelle/HOL y cómo&lt;br /&gt;
    se demuestra su equivalencia.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Definición inductiva del conjunto de los pares *}&lt;br /&gt;
&lt;br /&gt;
inductive_set par :: &amp;quot;nat set&amp;quot; where&lt;br /&gt;
  cero [intro!]: &amp;quot;0 ∈ par&amp;quot; &lt;br /&gt;
| paso [intro!]: &amp;quot;n ∈ par ⟹ (Suc (Suc n)) ∈ par&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  · Una definición inductiva está formada con reglas de introducción.&lt;br /&gt;
&lt;br /&gt;
  · La definición inductiva genera varios teoremas:&lt;br /&gt;
    · par.cero:   0 ∈ par&lt;br /&gt;
    · par.paso:   n ∈ par ⟹ Suc (Suc n) ∈ par&lt;br /&gt;
    · par.simps:  (a ∈ par) = (a = 0 ∨ (∃n. a = Suc (Suc n) ∧ n ∈ par))&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Uso de las reglas de introducción *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lema: Los números de la forma 2*k son pares.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma dobles_son_pares [intro!]: &lt;br /&gt;
  &amp;quot;2*k ∈ par&amp;quot;&lt;br /&gt;
by (induct k) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma dobles_son_pares_2:&lt;br /&gt;
  &amp;quot;2*k ∈ par&amp;quot;&lt;br /&gt;
proof (induct k)&lt;br /&gt;
  show &amp;quot;2 * 0 ∈ par&amp;quot; by auto&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;⋀k. 2 * k ∈ par ⟹ 2 * Suc k ∈ par&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  · Nota: Nuestro objetivo es demostrar la equivalencia de la definición&lt;br /&gt;
    anterior y la definición mediante divisibilidad.&lt;br /&gt;
  &lt;br /&gt;
  · Lema: Si n es divisible por 2, entonces es par.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma dvd_imp_par: &amp;quot;2 dvd n ⟹ n ∈ par&amp;quot;&lt;br /&gt;
by (auto simp add: dvd_def)&lt;br /&gt;
&lt;br /&gt;
subsection {* Regla de inducción *} &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Entre las reglas generadas por la definión de par está la de&lt;br /&gt;
  inducción:&lt;br /&gt;
  · par.induct: ⟦ x ∈ par; &lt;br /&gt;
                 P 0; &lt;br /&gt;
                 ⋀n. ⟦n ∈ par; P n⟧ ⟹ P (Suc (Suc n))⟧ &lt;br /&gt;
                ⟹ P x&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lema: Los números pares son divisibles por 2.&lt;br /&gt;
*} &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;1ª demostración (detallada)&amp;quot;&lt;br /&gt;
lemma par_imp_dvd: &lt;br /&gt;
  &amp;quot;n ∈ par ⟹ 2 dvd n&amp;quot;&lt;br /&gt;
proof (induction rule: par.induct)&lt;br /&gt;
  show &amp;quot;2 dvd (0::nat)&amp;quot; by (simp_all add: dvd_def)&lt;br /&gt;
next&lt;br /&gt;
  fix n::nat&lt;br /&gt;
  assume H1: &amp;quot;n ∈ par&amp;quot; and&lt;br /&gt;
         H2: &amp;quot;2 dvd n&amp;quot;&lt;br /&gt;
  have &amp;quot;∃k. n = 2*k&amp;quot; using H2 by (simp add: dvd_def)&lt;br /&gt;
  then obtain k where &amp;quot;n = 2*k&amp;quot; ..&lt;br /&gt;
  hence &amp;quot;Suc (Suc n) = 2*(k+1)&amp;quot; by auto&lt;br /&gt;
  hence &amp;quot;∃k. Suc (Suc n) = 2*k&amp;quot; ..&lt;br /&gt;
  thus &amp;quot;2 dvd Suc (Suc n)&amp;quot; by (simp add: dvd_def)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;2ª demostración (con arith)&amp;quot;&lt;br /&gt;
lemma par_imp_dvd_2: &lt;br /&gt;
  &amp;quot;n ∈ par ⟹ 2 dvd n&amp;quot;&lt;br /&gt;
proof (induction rule: par.induct)&lt;br /&gt;
  show &amp;quot;2 dvd (0::nat)&amp;quot; by (simp_all add: dvd_def)&lt;br /&gt;
next&lt;br /&gt;
  fix n::nat&lt;br /&gt;
  assume H1: &amp;quot;n ∈ par&amp;quot; and&lt;br /&gt;
         H2: &amp;quot;2 dvd n&amp;quot;&lt;br /&gt;
  thus &amp;quot;2 dvd Suc (Suc n)&amp;quot; by (auto simp add: dvd_def, arith)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;3ª demostración (automática)&amp;quot;&lt;br /&gt;
lemma par_imp_dvd_3: &lt;br /&gt;
  &amp;quot;n ∈ par ⟹ 2 dvd n&amp;quot;&lt;br /&gt;
by (induction rule:par.induct) (auto simp add: dvd_def, arith)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lema: Un número n es par syss es divisible por 2. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem par_iff_dvd: &amp;quot;(n ∈ par) = (2 dvd n)&amp;quot;&lt;br /&gt;
by (blast intro: dvd_imp_par par_imp_dvd)&lt;br /&gt;
&lt;br /&gt;
subsection{* Generalización y regla de inducción *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  · Antes de aplicar inducción se debe de generalizar la fórmula a&lt;br /&gt;
    probar.&lt;br /&gt;
 &lt;br /&gt;
  · Vamos a ilustrar el principio anterior en el caso de los conjuntos&lt;br /&gt;
    inductivamente definidos, con el siguiente ejemplo: si n+2 es par,&lt;br /&gt;
    entonces n también lo es.&lt;br /&gt;
&lt;br /&gt;
  · El siguiente intento falla:&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;Suc (Suc n) ∈ par ⟹ n ∈ par&amp;quot;&lt;br /&gt;
apply (erule par.induct) &lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  En el intento anterior, los subobjetivos generados son&lt;br /&gt;
     1. n ∈ par&lt;br /&gt;
     2. ⋀na. ⟦na ∈ par; n ∈ par⟧ ⟹ n ∈ par&lt;br /&gt;
  que no se pueden demostrar.&lt;br /&gt;
&lt;br /&gt;
  Se ha perdido la información sobre Suc (Suc n).&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Reformulación del lema: Si n es par, entonces n-2 también lo es.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma par_imp_par_menos_2: &lt;br /&gt;
  &amp;quot;n ∈ par ⟹ n - 2 ∈ par&amp;quot;&lt;br /&gt;
by (induction rule:par.induct) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;n ∈  par ⟹ n - 2 ∈ par&amp;quot;&lt;br /&gt;
proof (induction rule:par.induct)&lt;br /&gt;
  show &amp;quot;0 - 2 ∈ par&amp;quot; by auto&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;⋀n. ⟦n ∈ par; n - 2 ∈ par⟧ ⟹ Suc (Suc n) - 2 ∈ par&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Con el lema anterior se puede demostrar el original.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma&lt;br /&gt;
  assumes &amp;quot;Suc (Suc n) ∈ par&amp;quot; &lt;br /&gt;
  shows   &amp;quot;n ∈ par&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;Suc (Suc n) - 2 ∈ par&amp;quot; using assms by (rule par_imp_par_menos_2)&lt;br /&gt;
  thus &amp;quot;n ∈ par&amp;quot; by simp &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración aplicativa es&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;Suc (Suc n) ∈ par ⟹ n ∈ par&amp;quot;&lt;br /&gt;
apply (drule par_imp_par_menos_2) &lt;br /&gt;
apply (simp)&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
(* Comentar el uso de drule *)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma Suc_Suc_par_imp_par: &lt;br /&gt;
  &amp;quot;Suc (Suc n) ∈ par ⟹ n ∈ par&amp;quot;&lt;br /&gt;
by (drule par_imp_par_menos_2, simp)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lemma. Un número natural n es par syss n+2 es par.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma [iff]: &amp;quot;((Suc (Suc n)) ∈ par) = (n ∈ par)&amp;quot;&lt;br /&gt;
by (blast dest: Suc_Suc_par_imp_par)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usa el atributo &amp;quot;iff&amp;quot; porque sirve como regla de simplificación.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Definiciones mutuamente inductivas *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Definición cruzada de los conjuntos inductivos de los pares y de los &lt;br /&gt;
  impares:&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
inductive_set&lt;br /&gt;
  Pares    :: &amp;quot;nat set&amp;quot; and&lt;br /&gt;
  Impares  :: &amp;quot;nat set&amp;quot;&lt;br /&gt;
where&lt;br /&gt;
  ceroP:    &amp;quot;0 ∈ Pares&amp;quot;&lt;br /&gt;
| ParesI:   &amp;quot;n ∈ Impares ⟹ Suc n ∈ Pares&amp;quot;&lt;br /&gt;
| ImparesI: &amp;quot;n ∈ Pares   ⟹ Suc n ∈ Impares&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El esquema de inducción generado por la definición anterior es&lt;br /&gt;
  · Pares_Impares.induct:&lt;br /&gt;
    ⟦P1 0; &lt;br /&gt;
     ⋀n. ⟦n ∈ Impares; P2 n⟧ ⟹ P1 (Suc n);&lt;br /&gt;
     ⋀n. ⟦n ∈ Pares;   P1 n⟧ ⟹ P2 (Suc n)⟧&lt;br /&gt;
    ⟹ (x1 ∈ Pares ⟶ P1 x1) ∧ (x2 ∈ Impares ⟶ P2 x2)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de demostración usando el esquema anterior.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(m ∈ Pares ⟶ 2 dvd m) ∧ (n ∈ Impares ⟶ 2 dvd (Suc n))&amp;quot;&lt;br /&gt;
proof (induction rule:Pares_Impares.induct)&lt;br /&gt;
  show &amp;quot;2 dvd (0::nat)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n :: &amp;quot;nat&amp;quot;&lt;br /&gt;
  assume H1: &amp;quot;n ∈ Impares&amp;quot; and&lt;br /&gt;
         H2: &amp;quot;2 dvd Suc n&amp;quot;&lt;br /&gt;
  show &amp;quot;2 dvd Suc n&amp;quot; using H2 by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n :: &amp;quot;nat&amp;quot;&lt;br /&gt;
  assume H1: &amp;quot;n ∈ Pares&amp;quot; and&lt;br /&gt;
         H2: &amp;quot;2 dvd n&amp;quot;&lt;br /&gt;
  have &amp;quot;∃k. n = 2*k&amp;quot; using H2 by (simp add: dvd_def)&lt;br /&gt;
  then obtain k where &amp;quot;n = 2*k&amp;quot; ..&lt;br /&gt;
  hence &amp;quot;Suc (Suc n) = 2*(k+1)&amp;quot; by auto&lt;br /&gt;
  hence &amp;quot;∃k. Suc (Suc n) = 2*k&amp;quot; ..&lt;br /&gt;
  thus &amp;quot;2 dvd Suc (Suc n)&amp;quot; by (simp add: dvd_def)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
subsection {* Definición inductiva de predicados *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Definición inductiva del predicado es_par tal que (es_par n) se&lt;br /&gt;
  verifica si n es par.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
inductive es_par :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;es_par 0&amp;quot; &lt;br /&gt;
| &amp;quot;es_par n ⟹ es_par(Suc(Suc n))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Heurística para elegir entre definir conjuntos o predicados:&lt;br /&gt;
  · si se va a combinar con operaciones conjuntistas, definir conjunto;&lt;br /&gt;
  · en caso contrario, definir predicado.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
section {* La clausura reflexiva transitiva *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  · Las definiciones inductivas aceptan parámetros; por tanto, permite&lt;br /&gt;
    expresar funciones que construyen conjuntos.&lt;br /&gt;
&lt;br /&gt;
  · La relaciones binarias son conjuntos de pares; por tanto, se pueden&lt;br /&gt;
    definir inductivamente.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  · La clausura reflexiva y transitiva de una relación r es la menor&lt;br /&gt;
    relación reflexiva y transitiva que contiene a r. &lt;br /&gt;
&lt;br /&gt;
  · Se representa por r*.&lt;br /&gt;
&lt;br /&gt;
  · Se puede definir inductivamente:&lt;br /&gt;
    · (x,x) ∈ r*&lt;br /&gt;
    · Si (x,y) ∈ r e (y,z) ∈ r*, entonces (x,z) ∈ r*&lt;br /&gt;
&lt;br /&gt;
  · La definición inductiva se puede expresar en Isabelle/HOL como&lt;br /&gt;
    sigue: &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
inductive_set&lt;br /&gt;
  crt :: &amp;quot;(&amp;#039;a × &amp;#039;a) set ⇒ (&amp;#039;a × &amp;#039;a) set&amp;quot;   (&amp;quot;_*&amp;quot; [1000] 999)&lt;br /&gt;
  for r :: &amp;quot;(&amp;#039;a × &amp;#039;a) set&amp;quot;&lt;br /&gt;
where&lt;br /&gt;
  crt_refl [iff]: &amp;quot;(x,x) ∈ r*&amp;quot;&lt;br /&gt;
| crt_paso:       &amp;quot;⟦ (x,y) ∈ r; (y,z) ∈ r* ⟧ ⟹ (x,z) ∈ r*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Notas:&lt;br /&gt;
  · La sintaxis concreta permite escribir r* en lugar de (crt r).&lt;br /&gt;
  · La definición consta de dos reglas.&lt;br /&gt;
  · A la regla reflexiva se le añade el atributo iff para aumentar la&lt;br /&gt;
    automatización. &lt;br /&gt;
  · A la regla del paso no se le añade ningún atributo, porque r* ocurre&lt;br /&gt;
    en la izquierda. &lt;br /&gt;
  · En el resto de esta sección se demuestra que esta definición&lt;br /&gt;
    coincide con la menor relación reflexiva y transitiva que contiene a&lt;br /&gt;
    r.  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lema. La relación r* contiene a r.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma [intro]: &amp;quot;(x,y) ∈ r ⟹ (x,y) ∈ r*&amp;quot;&lt;br /&gt;
by (blast intro: crt_paso)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Notas:&lt;br /&gt;
  · La ventaja del lema es que se puede declarar como regla de&lt;br /&gt;
    introducción, porque r* ocurre sólo en la derecha.&lt;br /&gt;
  · Con la declaración, algunas demostraciones que usan crt_paso se&lt;br /&gt;
    hacen de manera automática.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El esquema de inducción de la clausura reflexiva transitiva es&lt;br /&gt;
  · crt.induct:&lt;br /&gt;
    ⟦(x1, x2) ∈ r*; &lt;br /&gt;
     ⋀x. P x x; &lt;br /&gt;
     ⋀x y z. ⟦(x,y) ∈ r; (y,z) ∈ r*; P y z⟧ ⟹ P x z⟧&lt;br /&gt;
    ⟹ P x1 x2&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lema. La relación r* es transitiva.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma crt_trans: &amp;quot;⟦ (x,y) ∈ r*; (y,z) ∈ r* ⟧ ⟹ (x,z) ∈ r*&amp;quot;&lt;br /&gt;
proof (induction rule:crt.induct)&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  · El caso base que genera es&lt;br /&gt;
       ⋀x. (y, z) ∈ r* ⟹ (x, z) ∈ r*&lt;br /&gt;
    que no se puede demostrar.&lt;br /&gt;
&lt;br /&gt;
  · El problema está que que en la conclusión no aparece la y. Se puede&lt;br /&gt;
    reformular como sigue:&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma crt_trans [rule_format]:&lt;br /&gt;
  &amp;quot;(x,y) ∈ r* ⟹ (y,z) ∈ r* ⟶ (x,z) ∈ r*&amp;quot;&lt;br /&gt;
proof (induction rule:crt.induct)&lt;br /&gt;
  show &amp;quot;⋀x. (x,z) ∈ r* ⟶ (x,z) ∈ r*&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x y u&lt;br /&gt;
  assume H1: &amp;quot;(x,y) ∈ r&amp;quot; and&lt;br /&gt;
         H2: &amp;quot;(y,u) ∈ r*&amp;quot; and&lt;br /&gt;
         H3: &amp;quot;(u,z) ∈ r* ⟶ (y,z) ∈ r*&amp;quot;&lt;br /&gt;
  show &amp;quot;(u,z) ∈ r* ⟶ (x,z) ∈ r*&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;(u,z) ∈ r*&amp;quot;&lt;br /&gt;
    with H3 have &amp;quot;(y,z) ∈ r*&amp;quot; ..&lt;br /&gt;
    with H1 show &amp;quot;(x,z) ∈ r*&amp;quot; by (rule crt_paso) &lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Notas:&lt;br /&gt;
  · La reformulación anterior es un caso particular de la siguiente&lt;br /&gt;
    heurística:&lt;br /&gt;
       &amp;quot;Para probar una fórmula por inducción sobre (x1,...,xn) ∈ R,&lt;br /&gt;
       poner todas las premisas conteniendo cualquiera de lax xi en la&lt;br /&gt;
       conclusión usando ⟶&amp;quot;. &lt;br /&gt;
  · El atributo &amp;quot;rule_format&amp;quot; transforma ⟶ en ⟹.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  (crt2 r) es la menor relación reflexiva y transitiva que contiene a r.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
inductive_set&lt;br /&gt;
  crt2 :: &amp;quot;(&amp;#039;a × &amp;#039;a)set ⇒ (&amp;#039;a × &amp;#039;a)set&amp;quot;&lt;br /&gt;
  for r :: &amp;quot;(&amp;#039;a × &amp;#039;a)set&amp;quot;&lt;br /&gt;
where&lt;br /&gt;
  &amp;quot;(x,y) ∈ r ⟹ (x,y) ∈ crt2 r&amp;quot;&lt;br /&gt;
| &amp;quot;(x,x) ∈ crt2 r&amp;quot;&lt;br /&gt;
| &amp;quot;⟦ (x,y) ∈ crt2 r; (y,z) ∈ crt2 r ⟧ ⟹ (x,z) ∈ crt2 r&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lema. La relación (crt2 r) está contenida en r*.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(x,y) ∈ crt2 r ⟹ (x,y) ∈ r*&amp;quot;&lt;br /&gt;
proof (induction rule: crt2.induct)&lt;br /&gt;
  fix x y&lt;br /&gt;
  assume &amp;quot;(x,y) ∈ r&amp;quot;&lt;br /&gt;
  thus &amp;quot;(x,y) ∈ r*&amp;quot; by blast&lt;br /&gt;
next&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;(x,x) ∈ r*&amp;quot; by blast&lt;br /&gt;
next&lt;br /&gt;
  fix x y z&lt;br /&gt;
  assume H1: &amp;quot;(x,y) ∈ crt2 r&amp;quot; and&lt;br /&gt;
         H2: &amp;quot;(x,y) ∈ r*&amp;quot;     and&lt;br /&gt;
         H3: &amp;quot;(y,z) ∈ crt2 r&amp;quot; and &lt;br /&gt;
         H4: &amp;quot;(y,z) ∈ r*&amp;quot;&lt;br /&gt;
  show &amp;quot;(x,z) ∈ r*&amp;quot; using H2 H4 by (blast intro: crt_trans)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lema. La relación r* está contenida en (crt2 r).&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(x,y) ∈ r* ⟹ (x,y) ∈ crt2 r&amp;quot;&lt;br /&gt;
proof (induction rule:crt.induct)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;(x,x) ∈ crt2 r&amp;quot; by (rule crt2.intros(2))&lt;br /&gt;
next&lt;br /&gt;
  fix x y z&lt;br /&gt;
  assume H1: &amp;quot;(x,y) ∈ r&amp;quot; and &lt;br /&gt;
         H2: &amp;quot;(y,z) ∈ r*&amp;quot; and &lt;br /&gt;
         H3: &amp;quot;(y,z) ∈ crt2 r&amp;quot;&lt;br /&gt;
  have &amp;quot;(x,y) ∈ crt2 r&amp;quot; using H1 by (rule crt2.intros(1))&lt;br /&gt;
  thus &amp;quot;(x,z) ∈ crt2 r&amp;quot; using H3 by (rule crt2.intros(3))&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejercicio: Demostrar que si (x,y) ∈ r* e (y,z) ∈ r, entonces &lt;br /&gt;
  (x,z) ∈ r*&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma crt_paso2 [rule_format]: &lt;br /&gt;
  &amp;quot;(x,y) ∈ r* ⟹ (y,z) ∈ r ⟶ (x,z) : r*&amp;quot;&lt;br /&gt;
proof (induction rule: crt.induct)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;(x,z) ∈ r ⟶ (x,z) ∈ r*&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;(x,z) ∈ r&amp;quot;&lt;br /&gt;
    thus &amp;quot;(x,z) ∈ r*&amp;quot; by blast&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  fix x y u&lt;br /&gt;
  assume H1: &amp;quot;(x,y) ∈ r&amp;quot; and &lt;br /&gt;
         H2: &amp;quot;(y,u) ∈ r*&amp;quot; and &lt;br /&gt;
         H3: &amp;quot;(u,z) ∈ r ⟶ (y,z) ∈ r*&amp;quot;&lt;br /&gt;
  show &amp;quot;(u,z) ∈ r ⟶ (x,z) ∈ r*&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;(u,z) ∈ r&amp;quot;&lt;br /&gt;
    with H3 have &amp;quot;(y,z) ∈ r*&amp;quot; ..&lt;br /&gt;
    with H1 show &amp;quot;(x,z) ∈ r*&amp;quot; by (rule crt_paso)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Definiciones inductivas avanzadas *}&lt;br /&gt;
&lt;br /&gt;
subsection {* Cuantificadores universales en las reglas de introducción&lt;br /&gt;
  (términos básicos) *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Como caso de estudio se presenta la teoría de los términos básicos&lt;br /&gt;
  (i.e. sin variables).&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  · Un término básico se obtiene aplicando una función a una lista de&lt;br /&gt;
    términos básicos.&lt;br /&gt;
  &lt;br /&gt;
  · Las constantes se representan mediante funciones 0-arias.&lt;br /&gt;
&lt;br /&gt;
  · terminoB es el tipo de los términos básicos.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;f terminoB = Aplica &amp;#039;f &amp;quot;&amp;#039;f terminoB list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  op_entera es el tipo de las operaciones enteras y está formado por las&lt;br /&gt;
  constantes enteras, el opuesto y la suma. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype op_entera = Numero int | Opuesto | Suma&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El tipo &amp;quot;op_entera terminoB&amp;quot; está formado por los términos básicos con&lt;br /&gt;
  operaciones enteras. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El conjunto de los téminos básicos sobre un conjunto de símbolos de&lt;br /&gt;
  función F se define inductivamente:&lt;br /&gt;
     si f ∈ F y t1,...,tn son términos básicos sobre F, entonces&lt;br /&gt;
     f(t1,...,tn) es un término básico sobre F.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
inductive_set terminosB :: &amp;quot;&amp;#039;f set ⇒ &amp;#039;f terminoB set&amp;quot;&lt;br /&gt;
  for F :: &amp;quot;&amp;#039;f set&amp;quot;&lt;br /&gt;
  where&lt;br /&gt;
  paso [intro!]: &amp;quot;⟦∀t ∈ set args. t ∈ terminosB F;  f ∈ F⟧&lt;br /&gt;
                  ⟹ (Aplica f args) ∈ terminosB F&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de demostración sobre el conjunto de los términos básicos: &lt;br /&gt;
  Lema: terminosB es monótona; es decir, si F ⊆ G, entonces&lt;br /&gt;
  terminosB F ⊆ terminosB G.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma terminosB_mono: &lt;br /&gt;
  assumes &amp;quot;F ⊆ G&amp;quot;&lt;br /&gt;
  shows &amp;quot;terminosB F ⊆ terminosB G&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;⋀x. x ∈ terminosB F ⟹ x ∈ terminosB G&amp;quot;&lt;br /&gt;
  proof (rule terminosB.induct)&lt;br /&gt;
    fix x ys f&lt;br /&gt;
    assume H1: &amp;quot;∀t ∈ set ys. t ∈ terminosB F ∧ t ∈ terminosB G&amp;quot; and &lt;br /&gt;
           H2: &amp;quot;f ∈ F&amp;quot;&lt;br /&gt;
    have &amp;quot;∀t ∈ set ys. t ∈ terminosB G&amp;quot; using H1 by simp&lt;br /&gt;
    thus &amp;quot;(Aplica f ys) ∈ terminosB G&amp;quot; using assms H2 by blast&lt;br /&gt;
  qed&lt;br /&gt;
  thus ?thesis ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  · La aridad de un símbolo de función es el número de argumentos a los&lt;br /&gt;
    que se puede aplicar.&lt;br /&gt;
&lt;br /&gt;
  · Un término está bien formado si la longitud de la lista de&lt;br /&gt;
    argumentos de cada símbolo de función es igual a su aridad.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
inductive_set&lt;br /&gt;
  terminoB_bien_formado :: &amp;quot;(&amp;#039;f ⇒ nat) ⇒ &amp;#039;f terminoB set&amp;quot;&lt;br /&gt;
  for aridad :: &amp;quot;&amp;#039;f ⇒ nat&amp;quot;&lt;br /&gt;
where&lt;br /&gt;
paso [intro!]: &amp;quot;⟦∀t ∈ set args. t ∈ terminoB_bien_formado aridad;  &lt;br /&gt;
                 length args = aridad f⟧&lt;br /&gt;
                ⟹ (Aplica f args) ∈ terminoB_bien_formado aridad&amp;quot;&lt;br /&gt;
&lt;br /&gt;
subsection {* Definición alternativa mediante una función monótona *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  En la siguiente definición se usa&lt;br /&gt;
  · &amp;quot;lists A&amp;quot; que es el conjunto de las listas cuyos elementos &lt;br /&gt;
    pertenecen conjunto A. Está definido en la teoría Lists por&lt;br /&gt;
       inductive_set&lt;br /&gt;
         lists :: &amp;quot;&amp;#039;a set =&amp;gt; &amp;#039;a list set&amp;quot;&lt;br /&gt;
         for A :: &amp;quot;&amp;#039;a set&amp;quot;&lt;br /&gt;
       where&lt;br /&gt;
           &amp;quot;[] ∈ lists A&amp;quot;&lt;br /&gt;
         | &amp;quot;⟦ a ∈ A; l ∈ lists A ⟧ ⟹ a # l ∈ lists A&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  · Para demostrar la terminación, se usa el lema&lt;br /&gt;
    lists_mono: A ⊆ B ⟹ lists A ⊆ lists B&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
inductive_set&lt;br /&gt;
  terminoB_bien_formado&amp;#039; :: &amp;quot;(&amp;#039;f ⇒ nat) ⇒ &amp;#039;f terminoB set&amp;quot;&lt;br /&gt;
  for aridad :: &amp;quot;&amp;#039;f ⇒ nat&amp;quot;&lt;br /&gt;
where&lt;br /&gt;
paso [intro!]: &amp;quot;⟦args ∈ lists (terminoB_bien_formado&amp;#039; aridad);  &lt;br /&gt;
                 length args = aridad f⟧&lt;br /&gt;
                ⟹ (Aplica f args) ∈ terminoB_bien_formado&amp;#039; aridad&amp;quot;&lt;br /&gt;
monos lists_mono&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El uso de lists_mono no es necesario. Se incluye para mostrar la&lt;br /&gt;
  sintaxis de la declaración de &amp;quot;monos&amp;quot;.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Demostración de equivalencia *}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;terminoB_bien_formado aridad ⊆ terminoB_bien_formado&amp;#039; aridad&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;⋀x. x ∈ terminoB_bien_formado aridad ⟹&lt;br /&gt;
            x ∈ terminoB_bien_formado&amp;#039; aridad&amp;quot;&lt;br /&gt;
  proof (erule terminoB_bien_formado.induct)&lt;br /&gt;
    fix x ys f&lt;br /&gt;
    assume H1: &amp;quot;∀t ∈ set ys. t ∈ terminoB_bien_formado aridad ∧&lt;br /&gt;
                             t ∈ terminoB_bien_formado&amp;#039; aridad&amp;quot; and&lt;br /&gt;
           H2: &amp;quot;length ys = aridad f&amp;quot;&lt;br /&gt;
    thus &amp;quot;Aplica f ys ∈ terminoB_bien_formado&amp;#039; aridad&amp;quot; by auto&lt;br /&gt;
  qed&lt;br /&gt;
  thus ?thesis ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;terminoB_bien_formado&amp;#039; aridad ⊆ terminoB_bien_formado aridad&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;⋀x. x ∈ terminoB_bien_formado&amp;#039; aridad ⟹&lt;br /&gt;
            x ∈ terminoB_bien_formado aridad&amp;quot;&lt;br /&gt;
  proof (erule terminoB_bien_formado&amp;#039;.induct)&lt;br /&gt;
    fix x ys f&lt;br /&gt;
    assume H1: &amp;quot;ys ∈ lists (terminoB_bien_formado&amp;#039; aridad ∩&lt;br /&gt;
                            {a. a ∈ terminoB_bien_formado aridad})&amp;quot; and&lt;br /&gt;
           H2: &amp;quot;length ys = aridad f&amp;quot;&lt;br /&gt;
    have &amp;quot;ys ∈ lists (terminoB_bien_formado&amp;#039; aridad) ∩&lt;br /&gt;
               lists (terminoB_bien_formado aridad)&amp;quot;&lt;br /&gt;
      using H1 by (simp add: lists_Int_eq)&lt;br /&gt;
    hence &amp;quot;ys ∈ lists (terminoB_bien_formado aridad)&amp;quot; by simp&lt;br /&gt;
    thus &amp;quot;Aplica f ys ∈ terminoB_bien_formado aridad&amp;quot; using H2 by auto &lt;br /&gt;
  qed&lt;br /&gt;
  thus ?thesis ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración anterior se puede simplificar:&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;terminoB_bien_formado&amp;#039; aridad ⊆ terminoB_bien_formado aridad&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;⋀x. x ∈ terminoB_bien_formado&amp;#039; aridad ⟹&lt;br /&gt;
            x ∈ terminoB_bien_formado aridad&amp;quot;&lt;br /&gt;
  proof (erule terminoB_bien_formado&amp;#039;.induct)&lt;br /&gt;
    fix x ys f&lt;br /&gt;
    assume &amp;quot;ys ∈ lists (terminoB_bien_formado&amp;#039; aridad ∩&lt;br /&gt;
                        {a. a ∈ terminoB_bien_formado aridad})&amp;quot;&lt;br /&gt;
           &amp;quot;length ys = aridad f&amp;quot;&lt;br /&gt;
    thus &amp;quot;Aplica f ys ∈ terminoB_bien_formado aridad&amp;quot; by auto &lt;br /&gt;
  qed&lt;br /&gt;
  thus ?thesis ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Temas&amp;diff=264</id>
		<title>Temas</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Temas&amp;diff=264"/>
		<updated>2015-01-22T05:29:16Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Temas de &amp;#039;&amp;#039;Razonamiento automático (2014-15)&amp;#039;&amp;#039; ==&lt;br /&gt;
* [[Tema 1: Programación funcional en Isabelle]].&lt;br /&gt;
* [http://www.cs.us.es/~jalonso/cursos/i1m/temas/tema-8t.pdf Tema 2a: Razonamiento sobre programas Haskell]&lt;br /&gt;
* [[Tema 2b: Razonamiento automático sobre programas en Isabelle/HOL]].&lt;br /&gt;
* [[Tema 3: Razonamiento estructurado sobre programas en Isabelle/HOL]].&lt;br /&gt;
* [[Tema 4: Razonamiento por casos y por inducción]].&lt;br /&gt;
* [[Tema 5a: Verificación de la ordenación por inserción]].&lt;br /&gt;
* [[Tema 5b: Verificación de la ordenación por mezcla]].&lt;br /&gt;
* [[Tema 6: Caso de estudio: Compilación de expresiones]].&lt;br /&gt;
* [http://www.cs.us.es/~jalonso/cursos/li/temas/tema-2.pdf Tema 7a: Deducción natural proposicional]].&lt;br /&gt;
* [[Tema 7b: Deducción natural proposicional con Isabelle/HOL]].&lt;br /&gt;
* [http://www.cs.us.es/~jalonso/cursos/li/temas/tema-8.pdf Tema 8a: Deducción natural en lógica de primer orden]].&lt;br /&gt;
* [[Tema 8b: Deducción natural en lógica de primer orden con Isabelle/HOL]]&lt;br /&gt;
* [[Tema 9: Conjuntos, funciones y relaciones]].&lt;br /&gt;
* [[Tema 10: Conjuntos definidos inductivamente]].&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Documentaci%C3%B3n&amp;diff=255</id>
		<title>Documentación</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Documentaci%C3%B3n&amp;diff=255"/>
		<updated>2015-01-09T07:05:11Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: /* Otros cursos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En esta página se recogen en enlaces que sirven de documentación al curso de demostración asistida por ordenador (DAO).&lt;br /&gt;
&lt;br /&gt;
== Visiones generales de la DAO ==&lt;br /&gt;
&lt;br /&gt;
# J.A. Alonso. [http://goo.gl/NWk7b Razonamiento formalizado: Del sueño a la realidad de las pruebas]. &amp;#039;&amp;#039;Vestigium&amp;#039;&amp;#039;, 26 de diciembre de 2012.&lt;br /&gt;
# J. Avigad. [http://www.andrew.cmu.edu/user/avigad/Talks/icerm.pdf Interactive theorem proving, automated reasoning, and mathematical computation]. ICERM, 14 de diciembre de 2012. &lt;br /&gt;
# M. Davis. [http://www.cs.nyu.edu/cs/faculty/davism/early.ps The early history of automated deduction].&lt;br /&gt;
# J.P. Delahaye [http://interstices.info/jcms/int_63417/du-reve-a-la-realite-des-preuves Du rêve à la réalité des preuves]. &amp;#039;&amp;#039;Interstices&amp;#039;&amp;#039;, 8 de julio de 2012.&lt;br /&gt;
# J. Germoni [http://images.math.cnrs.fr/Coq-et-caracteres.html Coq et caractères: Preuve formelle du théorème de Feit et Thompson]. &amp;#039;&amp;#039;Images des Mathématiques&amp;#039;&amp;#039;, CNRS, 23 de noviembre de 2012. &lt;br /&gt;
# H. Geuvers [http://www.ias.ac.in/sadhana/Pdf2009Feb/3.pdf Proof assistants: History, ideas and future]. &amp;#039;&amp;#039;Sadhana&amp;#039;&amp;#039;, Vol. 34-1, pp. 3-25, février 2009.&lt;br /&gt;
# G. Gonthier [http://www.ams.org/notices/200811/tx081101382p.pdf The four-color theorem]. &amp;#039;&amp;#039;Notices of the AMS&amp;#039;&amp;#039;, Vol. 55, n° 11, pp. 1382-1393, 2008.&lt;br /&gt;
# T. Hales. [http://www.ams.org/notices/200811/tx081101370p.pdf Formal proof]. &amp;#039;&amp;#039;Notices of AMS&amp;#039;&amp;#039;, Vol. 55, N. 11 (2008) pp. 1370-1380.&lt;br /&gt;
# J. Harrison. [http://www.cl.cam.ac.uk/~jrh13/papers/ab.html A short survey of automated reasoning]. &amp;#039;&amp;#039;Lecture Notes in Computer Science&amp;#039;&amp;#039;, Vol. 4545, pp. 334-349, 2007.&lt;br /&gt;
# J. Harrison. [http://www.ams.org/notices/200811/tx081101395p.pdf Formal proof: Theory and practice]. &amp;#039;&amp;#039;Notices of the AMS&amp;#039;&amp;#039;, Vol. 55, N. 11 (2008) p.1395-1406. &lt;br /&gt;
# G. Kolata. [http://www.nytimes.com/library/cyber/week/1210math.html Computer math proof shows reasoning power]. &amp;#039;&amp;#039;The New York Times&amp;#039;&amp;#039;, 10 de diciembre de 1996.&lt;br /&gt;
# D. MacKenzie [http://www.bcs.org/server.php?show=ConWebDoc.4364 Computers and the sociology of mathematical proof].&lt;br /&gt;
# G. Sutcliffe. [http://www.cs.miami.edu/~tptp/OverviewOfATP.html What is automated theorem proving?].&lt;br /&gt;
# F. Wiedijk [http://www.cs.ru.nl/~freek/100/ Formalizing the «top 100» of mathematical theorems].&lt;br /&gt;
# F. Wiedijk [http://www.ams.org/notices/200811/tx081101408p.pdf Formal proof - Getting started]. &amp;#039;&amp;#039;Notices of the AMS&amp;#039;&amp;#039;, Vol. 55, n° 11, pp. 1408-1414, 2008.&lt;br /&gt;
# F. Wiedijk, [http://www.cs.ru.nl/~freek/pubs/qed2.ps.gz The QED manifesto revisited]. &amp;#039;&amp;#039;Studies in Logic, Grammar and Rhetoric&amp;#039;&amp;#039;, Vol. 10(23), pp. 121-133, 2007.&lt;br /&gt;
&lt;br /&gt;
== Referencias sobre Isabelle/HOL ==&lt;br /&gt;
# B. Grechuk [http://dream.inf.ed.ac.uk/projects/isabelle/Isabelle_Primer.pdf Isabelle primer for mathematicians].&lt;br /&gt;
# T. Nipkow [http://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/Isabelle2013-2/doc/prog-prove.pdf Programming and proving in Isabelle/HOL]. 5 de diciembre de 2013.&lt;br /&gt;
# T. Nipkow, M. Wenzel y L.C. Paulson [http://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/Isabelle2013-2/doc/tutorial.pdf A proof assistant for higher-order logic]. Springer-Verlag. 5 de diciembre de   2013.&lt;br /&gt;
# [http://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/library/HOL/HOL/document.pdf Isabelle/HOL — Higher-Order Logic]. 5 de diciembre de 2013.&lt;br /&gt;
# M. Wenzel [http://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/Isabelle2013-2/doc/isar-ref.pdf The Isabelle/Isar Reference Manual]. 5 de diciembre de 2013.&lt;br /&gt;
# M. Wenzel [https://www.lri.fr/~wenzel/Isabelle2011-Paris/quickref.pdf The  Isabelle/Isar quick reference].&lt;br /&gt;
# J. Siek [http://ecee.colorado.edu/~siek/ecen3703/spring10/quick-ref.pdf Quick Reference for Isabelle/Isar Propositional Logic].&lt;br /&gt;
# J. Siek [http://ecee.colorado.edu/~siek/ecen3703/spring10/quick-ref2.pdf Quick Reference for Isabelle/Isar More Proof Techniques].&lt;br /&gt;
# J. Siek [http://ecee.colorado.edu/~siek/ecen3703/spring10/quick-ref3.pdf Quick Reference for Isabelle/Isar First-Order Logic].&lt;br /&gt;
# [http://www.cl.cam.ac.uk/research/hvg/Isabelle/documentation.html Tutorials and manuals for Isabelle2013].&lt;br /&gt;
&lt;br /&gt;
== Lecturas complementarias ==&lt;br /&gt;
=== Programación funcional ===&lt;br /&gt;
# J.A. Alonso [http://www.cs.us.es/~jalonso/cursos/i1m/temas/2012-13-IM-temas-PF.pdf  Temas de &amp;quot;Programación funcional&amp;quot;]. Publicaciones del Grupo de Lógica Computacional. Universidad de Sevilla, 2012.&lt;br /&gt;
# J.A. Alonso y M.J. Hidalgo [http://www.cs.us.es/~jalonso/publicaciones/Piensa_en_Haskell.pdf Piensa en Haskell (Ejercicios de programación funcional con Haskell)]. Publicaciones del Grupo de Lógica Computacional. Universidad de Sevilla, 2012.&lt;br /&gt;
# G. Hutton [http://goo.gl/pKqG Programming in Haskell]. Cambridge University Press, 2007. &lt;br /&gt;
# M. Lipovača [http://aprendehaskell.es ¡Aprende Haskell por el bien de todos!].&lt;br /&gt;
&lt;br /&gt;
=== Lógica computacional ===&lt;br /&gt;
# J.A. Alonso [http://www.cs.us.es/~jalonso/cursos/li/temas/temas-LI-2012-13.pdf Temas de &amp;quot;Lógica informática&amp;quot; (2012-13)]. Publicaciones del Grupo de Lógica Computacional. Universidad de Sevilla, 2012.&lt;br /&gt;
# R. Bornat [http://bit.ly/oithic Proof and disproof in formal logic: an introduction for programmers]. Oxford University Press, 2005.&lt;br /&gt;
# K. Broda, S. Eisenbach, H. Khoshnevisan y S. Vickers [http://pubs.doc.ic.ac.uk/reasoned-programming/reasoned-programming.pdf Reasoned programming]. Imperial College, 1994.&lt;br /&gt;
# K. Doets y J. van Eijck [http://www.ldc.usb.ve/~astorga/Haskell.Road.pdf The Haskell Road to Logic, Maths and Programming].&lt;br /&gt;
# M. Huth y M. Ryan [http://goo.gl/TMqOo Logic in computer science: Modelling and reasoning about systems]. Cambridge University Press, 2004. (Incluye el [http://www.cs.bham.ac.uk/research/lics/tutor/index.html tutor en la Red]).&lt;br /&gt;
&lt;br /&gt;
== Cursos relacionados ==&lt;br /&gt;
=== Cursos con Isabelle/HOL ===&lt;br /&gt;
# Jeremy Avigad. [http://www.phil.cmu.edu/~avigad/formal/ Logic and Formal Verification]. (Carnegie Mellon, 2009).&lt;br /&gt;
# Clemens Ballarin. [http://cl-informatik.uibk.ac.at/teaching/ss08/atp/introduction.php Automatic Deduction]. (Univ de Innsbruck, 2008).&lt;br /&gt;
# Clemens Ballarin. [http://www4.in.tum.de/~ballarin/belgrade08-tut/ Introduction to the Isabelle Proof Assistant]. (Belgrado, 2008). &lt;br /&gt;
# Clemens Ballarin y Gerwin Klein [http://isabelle.in.tum.de/coursematerial/IJCAR04 Introduction to the Isabelle Proof Assistant]. (en el IJCAR-2004).&lt;br /&gt;
# Clemens Ballarin y Tjark Weber. [http://cl-informatik.uibk.ac.at/teaching/ws06/atp/introduction.php Automated Theorem Proving in Isabelle/HOL]. (Univ. de Innsbruck, 2006-07).&lt;br /&gt;
# A.D. Brucker, D. Basin, J.G. Smaus y B. Wolff. [http://archiv.infsec.ethz.ch/education/permanent/csmr.html Computer-supported Modeling and Reasoning]. (ETH Zurich, 2011).&lt;br /&gt;
# Mads Dam. [http://www.csc.kth.se/utbildning/kth/kurser/DD2453/aform07/ Advanced formal methods]. (KTH Royal Institute of Technology, 2007).&lt;br /&gt;
# Jacques Fleuriot y Paul Jackson. [http://www.inf.ed.ac.uk/teaching/courses/ar/slides/ Automated reasoning]. (Univ. de Edimburgo, 2012-13).&lt;br /&gt;
# Thomas Genet [http://www.irisa.fr/celtique/genet/ACF Software formal analysis and design]. (Univ. de Rennes)&lt;br /&gt;
# Gerwin Klein. [http://www.cse.unsw.edu.au/~kleing/teaching/thprv-04 Theorem Proving - Principles, Techniques, Applications]. (NICTA, 2004).&lt;br /&gt;
# Gerwin Klein. [http://www.cse.unsw.edu.au/~cs4161/index.html Advanced Topics in Software Verification]. (NICTA, 2012).&lt;br /&gt;
# Joao Marcos. [http://www.dimap.ufrn.br/~jmarcos/courses/LC/Ementa.htm Lógica computacional: Demonstração assistida e semi-automática de teoremas].(UFRN, 2000).&lt;br /&gt;
# Tobias Nipkow. [http://www4.informatik.tu-muenchen.de/~nipkow/semantics/ Semantics of programming languages]. (Univ. de Munich, 2012-13).&lt;br /&gt;
# Tobias Nipkow [http://isabelle.in.tum.de/coursematerial/PSV2009-1 Theorem Proving with Isabelle/HOL An Intensive Course]. &lt;br /&gt;
# Larry Paulson. [http://www.cl.cam.ac.uk/teaching/0910/L21/ Interactive Formal Verification]. (Univ. de Cambridge, 2009-10).&lt;br /&gt;
# Arnd Poetzsch-Heffter. [https://softech.informatik.uni-kl.de/Homepage/SVHOL10 Specification and Verification with Higher-Order Logic]. &lt;br /&gt;
# Viorel Preoteasa, Ralph-Johan Back y Charmi Panchal. [http://users.abo.fi/vpreotea/isabelle-2012 Introduction to mechanized reasoning with Isabelle/HOL]. (Åbo Akademi University, 2012).&lt;br /&gt;
# Jeremy G. Siek. [http://www.cs.colorado.edu/~siek/7000/spring07/ Practical Theorem Proving with Isabelle/Isar]. (Univ. de Colorado, 2007).&lt;br /&gt;
# Jeremy G. Siek. [http://ecee.colorado.edu/~siek/ecen5013/spring11/ Theorem proving in Isabelle]. (Univ. de Colorado, 2011).&lt;br /&gt;
# Jan-Georg Smaus. [http://www.informatik.uni-freiburg.de/~ki/teaching/ws0910/csmr/lecture.html Computer-supported modeling and reasoning]. (Univ. de Feiburgo, 2009).&lt;br /&gt;
# Christian Sternagel [http://cl-informatik.uibk.ac.at/teaching/ss11/eve/content.php Experiments in Verification – Introduction to Isabelle/HOL]. (Univ. de Innsbruck, 2011-12).&lt;br /&gt;
# Tjark Weber. [http://www.cl.cam.ac.uk/teaching/1011/L21/ Interactive Formal Verification]. (Univ. de Cambridge, 2010-11).&lt;br /&gt;
&lt;br /&gt;
=== Otros cursos ===&lt;br /&gt;
# José A. Alonso [http://www.cs.us.es/~jalonso/cursos/li/ Lógica informática] (Univ. de Sevilla, 2012-13).&lt;br /&gt;
# Thorsten Altenkirch y Peter Morris [http://www.cs.nott.ac.uk/~txa/g52ifr Introduction to formal reasoning] (Univ. de Nottingham, 2010-11).&lt;br /&gt;
# Yves Bertot, Pierre Casteran, Benjamin Gregoire, Pierre Letouzey y Assia Mahboubi [http://www.di.ens.fr/~zappa/teaching/coq/ecole11 Modelling and verifying algorithms in Coq: an introduction]. (INRIA Paris-Rocquencourt, 14-18 noviembre 2011).&lt;br /&gt;
# Pierre Castéran [http://www.labri.fr/perso/casteran/FM/Logique/index.html Logic (Master In Verification)] (Univ. de Burdeos, 2011-12).&lt;br /&gt;
# Adam Chlipala [http://stellar.mit.edu/S/course/6/fa11/6.892/ Interactive computer theorem proving]. (MIT, 2012-13).&lt;br /&gt;
# Adam Chlipala y Armando Solar Lezama [https://stellar.mit.edu/S/course/6/fa13/6.820/index.html Foundations of program analysis]. (MIT, 2013-14).&lt;br /&gt;
# Robby Findler [http://www.eecs.northwestern.edu/~robby/courses/395-495-2013-fall Certified programming with dependent types]. (Northwestern, 2013-14).&lt;br /&gt;
# Nuno Gaspar [http://www-sop.inria.fr/members/Nuno.Gaspar/teaching/coq2012.php Verification with the Coq Proof Assistant] (INRIA Sophia Antipolis, 2012-13).&lt;br /&gt;
# Carlos Luna y Gustavo Betarte. [https://eva.fing.edu.uy/course/view.php?id=363 Construcción formal de programas en teoría de tipos]. (Univ. de la República, Uruguay, 2013-14).&lt;br /&gt;
# Michael Genesereth [http://logic.stanford.edu/classes/cs157/2011/cs157.html Computational Logic] (Univ. de Stanford, 2011-12).&lt;br /&gt;
# Ian Hodkinson [http://www.doc.ic.ac.uk/~imh/teaching/140_logic/logic.html Logic] (Imperial College, Londres, 2010-11).&lt;br /&gt;
# Peter Lucas [http://www.cs.ru.nl/~peterl/teaching/KeR/ Knowledge Representation and Reasoning] (Radboud University # egen, 2011-12).&lt;br /&gt;
# Larry Paulson [http://www.cl.cam.ac.uk/Teaching/current/LogicProof/ Logic and Proof] (Univ. de Cambridge, 2011-12).&lt;br /&gt;
# Michael Winter [Logic in Computer Science] (Brock University, Ontario, Canada, 2010-11).&lt;br /&gt;
&lt;br /&gt;
== Bibliotecas de ejemplos de verificación ==&lt;br /&gt;
# [http://afp.sourceforge.net Archive of Formal Proofs].&lt;br /&gt;
# [http://www.cs.ru.nl/~freek/100 Formalizing 100 Theorems].&lt;br /&gt;
# [http://toccata.lri.fr/gallery Gallery of verified programs].&lt;br /&gt;
# [http://www.cs.nott.ac.uk/~lad/research/challenges/ Induction Challenge Problems].&lt;br /&gt;
# [http://automatedreasoning.net/ Larry Wos&amp;#039; Notebooks].&lt;br /&gt;
# [http://www.cs.miami.edu/~tptp/ The TPTP Problem Library for Automated Theorem Proving].&lt;br /&gt;
# [http://www.macs.hw.ac.uk/vstte10/Competition.html The 1st Verified Software Competition].&lt;br /&gt;
# [https://sites.google.com/site/vstte2012/compet The 2nd Verified Software Competition].&lt;br /&gt;
# [http://verifythis.cost-ic0701.org VerifyThis (A collection of verification benchmarks].&lt;br /&gt;
&lt;br /&gt;
== Artículos recientes ==&lt;br /&gt;
Están en orden cronológico inverso a la fecha de su reseña en [http://www.glc.us.es/~jalonso/vestigium/tag/resena Vestigium]:&lt;br /&gt;
# [http://bit.ly/1iZjgqN Proof Pearl: A probabilistic proof for the Girth-Chromatic number theorem]. L. Noschinski &lt;br /&gt;
# [http://bit.ly/1iJ8uVz A graph library for Isabelle]. ~ L. Noschinski &lt;br /&gt;
# [http://bit.ly/I0CU80 Gödel’s incompleteness theorems]. ~ L.C. Paulson &lt;br /&gt;
# [http://bit.ly/I0CPRN The hereditarily finite sets]. ~ L.C. Paulson &lt;br /&gt;
# [http://bit.ly/HBiIJI Applications of real number theorem proving in PVS]. ~ H. Gottliebsen, R. Hardy, O. Lightfoot y U. Martin &lt;br /&gt;
# [http://bit.ly/1awnMLB A machine-assisted proof of Gödel’s incompleteness theorems for the theory of hereditarily finite sets]. ~ L.C. Paulson &lt;br /&gt;
# [http://bit.ly/19lWeYy Verified AIG algorithms in ACL2]. ~ J. Davis y S. Swords &lt;br /&gt;
# [http://bit.ly/GAhC00 A formal model and correctness proof for an access control policy framework]. ~ C. Wu, X. Zhang y C. Urban &lt;br /&gt;
# [http://bit.ly/16SMvSS The ontological argument in PVS]. ~ J. Rushby &lt;br /&gt;
# [http://bit.ly/1dRt9n0  Formalizing Moessner’s theorem and generalizations in Nuprl]. ~ M. Bickford, D. Kozen y A. Silva &lt;br /&gt;
# [http://bit.ly/1bSeDNB Formalization in PVS of balancing properties necessary for the security of the Dolev-Yao cascade protocol model]. ~ M. Ayala y Y. Santos &lt;br /&gt;
# [http://bit.ly/1feFqWE Proof assistant based on didactic considerations]. ~ J. Pais y A Tasistro &lt;br /&gt;
# [http://bit.ly/18tHNBi Theory exploration for interactive theorem proving]. ~ M. Johansson &lt;br /&gt;
# [http://bit.ly/1b0242s From Tarski to Hilbert]. ~ G. Braun y J. Narboux &lt;br /&gt;
# [http://bit.ly/18HaXaR Formal verification of language-based concurrent noninterference]. ~ A. Popescu, J. Hölzl y T. Nipkow &lt;br /&gt;
# [http://bit.ly/1aRTQsU A Traffic Alert and Collision Avoidance System(TCAS-II) Resolution Advisory Algorithm]. ~ C. Muñoz, A. Narkawicz y J. Chamberlain &lt;br /&gt;
# [http://bit.ly/1dNwhDI Formal verification of cryptographic security proofs]. ~ M. Berg &lt;br /&gt;
# [http://bit.ly/17muAUv Polygonal numbers in Mizar]. ~ A. Grabowski &lt;br /&gt;
# [http://bit.ly/1hk5z6L A mechanised proof of Gödel’s incompleteness theorems using Nominal Isabelle]. ~ L.C. Paulson &lt;br /&gt;
# [http://bit.ly/1cSL0wE Steps towards verified implementations of HOL Light]. ~ M.O. Myreen, S. Owens y R. Kumar &lt;br /&gt;
# [http://bit.ly/16Kbgm0 Generic datatypes à la carte]. ~ S. Keuchel y T. Schrijvers &lt;br /&gt;
# [http://bit.ly/1bqJGx4 Proof pearl: A verified bignum implementation in x86-64 machine code]. ~ M.O. Myreen y G. Curello &lt;br /&gt;
# [http://bit.ly/142ow2Q Mechanized metatheory for a λ λ-calculus with trust types]. ~ R. Ribeiro, C. Camarão y L. Figueiredo &lt;br /&gt;
# [http://bit.ly/15WZBDy Proving soundness of combinatorial Vickrey auctions and generating verified executable code]. ~ M.B. Caminati, M. Kerber, C. Lange y C. Rowat &lt;br /&gt;
# [http://bit.ly/198g4n9 A computer-assisted proof of correctness of a marching cubes algorithm]. ~ A.N. Chernikov y J. Xu &lt;br /&gt;
# [http://bit.ly/11QA5g7 Verifying the bridge between simplicial topology and algebra: the Eilenberg-Zilber algorithm]. ~ L. Lambán, J. Rubio, F.J. Martín y J.L. Ruiz &lt;br /&gt;
# [http://bit.ly/1cJAXYk The Königsberg bridge problem and the friendship theorem]. ~ W. Li &lt;br /&gt;
# [http://bit.ly/13DBK9R Formal verification of a proof procedure for the description logic ALC]. ~ M. Chaabani, M. Mezghiche y M. Strecker &lt;br /&gt;
# [http://bit.ly/1ep2ex9 Pratt’s primality certificates]. ~ S. Wimmer y L. Noschinski &lt;br /&gt;
# [http://bit.ly/13C95Ci Reasoning about higher-order relational specifications]. ~ Y. Wang, K. Chaudhuri, A. Gacek y G. Nadathur &lt;br /&gt;
# [http://bit.ly/18QQLcL Proofs you can believe in – Proving equivalences between Prolog semantics in Coq]. ~ J. Kriener, A. King y S. Blazy &lt;br /&gt;
# [http://bit.ly/19uc82J Certified, efficient and sharp univariate Taylor models in Coq]. ~ E. Martin-Dorel, L. Rideau, L. Théry, M. Mayero y I. Paşca &lt;br /&gt;
# [http://bit.ly/1c4Rzel Ordinals in HOL: Transfinite arithmetic up to (and beyond) ω₁]. ~ M. Norrish y B. Huffman   &lt;br /&gt;
# [http://bit.ly/14b4Akz Program verification based on Kleene algebra in Isabelle/HOL] ~ A. Armstrong, G. Struth y T. Weber &lt;br /&gt;
# [http://bit.ly/1aOgRKx Reading an algebra textbook (by translating it to a formal document in the Isabelle/Isar language)]. ~ C. Ballarin &lt;br /&gt;
# [http://bit.ly/11HKixj Computational verification of network programs in Coq]. ~ G. Stewart &lt;br /&gt;
# [http://www.glc.us.es/~jalonso/vestigium/resena-certifying-homological-algorithms-to-study-biomedical-images Certifying homological algorithms to study biomedical images]. ~ M. Poza &lt;br /&gt;
# [http://bit.ly/16Nks9m Formalizing cut elimination of coalgebraic logics in Coq]. ~ H. Tews &lt;br /&gt;
# [http://www.glc.us.es/~jalonso/vestigium/resena-the-formalization-of-syntax-based-mathematical-algorithms-using-quotation-and-evaluation/ The formalization of syntax-based mathematical algorithms using quotation and evaluation]. ~ W.M. Farmer &lt;br /&gt;
# [http://www.glc.us.es/~jalonso/vestigium/resena-certified-symbolic-manipulation-bivariate-simplicial-polynomials/ Certified symbolic manipulation: Bivariate simplicial polynomials]. ~ L. Lambán, F.J. Martín, J. Rubio y J.L. Ruiz &lt;br /&gt;
# [http://www.glc.us.es/~jalonso/vestigium/resena-solveurs-cpfd-verifies-formellement/ Solveurs CP(FD) vérifiés formellement]. ~ C Dubois y A. Gotlieb &lt;br /&gt;
# [http://www.glc.us.es/~jalonso/vestigium/resena-formalizing-bounded-increase/ Formalizing bounded increase]. ~ R. Thiemann &lt;br /&gt;
# [http://www.glc.us.es/~jalonso/vestigium/resena-formal-mathematics-on-display-a-wiki-for-flyspeck/ Formal mathematics on display: A wiki for Flyspeck]. ~ C. Tankink, C. Kaliszyk, J. Urban y H. Geuvers &lt;br /&gt;
# [http://www.glc.us.es/~jalonso/vestigium/resena-theorem-of-three-circles-in-coq Theorem of three circles in Coq]. ~ J. Zsidó &lt;br /&gt;
# [http://bit.ly/19fiWAY Certified HLints with Isabelle/HOLCF-Prelude]. ~ J. Breitner, B. Huffman, N. Mitchell y C. Sternagel &lt;br /&gt;
# [http://bit.ly/ZfSQrQ Automatic data refinement]. ~ P. Lammich &lt;br /&gt;
# [http://bit.ly/18vyjm7 The rooster and the butterflies (a machine-checked proof of the Jordan-Hölder theorem for finite groups)]. ~ A. Mahboubi &lt;br /&gt;
# [http://bit.ly/114oyZV Mechanical verification of SAT refutations with extended resolution]. ~ N. Wetzler, M.J.H. Heule y W.A. Hunt Jr. &lt;br /&gt;
# [http://bit.ly/13H0REu Type classes and filters for mathematical analysis in Isabelle/HOL] ~ J. Hölzl, F. Immler y B. Huffman &lt;br /&gt;
# [http://bit.ly/10fv8wO Verifying refutations with extended resolution]. ~ M. J. H. Heule, W. A. Hunt, Jr. y N. Wetzler  &lt;br /&gt;
# [http://bit.ly/10EcFWj A Web interface for Isabelle: The next generation]. ~ C. Lüth y M. Ring  &lt;br /&gt;
# [http://bit.ly/18P9CSv On the formalization of continuous-time Markov chains in HOL]. ~ L. Liu, O. Hasan y S. Tahar &lt;br /&gt;
# [http://bit.ly/17H2mqy Formalizing Turing machines]. ~ A. Asperti y W. Ricciotti &lt;br /&gt;
# [http://bit.ly/YwuCeL Light-weight containers for Isabelle: efficient, extensible, nestable]. ~ A. Lochbihler &lt;br /&gt;
# [http://bit.ly/10XLrRA Graph theory]. ~ L. Noschinski &lt;br /&gt;
# [http://bit.ly/19kPEP4 A machine-checked proof of the odd order theorem]. ~ G. Gonthier et als. &lt;br /&gt;
# [http://goo.gl/LdihL A constructive theory of regular languages in Coq]. ~ C. Doczkal, J.O. Kaiser y G. Smolka &lt;br /&gt;
# [http://goo.gl/gwcwL A formal proof of Kruskal’s tree theorem in Isabelle/HOL]. ~ C. Sternagel &lt;br /&gt;
# [http://goo.gl/CUF3e Formalizing Knuth-Bendix orders and Knuth-Bendix completion]. ~ C. Sternagel y R. Thiemann  &lt;br /&gt;
# [http://goo.gl/9JAfX Developing an auction theory toolbox]. ~ C. Lange, C. Rowat, W. Windsteiger y M. Kerber &lt;br /&gt;
# [http://goo.gl/6OfmQ Formalization of incremental simplex algorithm by stepwise refinement]. ~ M. Spasić y F. Marić  &lt;br /&gt;
# [http://goo.gl/Guxky Coinductive pearl: Modular first-order logic completeness]. ~ J.C. Blanchette, A. Popescu y D. Traytel &lt;br /&gt;
# [http://goo.gl/HUOl8 A fully verified executable LTL model checker]. ~ J. Esparza et als. &lt;br /&gt;
# [http://goo.gl/RV54S ForMaRE - formal mathematical reasoning in economics]. ~ M. Kerber, C. Lange y C. Rowat. &lt;br /&gt;
# [http://goo.gl/Y7sIq AI over large formal knowledge bases: The first decade]. ~ J. Urban. &lt;br /&gt;
# [http://goo.gl/vvqNg Formalization of real analysis: A survey of proof assistants and libraries]. ~ S. Boldo, C. Lelay y G. Melquiond. &lt;br /&gt;
# [http://goo.gl/bEFYa Data refinement in Isabelle/HOL]. ~ F. Haftmann, A. Krauss, O. Kunčar y T. Nipkow &lt;br /&gt;
# [http://goo.gl/xTyvE Formalizing the confluence of orthogonal rewriting systems]. ~ A.C. Rocha y M. Ayala. &lt;br /&gt;
# [http://goo.gl/zCYHj Formalization of the complex number theory in HOL4]. ~ Z. Shi et als. &lt;br /&gt;
# [http://goo.gl/kM0dI Programming and reasonning with PowerLists in Coq]. ~ F. Loulergue y V. Niculescu  &lt;br /&gt;
# [http://goo.gl/KkU6s A hierarchy of mathematical structures in ACL2]. ~ J. Heras, F.J. Martín y V. Pascual. &lt;br /&gt;
# [http://www.inf.kcl.ac.uk/staff/urbanc/Publications/tm.pdf Mechanising Turing Machines and Computability Theory in Isabelle/HOL] ~ J. Xu, X. Zhang y C. Urban&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Relaci%C3%B3n_11&amp;diff=254</id>
		<title>Relación 11</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Relaci%C3%B3n_11&amp;diff=254"/>
		<updated>2015-01-08T12:50:26Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* R11: Plegados de listas y de árboles *}  theory R11 imports Main  begin   section {* Nuevas funciones sobre listas *}  text {*    Nota. En esta r...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R11: Plegados de listas y de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R11&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
section {* Nuevas funciones sobre listas *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Nota. En esta relación se usará la función suma tal que (suma xs) es&lt;br /&gt;
  la suma de los elementos de xs, definida por&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun suma :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;suma xs = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Las funciones de plegado, foldr y foldl, están definidas en la teoría&lt;br /&gt;
  List.thy por&lt;br /&gt;
       foldr :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b ⇒ &amp;#039;b&amp;quot;&lt;br /&gt;
       foldr f []       = id&lt;br /&gt;
       foldr f (x # xs) = f x ∘ foldr f xs&lt;br /&gt;
&lt;br /&gt;
       foldl :: &amp;quot;(&amp;#039;b ⇒ &amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;b ⇒ &amp;#039;a list ⇒ &amp;#039;b&amp;quot;&lt;br /&gt;
       foldl f a []       = a&lt;br /&gt;
       foldl f a (x # xs) = foldl f (f a x) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Por ejemplo,&lt;br /&gt;
     foldr (op +) [a,b,c] d        = a + (b + (c + d))&lt;br /&gt;
     foldl (op +) d [a,b,c]        = ((d + a) + b) + c&lt;br /&gt;
     foldr (op -) [9,4,2] (0::int) = 7&lt;br /&gt;
     foldl (op -) (0::int) [9,4,2] = -15&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;foldr (op +) [a,b,c] d&amp;quot;        -- &amp;quot;= a + (b + (c + d))&amp;quot;&lt;br /&gt;
value &amp;quot;foldl (op +) d [a,b,c]&amp;quot;        -- &amp;quot;= ((d + a) + b) + c&amp;quot;&lt;br /&gt;
value &amp;quot;foldr (op -) [9,4,2] (0::int)&amp;quot; -- &amp;quot;= 7&amp;quot;&lt;br /&gt;
value &amp;quot;foldl (op -) (0::int) [9,4,2]&amp;quot; -- &amp;quot;= -15&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar que&lt;br /&gt;
     suma xs = foldr (op +) xs 0&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma suma_foldr: &amp;quot;suma xs = foldr (op +) xs 0&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar que&lt;br /&gt;
     length xs = foldr (λ x res. 1 + res) xs 0&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma length_foldr: &amp;quot;length xs = foldr (λ x res. 1 + res) xs 0&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. La aplicación repetida de foldr y map tiene el&lt;br /&gt;
  inconveniente de que la lista se recorre varias veces. Sin embargo, es&lt;br /&gt;
  suficiente recorrerla una vez como se muestra en el siguiente ejemplo,  &lt;br /&gt;
     suma (map (λx. x + 3) xs) = foldr h xs b&lt;br /&gt;
  Determinar los valores de h y b para que se verifique la igualdad&lt;br /&gt;
  anterior y demostrarla.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Generalizar el resultado anterior; es decir determinar&lt;br /&gt;
  los valores de h y b para que se verifique la igualdad &lt;br /&gt;
     foldr g (map f xs) a = foldr h xs b&lt;br /&gt;
  y demostrarla.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. La siguiente función invierte una lista en tiempo lineal&lt;br /&gt;
     fun inversa_ac :: &amp;quot;[&amp;#039;a list, &amp;#039;a list] ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
       &amp;quot;inversa_ac [] ys = ys&amp;quot;&lt;br /&gt;
     | &amp;quot;inversa_ac (x#xs) ys = (inversa_ac xs (x#ys))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
     definition inversa_ac :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
       &amp;quot;inversa_ac xs ≡ inversa_ac_aux xs []&amp;quot;&lt;br /&gt;
  Por ejemplo, &lt;br /&gt;
     inversa_ac [a,d,b,c] = [c, b, d, a]&lt;br /&gt;
  Demostrar que inversa_ac se puede definir unsando foldl.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun inversa_ac_aux :: &amp;quot;[&amp;#039;a list, &amp;#039;a list] ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa_ac_aux [] ys = ys&amp;quot;&lt;br /&gt;
| &amp;quot;inversa_ac_aux (x#xs) ys = (inversa_ac_aux xs (x#ys))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
definition inversa_ac :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa_ac xs ≡ inversa_ac_aux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa_ac [a,d,b,c]&amp;quot; -- &amp;quot;= [c, b, d, a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma inversa_ac_aux_foldl: &lt;br /&gt;
  &amp;quot;inversa_ac_aux xs a = foldl undefined a xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar la siguiente propiedad distributiva de la suma&lt;br /&gt;
  sobre la concatenación:&lt;br /&gt;
     suma (xs @ ys) = suma xs + suma ys&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma suma_append [simp]: &lt;br /&gt;
  &amp;quot;suma (xs @ ys) = suma xs + suma ys&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar una propiedad similar para foldr&lt;br /&gt;
     foldr f (xs @ ys) a = f (foldr f xs a) (foldr f ys a)&lt;br /&gt;
  En este caso, hay que restringir el resultado teniendo en cuenta&lt;br /&gt;
  propiedades algebraicas de f y a.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Definir, usando foldr, la función&lt;br /&gt;
     prod :: &amp;quot;nat list ⇒ nat&amp;quot;&lt;br /&gt;
  tal que (prod xs) es el producto de los elementos de xs. Por ejemplo,&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
definition prod :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;prod xs ≡ undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;prod [2::nat,3,5]&amp;quot; -- &amp;quot;= 30&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar directamente (es decir, sin inducción) que&lt;br /&gt;
     prod (xs @ ys) = prod xs * prod ys&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;prod (xs @ ys) = prod xs * prod ys&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
section {* Functiones sobre árboles *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información sólo en los nodos. Por ejemplo,&lt;br /&gt;
  el árbol &lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     ·   · ·   · &lt;br /&gt;
  se representa por &amp;quot;N (N H c H) e (N H g H)&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H | N &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N (N H c H) e (N H g H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N (N H c H) e (N H g H))&lt;br /&gt;
     = [e,c,g]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N (N H c H) e (N H g H))&amp;quot;&lt;br /&gt;
-- &amp;quot;= [e,c,g]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N (N H c H) e (N H g H))&lt;br /&gt;
     = [c,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N (N H c H) e (N H g H))&amp;quot;&lt;br /&gt;
-- &amp;quot;= [c,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Definir, usando un acumulador, la función &lt;br /&gt;
     postOrdenA :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrdenA a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrdenA (N (N H c H) e (N H g H))&lt;br /&gt;
     = [c,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun postOrdenAaux :: &amp;quot;[&amp;#039;a arbol, &amp;#039;a list] ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrdenAaux t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
definition postOrdenA :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrdenA a ≡ undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrdenA (N (N H c H) e (N H g H))&amp;quot;&lt;br /&gt;
-- &amp;quot;= [c,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar que&lt;br /&gt;
     postOrdenAaux a xs = (postOrden a) @ xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;postOrdenAaux a xs = (postOrden a) @ xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Definir la función&lt;br /&gt;
     foldl_arbol :: &amp;quot;(&amp;#039;b =&amp;gt; &amp;#039;a =&amp;gt; &amp;#039;b) ⇒ &amp;#039;b ⇒ &amp;#039;a arbol ⇒ &amp;#039;b&amp;quot; where&lt;br /&gt;
  tal que (foldl_arbol f b a) es el plegado izquierdo del árbol a con la&lt;br /&gt;
  operación f y elemento inicial b.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun foldl_arbol :: &amp;quot;(&amp;#039;b =&amp;gt; &amp;#039;a =&amp;gt; &amp;#039;b) ⇒ &amp;#039;b ⇒ &amp;#039;a arbol ⇒ &amp;#039;b&amp;quot; where&lt;br /&gt;
  &amp;quot;foldl_arbol f b t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar que&lt;br /&gt;
     postOrdenAaux t a = foldl_arbol (λ xs x. Cons x xs) a t&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;postOrdenAaux t a = foldl_arbol (λ xs x. Cons x xs) a t&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Definir la función&lt;br /&gt;
     suma_arbol :: &amp;quot;nat arbol ⇒ nat&amp;quot; &lt;br /&gt;
  tal que (suma_arbol a) es la suma de los elementos del árbol de&lt;br /&gt;
  números naturales a.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun suma_arbol :: &amp;quot;nat arbol ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;suma_arbol t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar que&lt;br /&gt;
     suma_arbol a = suma (preOrden a)&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;suma_arbol a = suma (preOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=R11&amp;diff=253</id>
		<title>R11</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=R11&amp;diff=253"/>
		<updated>2015-01-08T12:49:58Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* R11: Plegados de listas y de árboles *}  theory R11 imports Main  begin   section {* Nuevas funciones sobre listas *}  text {*    Nota. En esta r...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R11: Plegados de listas y de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R11&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
section {* Nuevas funciones sobre listas *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Nota. En esta relación se usará la función suma tal que (suma xs) es&lt;br /&gt;
  la suma de los elementos de xs, definida por&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun suma :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;suma xs = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Las funciones de plegado, foldr y foldl, están definidas en la teoría&lt;br /&gt;
  List.thy por&lt;br /&gt;
       foldr :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b ⇒ &amp;#039;b&amp;quot;&lt;br /&gt;
       foldr f []       = id&lt;br /&gt;
       foldr f (x # xs) = f x ∘ foldr f xs&lt;br /&gt;
&lt;br /&gt;
       foldl :: &amp;quot;(&amp;#039;b ⇒ &amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;b ⇒ &amp;#039;a list ⇒ &amp;#039;b&amp;quot;&lt;br /&gt;
       foldl f a []       = a&lt;br /&gt;
       foldl f a (x # xs) = foldl f (f a x) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Por ejemplo,&lt;br /&gt;
     foldr (op +) [a,b,c] d        = a + (b + (c + d))&lt;br /&gt;
     foldl (op +) d [a,b,c]        = ((d + a) + b) + c&lt;br /&gt;
     foldr (op -) [9,4,2] (0::int) = 7&lt;br /&gt;
     foldl (op -) (0::int) [9,4,2] = -15&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;foldr (op +) [a,b,c] d&amp;quot;        -- &amp;quot;= a + (b + (c + d))&amp;quot;&lt;br /&gt;
value &amp;quot;foldl (op +) d [a,b,c]&amp;quot;        -- &amp;quot;= ((d + a) + b) + c&amp;quot;&lt;br /&gt;
value &amp;quot;foldr (op -) [9,4,2] (0::int)&amp;quot; -- &amp;quot;= 7&amp;quot;&lt;br /&gt;
value &amp;quot;foldl (op -) (0::int) [9,4,2]&amp;quot; -- &amp;quot;= -15&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar que&lt;br /&gt;
     suma xs = foldr (op +) xs 0&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma suma_foldr: &amp;quot;suma xs = foldr (op +) xs 0&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar que&lt;br /&gt;
     length xs = foldr (λ x res. 1 + res) xs 0&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma length_foldr: &amp;quot;length xs = foldr (λ x res. 1 + res) xs 0&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. La aplicación repetida de foldr y map tiene el&lt;br /&gt;
  inconveniente de que la lista se recorre varias veces. Sin embargo, es&lt;br /&gt;
  suficiente recorrerla una vez como se muestra en el siguiente ejemplo,  &lt;br /&gt;
     suma (map (λx. x + 3) xs) = foldr h xs b&lt;br /&gt;
  Determinar los valores de h y b para que se verifique la igualdad&lt;br /&gt;
  anterior y demostrarla.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Generalizar el resultado anterior; es decir determinar&lt;br /&gt;
  los valores de h y b para que se verifique la igualdad &lt;br /&gt;
     foldr g (map f xs) a = foldr h xs b&lt;br /&gt;
  y demostrarla.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. La siguiente función invierte una lista en tiempo lineal&lt;br /&gt;
     fun inversa_ac :: &amp;quot;[&amp;#039;a list, &amp;#039;a list] ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
       &amp;quot;inversa_ac [] ys = ys&amp;quot;&lt;br /&gt;
     | &amp;quot;inversa_ac (x#xs) ys = (inversa_ac xs (x#ys))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
     definition inversa_ac :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
       &amp;quot;inversa_ac xs ≡ inversa_ac_aux xs []&amp;quot;&lt;br /&gt;
  Por ejemplo, &lt;br /&gt;
     inversa_ac [a,d,b,c] = [c, b, d, a]&lt;br /&gt;
  Demostrar que inversa_ac se puede definir unsando foldl.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun inversa_ac_aux :: &amp;quot;[&amp;#039;a list, &amp;#039;a list] ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa_ac_aux [] ys = ys&amp;quot;&lt;br /&gt;
| &amp;quot;inversa_ac_aux (x#xs) ys = (inversa_ac_aux xs (x#ys))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
definition inversa_ac :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa_ac xs ≡ inversa_ac_aux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa_ac [a,d,b,c]&amp;quot; -- &amp;quot;= [c, b, d, a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma inversa_ac_aux_foldl: &lt;br /&gt;
  &amp;quot;inversa_ac_aux xs a = foldl undefined a xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar la siguiente propiedad distributiva de la suma&lt;br /&gt;
  sobre la concatenación:&lt;br /&gt;
     suma (xs @ ys) = suma xs + suma ys&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma suma_append [simp]: &lt;br /&gt;
  &amp;quot;suma (xs @ ys) = suma xs + suma ys&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar una propiedad similar para foldr&lt;br /&gt;
     foldr f (xs @ ys) a = f (foldr f xs a) (foldr f ys a)&lt;br /&gt;
  En este caso, hay que restringir el resultado teniendo en cuenta&lt;br /&gt;
  propiedades algebraicas de f y a.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Definir, usando foldr, la función&lt;br /&gt;
     prod :: &amp;quot;nat list ⇒ nat&amp;quot;&lt;br /&gt;
  tal que (prod xs) es el producto de los elementos de xs. Por ejemplo,&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
definition prod :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;prod xs ≡ undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;prod [2::nat,3,5]&amp;quot; -- &amp;quot;= 30&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar directamente (es decir, sin inducción) que&lt;br /&gt;
     prod (xs @ ys) = prod xs * prod ys&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;prod (xs @ ys) = prod xs * prod ys&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
section {* Functiones sobre árboles *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información sólo en los nodos. Por ejemplo,&lt;br /&gt;
  el árbol &lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     ·   · ·   · &lt;br /&gt;
  se representa por &amp;quot;N (N H c H) e (N H g H)&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H | N &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N (N H c H) e (N H g H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N (N H c H) e (N H g H))&lt;br /&gt;
     = [e,c,g]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N (N H c H) e (N H g H))&amp;quot;&lt;br /&gt;
-- &amp;quot;= [e,c,g]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N (N H c H) e (N H g H))&lt;br /&gt;
     = [c,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N (N H c H) e (N H g H))&amp;quot;&lt;br /&gt;
-- &amp;quot;= [c,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Definir, usando un acumulador, la función &lt;br /&gt;
     postOrdenA :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrdenA a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrdenA (N (N H c H) e (N H g H))&lt;br /&gt;
     = [c,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun postOrdenAaux :: &amp;quot;[&amp;#039;a arbol, &amp;#039;a list] ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrdenAaux t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
definition postOrdenA :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrdenA a ≡ undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrdenA (N (N H c H) e (N H g H))&amp;quot;&lt;br /&gt;
-- &amp;quot;= [c,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar que&lt;br /&gt;
     postOrdenAaux a xs = (postOrden a) @ xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;postOrdenAaux a xs = (postOrden a) @ xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Definir la función&lt;br /&gt;
     foldl_arbol :: &amp;quot;(&amp;#039;b =&amp;gt; &amp;#039;a =&amp;gt; &amp;#039;b) ⇒ &amp;#039;b ⇒ &amp;#039;a arbol ⇒ &amp;#039;b&amp;quot; where&lt;br /&gt;
  tal que (foldl_arbol f b a) es el plegado izquierdo del árbol a con la&lt;br /&gt;
  operación f y elemento inicial b.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun foldl_arbol :: &amp;quot;(&amp;#039;b =&amp;gt; &amp;#039;a =&amp;gt; &amp;#039;b) ⇒ &amp;#039;b ⇒ &amp;#039;a arbol ⇒ &amp;#039;b&amp;quot; where&lt;br /&gt;
  &amp;quot;foldl_arbol f b t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar que&lt;br /&gt;
     postOrdenAaux t a = foldl_arbol (λ xs x. Cons x xs) a t&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;postOrdenAaux t a = foldl_arbol (λ xs x. Cons x xs) a t&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Definir la función&lt;br /&gt;
     suma_arbol :: &amp;quot;nat arbol ⇒ nat&amp;quot; &lt;br /&gt;
  tal que (suma_arbol a) es la suma de los elementos del árbol de&lt;br /&gt;
  números naturales a.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun suma_arbol :: &amp;quot;nat arbol ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;suma_arbol t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar que&lt;br /&gt;
     suma_arbol a = suma (preOrden a)&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;suma_arbol a = suma (preOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Ejercicios&amp;diff=252</id>
		<title>Ejercicios</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Ejercicios&amp;diff=252"/>
		<updated>2015-01-08T12:49:02Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: /* Relaciones de ejercicios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Relaciones de ejercicios ==&lt;br /&gt;
&lt;br /&gt;
=== Relaciones de ejercicios propuestos ===&lt;br /&gt;
&lt;br /&gt;
En esta sección se publicarán las relaciones de ejercicios. Las soluciones se escriben de forma colaborativa por los alumnos del curso y no deben tomarse como definitivas.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 1&amp;#039;&amp;#039;&amp;#039;: Programación funcional en Isabelle/HOL. ([[R1 |Enunciado]] y [[Relación 1 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 2&amp;#039;&amp;#039;&amp;#039;: Razonamiento automático sobre programas en Isabelle/HOL. ([[R2 |Enunciado]] y [[Relación 2 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 3&amp;#039;&amp;#039;&amp;#039;: Razonamiento estructurado sobre programas en Isabelle/HOL. ([[R3 |Enunciado]] y [[Relación 3 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 4&amp;#039;&amp;#039;&amp;#039;: Cons inverso. ([[R4 |Enunciado]] y [[Relación 4 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 5&amp;#039;&amp;#039;&amp;#039;: Cuantificadores sobre listas. ([[R5 |Enunciado]] y [[Relación 5 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 6&amp;#039;&amp;#039;&amp;#039;: Sustitución, inversión y eliminación. ([[R6 |Enunciado]] y [[Relación 6 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 7&amp;#039;&amp;#039;&amp;#039;: Recorridos de árboles. ([[R7 |Enunciado]] y [[Relación 7 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 8&amp;#039;&amp;#039;&amp;#039;: Árboles binarios completos. ([[R8 |Enunciado]] y [[Relación 8 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 9&amp;#039;&amp;#039;&amp;#039;: Deducción natural en Isabelle/HOL. ([[R9 |Enunciado]] y [[Relación 9 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 10&amp;#039;&amp;#039;&amp;#039;: Formalización y argumentación en Isabelle/HOL. ([[R10 |Enunciado]] y [[Relación 10 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 11&amp;#039;&amp;#039;&amp;#039;: Plegados de listas y de árboles. ([[R11 |Enunciado]] y [[Relación 11 | Solución colaborativa]]).&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_9:_Conjuntos,_funciones_y_relaciones&amp;diff=251</id>
		<title>Tema 9: Conjuntos, funciones y relaciones</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_9:_Conjuntos,_funciones_y_relaciones&amp;diff=251"/>
		<updated>2015-01-06T12:42:20Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* Tema 9: Conjuntos, funciones y relaciones *}&lt;br /&gt;
&lt;br /&gt;
theory T9&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Conjuntos *}&lt;br /&gt;
&lt;br /&gt;
subsection {* Operaciones con conjuntos *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota. La teoría elemental de conjuntos es HOL/Set.thy.&lt;br /&gt;
&lt;br /&gt;
  Nota. En un conjunto todos los elemento son del mismo tipo (por&lt;br /&gt;
  ejemplo, del tipo τ) y el conjunto tiene tipo (en el ejemplo, &amp;quot;τ set&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
  Reglas de la intersección:&lt;br /&gt;
  · IntI:  ⟦c ∈ A; c ∈ B⟧ ⟹ c ∈ A ∩ B&lt;br /&gt;
  · IntD1: c ∈ A ∩ B ⟹ c ∈ A&lt;br /&gt;
  · IntD2: c ∈ A ∩ B ⟹ c ∈ B&lt;br /&gt;
&lt;br /&gt;
  Nota. Propiedades del complementario:&lt;br /&gt;
  · Compl_iff: (c ∈ - A) = (c ∉ A)&lt;br /&gt;
  · Compl_Un:  - (A ∪ B) = - A ∩ - B&lt;br /&gt;
&lt;br /&gt;
  Nota. El conjunto vacío se representa por {} y el universal por UNIV. &lt;br /&gt;
&lt;br /&gt;
  Nota. Propiedades de la diferencia y del complementario:&lt;br /&gt;
  · Diff_disjoint:   A ∩ (B - A) = {}&lt;br /&gt;
  · Compl_partition: A ∪ - A = UNIV&lt;br /&gt;
&lt;br /&gt;
  Nota. Reglas de la relación de subconjunto:&lt;br /&gt;
  · subsetI: (⋀x. x ∈ A ⟹ x ∈ B) ⟹ A ⊆ B&lt;br /&gt;
  · subsetD: ⟦A ⊆ B; c ∈ A⟧ ⟹ c ∈ B   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo: A ∪ B ⊆ C syss A ⊆ C ∧ B ⊆ C.   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(A ∪ B ⊆ C) = (A ⊆ C ∧ B ⊆ C)&amp;quot;&lt;br /&gt;
by blast&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo: A ⊆ -B syss B ⊆ -A.   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(A ⊆ -B) = (B ⊆ -A)&amp;quot;&lt;br /&gt;
by blast&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Principio de extensionalidad de conjuntos:&lt;br /&gt;
  · set_eqI: (⋀x. (x ∈ A) = (x ∈ B)) ⟹ A = B&lt;br /&gt;
&lt;br /&gt;
  Reglas de la igualdad de conjuntos:&lt;br /&gt;
  · equalityI:  ⟦A ⊆ B; B ⊆ A⟧ ⟹ A = B&lt;br /&gt;
  · equalityD1: A = B ⟹ A ⊆ B&lt;br /&gt;
  · equalityD2: A = B ⟹ B ⊆ A &lt;br /&gt;
  · equalityE:  ⟦A = B; ⟦A ⊆ B; B ⊆ A⟧ ⟹ P⟧ ⟹ P   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lema. [Analogía entre intersección y conjunción]&lt;br /&gt;
  &amp;quot;x ∈ A ∩ B&amp;quot; syss &amp;quot;x ∈ A&amp;quot; y &amp;quot;x ∈ B&amp;quot;. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(x ∈ A ∩ B) = (x ∈ A ∧ x ∈ B)&amp;quot; &lt;br /&gt;
by simp&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lema. [Analogía entre unión y disyunción]&lt;br /&gt;
  x ∈ A ∪ B syss x ∈ A ó x ∈ B.   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(x ∈ A ∪ B) = (x ∈ A ∨ x ∈ B)&amp;quot; &lt;br /&gt;
by simp&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lema. [Analogía entre subconjunto e implicación]&lt;br /&gt;
  A ⊆ B syss para todo x, si x ∈ A entonces x ∈ B.   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(A ⊆ B) = (∀ x. x ∈ A ⟶ x ∈ B)&amp;quot; &lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lema. [Analogía entre complementario y negación]&lt;br /&gt;
  x pertenece al complementario de A syss x no pertenece a A.   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(x ∈ -A) = (x ∉ A)&amp;quot; &lt;br /&gt;
by simp&lt;br /&gt;
&lt;br /&gt;
subsection {* Notación de conjuntos finitos *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota. La teoría de conjuntos finitos es HOL/Finite_Set.thy.&lt;br /&gt;
&lt;br /&gt;
  Nota. Los conjuntos finitos se definen por inducción a partir de las&lt;br /&gt;
  siguientes reglas inductivas:&lt;br /&gt;
  · El conjunto vacío es un conjunto finito.&lt;br /&gt;
    · emptyI: &amp;quot;finite {}&amp;quot;&lt;br /&gt;
  · Si se le añade un elemento a un conjunto finito se obtiene otro&lt;br /&gt;
    conjunto finito. &lt;br /&gt;
    · insertI: &amp;quot;finite A ⟹ finite (insert a A)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
  A continuación se muestran ejemplos de conjuntos finitos.   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;insert 2 {} = {2} ∧&lt;br /&gt;
   insert 3 {2} = {2,3} ∧&lt;br /&gt;
   insert 2 {2,3} = {2,3} ∧&lt;br /&gt;
   {2,3} = {3,2,3,2,2}&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota. Los conjuntos finitos se representan con la notación conjuntista&lt;br /&gt;
  habitual: los elementos entre llaves y separados por comas. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo: {a,b} ∪ {c,d} = {a,b,c,d}   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;{a,b} ∪ {c,d} = {a,b,c,d}&amp;quot; &lt;br /&gt;
by blast&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de conjetura falsa y su refutación. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;{a,b} ∩ {b,c} = {b}&amp;quot; &lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo con la conjetura corregida.   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;{a,b} ∩ {b,c} = (if a=c then {a,b} else {b})&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Sumas de conjuntos finitos:&lt;br /&gt;
  · ∑A es la suma de los elementos del conjunto finito A. Por ejemplo, &lt;br /&gt;
      value &amp;quot;∑{1,2,3}::int&amp;quot; -- &amp;quot;= 6&amp;quot;&lt;br /&gt;
  · (setsum f A) es la suma de la aplicación de f a los elementos del&lt;br /&gt;
    conjunto finito A,  Por ejemplo,&lt;br /&gt;
       value &amp;quot;setsum (λx. x*x) {1,2,3}::int&amp;quot; -- &amp;quot;= 14&amp;quot;&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplos de definiciones recursivas sobre conjuntos finitos: &lt;br /&gt;
  Sea A un conjunto finito de números naturales.&lt;br /&gt;
  · sumaConj A es la suma de los elementos A.&lt;br /&gt;
  · sumaCuadradosConj A es la suma de los cuadrados de los elementos A. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
definition sumaConj :: &amp;quot;nat set ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaConj S ≡ ∑S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaConj {2,5,3}&amp;quot; -- &amp;quot;= 10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
definition sumaCuadradosConj :: &amp;quot;nat set ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaCuadradosConj S ≡ setsum (λx. x*x) S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaCuadradosConj {2,5,3}&amp;quot; -- &amp;quot;= 38&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota. Para simplificar lo que sigue, declaramos las anteriores&lt;br /&gt;
  definiciones como reglas de simplificación.   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
declare sumaConj_def[simp]&lt;br /&gt;
declare sumaCuadradosConj_def[simp]&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplos de evaluación de las anteriores definiciones recursivas.   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sumaConj {1,2,3,4} = 10 ∧&lt;br /&gt;
   sumaCuadradosConj {1,2,3,4} = 30&amp;quot;&lt;br /&gt;
by simp&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Inducción sobre conjuntos finitos: Para demostrar que todos los&lt;br /&gt;
  conjuntos finitos tienen una propiedad P basta probar que&lt;br /&gt;
  · El conjunto vacío tiene la propiedad P.&lt;br /&gt;
  · Si a un conjunto finito que tiene la propiedad P se le añade un&lt;br /&gt;
    nuevo elemento, el conjunto obtenido sigue teniendo la propiedad P. &lt;br /&gt;
  En forma de regla&lt;br /&gt;
  · finite_induct: ⟦finite F; &lt;br /&gt;
                    P {}; &lt;br /&gt;
                    ⋀x F. ⟦finite F; x ∉ F; P F⟧ ⟹ P ({x} ∪ F)⟧ &lt;br /&gt;
                   ⟹ P F   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo de inducción sobre conjuntos finitos: Sea S un conjunto finito&lt;br /&gt;
  de números naturales. Entonces todos los elementos de S son menores o&lt;br /&gt;
  iguales que la suma de los elementos de S. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;finite S ⟹ ∀x∈S. x ≤ sumaConj S&amp;quot;&lt;br /&gt;
by (induct rule: finite_induct) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma sumaConj_acota: &lt;br /&gt;
  &amp;quot;finite S ⟹ ∀x∈S. x ≤ sumaConj S&amp;quot;&lt;br /&gt;
proof (induct rule: finite_induct)&lt;br /&gt;
  show &amp;quot;∀x ∈ {}. x ≤ sumaConj {}&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x and F&lt;br /&gt;
  assume fF: &amp;quot;finite F&amp;quot; &lt;br /&gt;
     and xF: &amp;quot;x ∉ F&amp;quot; &lt;br /&gt;
     and HI: &amp;quot;∀ x∈F. x ≤ sumaConj F&amp;quot;&lt;br /&gt;
  show &amp;quot;∀y ∈ insert x F. y ≤ sumaConj (insert x F)&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    fix y &lt;br /&gt;
    assume &amp;quot;y ∈ insert x F&amp;quot;&lt;br /&gt;
    show &amp;quot;y ≤ sumaConj (insert x F)&amp;quot;&lt;br /&gt;
    proof (cases &amp;quot;y = x&amp;quot;)&lt;br /&gt;
      assume &amp;quot;y = x&amp;quot;&lt;br /&gt;
      hence &amp;quot;y ≤ x + (sumaConj F)&amp;quot; by simp&lt;br /&gt;
      also have &amp;quot;… = sumaConj (insert x F)&amp;quot; using fF xF by simp&lt;br /&gt;
      finally show ?thesis .&lt;br /&gt;
    next&lt;br /&gt;
      assume &amp;quot;y ≠ x&amp;quot;&lt;br /&gt;
      hence &amp;quot;y ∈ F&amp;quot; using `y ∈ insert x F` by simp&lt;br /&gt;
      hence &amp;quot;y ≤ sumaConj F&amp;quot; using HI by blast&lt;br /&gt;
      also have &amp;quot;… ≤ x + (sumaConj F)&amp;quot; by simp&lt;br /&gt;
      also have &amp;quot;… = sumaConj (insert x F)&amp;quot; using fF xF by simp&lt;br /&gt;
      finally show ?thesis .&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
subsection {* Definiciones por comprensión *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El conjunto de los elementos que cumple la propiedad P se representa&lt;br /&gt;
  por {x. P}. &lt;br /&gt;
&lt;br /&gt;
  Reglas de comprensión (relación entre colección y pertenencia):&lt;br /&gt;
  · mem_Collect_eq: (a ∈ {x. P x}) = P a&lt;br /&gt;
  · Collect_mem_eq: {x. x ∈ A} = A   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de comprensión: {x. P x ∨ x ∈ A} = {x. P x} ∪ A   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;{x. P x ∨ x ∈ A} = {x. P x} ∪ A&amp;quot;&lt;br /&gt;
by blast&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de comprensión: {x. P x ⟶ Q x} = -{x. P x} ∪ {x. Q x}   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;{x. P x ⟶ Q x} = -{x. P x} ∪ {x. Q x}&amp;quot;&lt;br /&gt;
by blast&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo con la sintaxis general de comprensión.   &lt;br /&gt;
     {p*q | p q. p ∈ prime ∧ q ∈ prime} = &lt;br /&gt;
     {z. ∃p q. z = p*q ∧ p ∈ prime ∧ q ∈ prime}   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;{p*q | p q. p ∈ prime ∧ q ∈ prime} = &lt;br /&gt;
   {z. ∃p q. z = p*q ∧ p ∈ prime ∧ q ∈ prime}&amp;quot;&lt;br /&gt;
by blast&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
   En HOL, la notación conjuntista es azúcar sintáctica:&lt;br /&gt;
   · x ∈ A  es equivalente a A(x).&lt;br /&gt;
   · {x. P} es equivalente a λx. P.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de definición por comprensión: El conjunto de los pares es el&lt;br /&gt;
  de los números n para los que existe un m tal que n = 2*m.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
definition Pares :: &amp;quot;nat set&amp;quot; where&lt;br /&gt;
  &amp;quot;Pares ≡ {n. ∃m. n = 2*m }&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo. Los números 2 y 34 son pares.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;2 ∈ Pares ∧&lt;br /&gt;
   34 ∈ Pares&amp;quot; &lt;br /&gt;
by (simp add: Pares_def)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Definición. El conjunto de los impares es el de los números n para los&lt;br /&gt;
  que existe un m tal que n = 2*m + 1.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
definition Impares :: &amp;quot;nat set&amp;quot; where&lt;br /&gt;
  &amp;quot;Impares ≡ {n. ∃m. n = 2*m + 1}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo con las reglas de intersección y comprensión: El conjunto de&lt;br /&gt;
  los pares es disjunto con el de los impares. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;x ∉ (Pares ∩ Impares)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  fix x assume S: &amp;quot;x ∈ (Pares ∩ Impares)&amp;quot;&lt;br /&gt;
  hence &amp;quot;x ∈ Pares&amp;quot; by (rule IntD1)&lt;br /&gt;
  hence &amp;quot;∃m. x = 2 * m&amp;quot; by (simp only: Pares_def mem_Collect_eq)&lt;br /&gt;
  then obtain p where p: &amp;quot;x = 2 * p&amp;quot; .. &lt;br /&gt;
  from S have &amp;quot;x ∈ Impares&amp;quot; by (rule IntD2)&lt;br /&gt;
  hence &amp;quot;∃ m. x = 2 * m + 1&amp;quot; by (simp only: Impares_def mem_Collect_eq)&lt;br /&gt;
  then obtain q where q: &amp;quot;x = 2 * q + 1&amp;quot; .. &lt;br /&gt;
  from p and q show &amp;quot;False&amp;quot; by arith&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;x ∉ (Pares ∩ Impares)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  fix x assume S: &amp;quot;x ∈ (Pares ∩ Impares)&amp;quot;&lt;br /&gt;
  hence &amp;quot;x ∈ Pares&amp;quot; ..&lt;br /&gt;
  hence &amp;quot;∃m. x = 2 * m&amp;quot; by (simp only: Pares_def mem_Collect_eq)&lt;br /&gt;
  then obtain p where p: &amp;quot;x = 2 * p&amp;quot; .. &lt;br /&gt;
  from S have &amp;quot;x ∈ Impares&amp;quot; ..&lt;br /&gt;
  hence &amp;quot;∃ m. x = 2 * m + 1&amp;quot; by (simp only: Impares_def mem_Collect_eq)&lt;br /&gt;
  then obtain q where q: &amp;quot;x = 2 * q + 1&amp;quot; .. &lt;br /&gt;
  from p and q show &amp;quot;False&amp;quot; by arith&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;x ∉ (Pares ∩ Impares)&amp;quot;&lt;br /&gt;
by (auto simp add: Pares_def Impares_def, arith)&lt;br /&gt;
&lt;br /&gt;
subsection {* Cuantificadores acotados *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Reglas de cuantificador universal acotado (&amp;quot;bounded&amp;quot;):&lt;br /&gt;
  · ballI: (⋀x. x ∈ A ⟹ P x) ⟹ ∀x∈A. P x&lt;br /&gt;
  · bspec: ⟦∀x∈A. P x; x ∈ A⟧ ⟹ P x&lt;br /&gt;
&lt;br /&gt;
  Reglas de cuantificador existencial acotado (&amp;quot;bounded&amp;quot;):&lt;br /&gt;
  · bexI: ⟦P x; x ∈ A⟧ ⟹ ∃x∈A. P x&lt;br /&gt;
  · bexE: ⟦∃x∈A. P x; ⋀x. ⟦x ∈ A; P x⟧ ⟹ Q⟧ ⟹ Q&lt;br /&gt;
&lt;br /&gt;
  Reglas de la unión indexada:&lt;br /&gt;
  · UN_iff: (b ∈ (⋃x∈A. B x)) = (∃x∈A. b ∈ B x)&lt;br /&gt;
  · UN_I:   ⟦a ∈ A; b ∈ B a⟧ ⟹ b ∈ (⋃x∈A. B x)&lt;br /&gt;
  · UN_E:   ⟦b ∈ (⋃x∈A. B x); ⋀x. ⟦x ∈ A; b ∈ B x⟧ ⟹ R⟧ ⟹ R&lt;br /&gt;
&lt;br /&gt;
  Reglas de la unión de una familia:&lt;br /&gt;
  · Union_def: ⋃S = (⋃x∈S. x)&lt;br /&gt;
  · Union_iff: (A ∈ ⋃C) = (∃X∈C. A ∈ X)&lt;br /&gt;
&lt;br /&gt;
  Reglas de la intersección indexada:&lt;br /&gt;
  · INT_iff: (b ∈ (⋂x∈A. B x)) = (∀x∈A. b ∈ B x)&lt;br /&gt;
  · INT_I:   (⋀x. x ∈ A ⟹ b ∈ B x) ⟹ b ∈ (⋂x∈A. B x)&lt;br /&gt;
  · INT_E:   ⟦b ∈ (⋂x∈A. B x); b ∈ B a ⟹ R; a ∉ A ⟹ R⟧ ⟹ R&lt;br /&gt;
&lt;br /&gt;
  Reglas de la intersección de una familia:&lt;br /&gt;
  · Inter_def: ⋂S = (⋂x∈S. x)&lt;br /&gt;
  · Inter_iff: (A ∈ ⋂C) = (∀X∈C. A ∈ X)&lt;br /&gt;
&lt;br /&gt;
  Abreviaturas:&lt;br /&gt;
  · &amp;quot;Collect P&amp;quot; es lo mismo que &amp;quot;{x. P}&amp;quot;.&lt;br /&gt;
  · &amp;quot;All P&amp;quot;     es lo mismo que &amp;quot;∀x. P x&amp;quot;.&lt;br /&gt;
  · &amp;quot;Ex P&amp;quot;      es lo mismo que &amp;quot;∃x. P x&amp;quot;.&lt;br /&gt;
  · &amp;quot;Ball A P&amp;quot;  es lo mismo que &amp;quot;∀x∈A. P x&amp;quot;.&lt;br /&gt;
  · &amp;quot;Bex A P&amp;quot;   es lo mismo que &amp;quot;∃x∈A. P x&amp;quot;.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Conjuntos finitos y cardinalidad *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El número de elementos de un conjunto finito A es el cardinal de A y&lt;br /&gt;
  se representa por &amp;quot;card A&amp;quot;.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplos de cardinales de conjuntos finitos.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;card {} = 0 ∧&lt;br /&gt;
   card {4} = 1 ∧&lt;br /&gt;
   card {4,1} = 2 ∧&lt;br /&gt;
   x ≠ y ⟹ card {x,y} = 2&amp;quot; &lt;br /&gt;
by simp&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Propiedades de cardinales:&lt;br /&gt;
  · Cardinal de la unión de conjuntos finitos:&lt;br /&gt;
    card_Un_Int: ⟦finite A; finite B⟧ &lt;br /&gt;
                 ⟹ card A + card B = card (A ∪ B) + card (A ∩ B)&amp;quot; &lt;br /&gt;
  · Cardinal del conjunto potencia: &lt;br /&gt;
    card_Pow: finite A ⟹ card (Pow A) = 2 ^ card A&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
section {* Funciones *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  La teoría de funciones es HOL/Fun.thy. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Nociones básicas de funciones *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Principio de extensionalidad para funciones:&lt;br /&gt;
  · ext: (⋀x. f x = g x) ⟹ f = g&lt;br /&gt;
&lt;br /&gt;
  Actualización de funciones  &lt;br /&gt;
  · fun_upd_apply: (f(x := y)) z = (if z = x then y else f z)&lt;br /&gt;
  · fun_upd_upd:   f(x := y, x := z) = f(x := z)&lt;br /&gt;
&lt;br /&gt;
  Función identidad&lt;br /&gt;
  · id_def: id ≡ λx. x&lt;br /&gt;
&lt;br /&gt;
  Composición de funciones:&lt;br /&gt;
  · o_def: f ∘ g = (λx. f (g x))&lt;br /&gt;
&lt;br /&gt;
  Asociatividad de la composición:&lt;br /&gt;
  · o_assoc: f ∘ (g ∘ h) = (f ∘ g) ∘ h&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Funciones inyectivas, suprayectivas y biyectivas *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Función inyectiva sobre A:&lt;br /&gt;
  · inj_on_def: inj_on f A ≡ ∀x∈A. ∀y∈A. f x = f y ⟶ x = y&lt;br /&gt;
&lt;br /&gt;
  Nota. &amp;quot;inj f&amp;quot; es una abreviatura de &amp;quot;inj_on f UNIV&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
  Función suprayectiva:&lt;br /&gt;
  · surj_def: surj f ≡ ∀y. ∃x. y = f x&lt;br /&gt;
&lt;br /&gt;
  Función biyectiva:&lt;br /&gt;
  · bij_def: bij f ≡ inj f ∧ surj f&lt;br /&gt;
&lt;br /&gt;
  Propiedades de las funciones inversas:&lt;br /&gt;
  · inv_f_f:      inj f  ⟹ inv f (f x) = x&lt;br /&gt;
  · surj_f_inv_f: surj f ⟹ f (inv f y) = y&lt;br /&gt;
  · inv_inv_eq:   bij f  ⟹ inv (inv f) = f&lt;br /&gt;
&lt;br /&gt;
  Igualdad de funciones (por extensionalidad):&lt;br /&gt;
  · fun_eq_iff: (f = g) = (∀x. f x = g x)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de lema de demostración de propiedades de funciones: Una&lt;br /&gt;
  función inyectiva puede cancelarse en el lado izquierdo de la&lt;br /&gt;
  composición de funciones. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  assumes &amp;quot;inj f&amp;quot;&lt;br /&gt;
  shows &amp;quot;(f ∘ g = f ∘ h) = (g = h)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;f ∘ g = f ∘ h&amp;quot;&lt;br /&gt;
  show &amp;quot;g = h&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    fix x&lt;br /&gt;
    have &amp;quot;(f ∘ g)(x) = (f ∘ h)(x)&amp;quot; using `f ∘ g = f ∘ h` by simp&lt;br /&gt;
    hence &amp;quot;f(g(x)) = f(h(x))&amp;quot; by simp&lt;br /&gt;
    thus &amp;quot;g(x) = h(x)&amp;quot; using `inj f` by (simp add:inj_on_def)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;g = h&amp;quot;&lt;br /&gt;
  show &amp;quot;f ∘ g = f ∘ h&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    fix x&lt;br /&gt;
    have &amp;quot;(f ∘ g) x = f(g(x))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = f(h(x))&amp;quot; using `g = h` by simp&lt;br /&gt;
    also have &amp;quot;… = (f ∘ h) x&amp;quot; by simp&lt;br /&gt;
    finally show &amp;quot;(f ∘ g) x = (f ∘ h) x&amp;quot; by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  assumes &amp;quot;inj f&amp;quot;&lt;br /&gt;
  shows &amp;quot;(f ∘ g = f ∘ h) = (g = h)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;f ∘ g = f ∘ h&amp;quot; &lt;br /&gt;
  thus &amp;quot;g = h&amp;quot; using `inj f` by (simp add: inj_on_def fun_eq_iff) &lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;g = h&amp;quot; &lt;br /&gt;
  thus &amp;quot;f ∘ g = f ∘ h&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  assumes &amp;quot;inj f&amp;quot;&lt;br /&gt;
  shows &amp;quot;(f ∘ g = f ∘ h) = (g = h)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by (auto simp add: inj_on_def fun_eq_iff) &lt;br /&gt;
&lt;br /&gt;
subsubsection {* Función imagen *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Imagen de un conjunto mediante una función:&lt;br /&gt;
  · image_def: f ` A = {y. (∃x∈A. y = f x)}&lt;br /&gt;
&lt;br /&gt;
  Propiedades de la imagen:&lt;br /&gt;
  · image_compose: (f ∘ g)`r = f`g`r&lt;br /&gt;
  · image_Un:      f`(A ∪ B) = f`A ∪ f`B &lt;br /&gt;
  · image_Int:     inj f ⟹ f`(A ∩ B) = f`A ∩ f`B&amp;quot; &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de demostración de propiedades de la imagen:&lt;br /&gt;
     f`A ∪ g`A = (⋃x∈A. {f x, g x})&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;f`A ∪ g`A = (⋃x∈A. {f x, g x})&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de demostración de propiedades de la imagen:&lt;br /&gt;
     f`{(x,y). P x y} = {f(x,y) | x y. P x y}&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;f`{(x,y). P x y} = {f(x,y) | x y. P x y}&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El rango de una función (&amp;quot;range f&amp;quot;) es la imagen del universo &lt;br /&gt;
  (&amp;quot;f`UNIV&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
  Imagen inversa de un conjunto:&lt;br /&gt;
  · vimage_def: f -` B ≡ {x. f x ∈ B}&lt;br /&gt;
&lt;br /&gt;
  Propiedad de la imagen inversa de un conjunto:&lt;br /&gt;
  · vimage_Compl: f -` (-A) = -(f -` A)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
section {* Relaciones *}&lt;br /&gt;
&lt;br /&gt;
subsection {* Relaciones básicas *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La teoría de relaciones es HOL/Relation.thy.&lt;br /&gt;
&lt;br /&gt;
  Las relaciones son conjuntos de pares.&lt;br /&gt;
&lt;br /&gt;
  Relación identidad:&lt;br /&gt;
  · Id_def: Id ≡ {p. ∃x. p = (x,x)}&lt;br /&gt;
&lt;br /&gt;
  Composición de relaciones:&lt;br /&gt;
  · rel_comp_def: r O s ≡ {(x,z). ∃y. (x, y) ∈ r ∧ (y, z) ∈ s}&lt;br /&gt;
&lt;br /&gt;
  Propiedades:&lt;br /&gt;
  · R_O_Id:        R O Id = R&lt;br /&gt;
  · rel_comp_mono: ⟦r&amp;#039; ⊆ r; s&amp;#039; ⊆ s⟧ ⟹ (r&amp;#039; O s&amp;#039;) ⊆ (r O s)&lt;br /&gt;
&lt;br /&gt;
  Imagen inversa de una relación:&lt;br /&gt;
  · converse_iff: ((a,b) ∈ r^-1) = ((b,a) ∈ r)&lt;br /&gt;
&lt;br /&gt;
  Propiedad de la imagen inversa de una relación:&lt;br /&gt;
  · converse_rel_comp: (r O s)^-1 = s^-1 O r^-1&lt;br /&gt;
&lt;br /&gt;
  Imagen de un conjunto mediante una relación:&lt;br /&gt;
  · Image_iff: (b ∈ r``A) = (∃x:A. (x, b) ∈ r)&lt;br /&gt;
&lt;br /&gt;
  Dominio de una relación:&lt;br /&gt;
  · Domain_iff: (a ∈ Domain r) = (∃y. (a, y) ∈ r)&lt;br /&gt;
&lt;br /&gt;
  Rango de una relación:&lt;br /&gt;
  · Range_iff: (a ∈ Range r) = (∃y. (y,a) ∈ r)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Clausura reflexiva y transitiva *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La teoría de la clausura reflexiva y transitiva de una relación es&lt;br /&gt;
  HOL/Transitive_Closure.thy.&lt;br /&gt;
&lt;br /&gt;
  Potencias de relaciones:&lt;br /&gt;
  · R ^^ 0 = Id&lt;br /&gt;
  · R ^^ (Suc n) = (R ^^ n) O R&lt;br /&gt;
  &lt;br /&gt;
  La clausura reflexiva y transitiva de la relación r es la menor&lt;br /&gt;
  solución de la ecuación: &lt;br /&gt;
  · rtrancl_unfold: r⇧* = Id ∪ (r⇧* O r)&lt;br /&gt;
  &lt;br /&gt;
  Propiedades básicas de la clausura reflexiva y transitiva:&lt;br /&gt;
  · rtrancl_refl:   (a,a) ∈ r⇧*&lt;br /&gt;
  · r_into_rtrancl: p ∈ r ⟹ p ∈ r⇧*&lt;br /&gt;
  · rtrancl_trans:  ⟦(a,b) ∈ r⇧*; (b,c) ∈ r⇧*⟧ ⟹ (a,c) ∈ r⇧*&lt;br /&gt;
  &lt;br /&gt;
  Inducción sobre la clausura reflexiva y transitiva&lt;br /&gt;
  · rtrancl_induct: ⟦(a,b) ∈ r⇧*; &lt;br /&gt;
                     P b; &lt;br /&gt;
                     ⋀y z. ⟦(y,z) ∈ r; (z,b) ∈ r⇧*; P z⟧ ⟹ P y⟧&lt;br /&gt;
                    ⟹ P a&lt;br /&gt;
  &lt;br /&gt;
  Idempotencia de la clausura reflexiva y transitiva:&lt;br /&gt;
  · rtrancl_idemp: (r⇧* )⇧* = r⇧*&lt;br /&gt;
  &lt;br /&gt;
  Reglas de introducción de la clausura transitiva:&lt;br /&gt;
  · r_into_trancl&amp;#039;: p ∈ r ⟹ p ∈ r⇧+&lt;br /&gt;
  · trancl_trans:   ⟦(a,b) ∈ r⇧+; (b,c) ∈ r⇧+⟧ ⟹ (a,c) ∈ r⇧+&lt;br /&gt;
&lt;br /&gt;
  Ejemplo de propiedad:&lt;br /&gt;
  · trancl_converse: (r¯)⇧+ = (r⇧+)¯&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Una demostración elemental *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se desea demostrar que la clausura reflexiva y transitiva conmuta con&lt;br /&gt;
  la inversa (cl_rtrans_inversa). &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;(r¯)⇧* = (r⇧*)¯&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* Para demostrarlo introducimos dos lemas auxiliares: &lt;br /&gt;
  cl_rtrans_inversaD y cl_rtrans_inversaI.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada del primer lema es&amp;quot;&lt;br /&gt;
lemma cl_rtrans_inversaD: &lt;br /&gt;
  &amp;quot;(x,y) ∈ (r¯)⇧* ⟹ (y,x) ∈ r⇧*&amp;quot;&lt;br /&gt;
proof (induct rule:rtrancl_induct)&lt;br /&gt;
  show &amp;quot;(x,x) ∈ r⇧*&amp;quot; by (rule rtrancl_refl) &lt;br /&gt;
next&lt;br /&gt;
  fix y z&lt;br /&gt;
  assume &amp;quot;(x,y) ∈ (r¯)⇧*&amp;quot; and &amp;quot;(y,z) ∈ r¯&amp;quot; and &amp;quot;(y,x) ∈ r⇧*&amp;quot;&lt;br /&gt;
  show &amp;quot;(z,x) ∈ r⇧*&amp;quot;&lt;br /&gt;
  proof (rule rtrancl_trans)&lt;br /&gt;
    show &amp;quot;(z,y) ∈ r⇧*&amp;quot; using `(y,z) ∈ r¯` by simp&lt;br /&gt;
  next&lt;br /&gt;
    show &amp;quot;(y,x) ∈ r⇧*&amp;quot; using `(y,x) ∈ r⇧*` by simp&lt;br /&gt;
  qed   &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del primer lema es&amp;quot;&lt;br /&gt;
lemma  cl_rtrans_inversaD2: &lt;br /&gt;
  &amp;quot;(x,y) ∈ (r¯)⇧* ⟹ (y,x) ∈ r⇧*&amp;quot;&lt;br /&gt;
by (induct rule: rtrancl_induct) &lt;br /&gt;
   (auto simp add: rtrancl_trans)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada del segundo lema es&amp;quot;&lt;br /&gt;
lemma cl_rtrans_inversaI: &lt;br /&gt;
  &amp;quot;(y,x) ∈ r⇧* ⟹ (x,y) ∈ (r¯)⇧*&amp;quot;&lt;br /&gt;
proof (induct rule: rtrancl_induct)&lt;br /&gt;
  show &amp;quot;(y,y) ∈ (r¯)⇧*&amp;quot; by (rule rtrancl_refl) &lt;br /&gt;
next&lt;br /&gt;
  fix u z&lt;br /&gt;
  assume &amp;quot;(y,u) ∈ r⇧*&amp;quot; and &amp;quot;(u,z) ∈ r&amp;quot; and &amp;quot;(u,y) ∈ (r¯)⇧*&amp;quot;&lt;br /&gt;
  show &amp;quot;(z,y) ∈ (r¯)⇧*&amp;quot;&lt;br /&gt;
  proof (rule rtrancl_trans)&lt;br /&gt;
    show &amp;quot;(z,u) ∈ (r¯)⇧*&amp;quot; using `(u,z) ∈ r` by auto&lt;br /&gt;
  next&lt;br /&gt;
    show &amp;quot;(u,y) ∈ (r¯)⇧*&amp;quot; using `(u,y) ∈ (r¯)⇧*` by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detalla del teorema es&amp;quot;&lt;br /&gt;
theorem cl_rtrans_inversa: &lt;br /&gt;
  &amp;quot;(r¯)⇧* = (r⇧*)¯&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;(r¯)⇧* ⊆ (r⇧*)¯&amp;quot; by (auto simp add:cl_rtrans_inversaD)&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;(r⇧*)¯ ⊆ (r¯)⇧*&amp;quot; by (auto simp add:cl_rtrans_inversaI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del teorema es&amp;quot;&lt;br /&gt;
theorem &amp;quot;(r¯)⇧* = (r⇧*)¯&amp;quot;&lt;br /&gt;
by (auto intro: cl_rtrans_inversaI dest: cl_rtrans_inversaD)&lt;br /&gt;
&lt;br /&gt;
section {* Relaciones bien fundamentadas e inducción *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La teoría de las relaciones bien fundamentadas es &lt;br /&gt;
  HOL/Wellfounded_Relations.thy.&lt;br /&gt;
&lt;br /&gt;
  La relación-objeto &amp;quot;less_than&amp;quot; es el orden de los naturales definido &lt;br /&gt;
  por&lt;br /&gt;
  · less_than = pred_nat^+&lt;br /&gt;
  donde pred_nat está definida por &lt;br /&gt;
  · pred_nat = {(m, n). n = Suc m}&lt;br /&gt;
&lt;br /&gt;
  La caracterización de less_than es&lt;br /&gt;
  · less_than_iff: ((x,y) ∈ less_than) = (x &amp;lt; y)&lt;br /&gt;
&lt;br /&gt;
  La relación less_than está bien fundamentada&lt;br /&gt;
  · wf_less_than:  wf less_than&lt;br /&gt;
&lt;br /&gt;
  Notas sobre medidas:&lt;br /&gt;
  · Imagen inversa de una relación mediante una función:&lt;br /&gt;
    · inv_image_def: inv_image r f ≡ {(x,y). (f x,f y) ∈ r}&lt;br /&gt;
  · Conservación de la buena fundamentación:&lt;br /&gt;
    · wf_inv_image: wf r ⟹ wf (inv_image r f)&lt;br /&gt;
  · Definición de la medida:&lt;br /&gt;
    · measure_def: measure ≡ inv_image less_than&lt;br /&gt;
  · Buena fundamentación de la medida:&lt;br /&gt;
    · wf_measure: wf (measure f)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Notas sobre el producto lexicográfico:&lt;br /&gt;
  · Definición del producto lexicográfico (lex_prod_def):&lt;br /&gt;
    ra &amp;lt;*lex*&amp;gt; rb ≡ {((a,b),(a&amp;#039;,b&amp;#039;)). &lt;br /&gt;
                      (a,a&amp;#039;) ∈ ra ∨ (a = a&amp;#039; ∧ (b,b&amp;#039;) ∈ rb)}&lt;br /&gt;
  · Conservación de la buena fundamentación:&lt;br /&gt;
    · wf_lex_prod: ⟦wf ra; wf rb⟧ ⟹ wf (ra &amp;lt;*lex*&amp;gt; rb)&lt;br /&gt;
&lt;br /&gt;
  El orden de multiconjuntos está en la teoría HOL/Library/Multiset.thy.&lt;br /&gt;
&lt;br /&gt;
  Inducción sobre relaciones bien fundamentadas:&lt;br /&gt;
  · wf_induct: ⟦wf r; ⋀x. (⋀y. (y,x) ∈ r ⟹ P y) ⟹ P x⟧ ⟹ P a&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
section {* Puntos fijos *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La teoría de los puntos fijos se aplican a las funciones monótonas.&lt;br /&gt;
&lt;br /&gt;
  Las funciones monótonas está definida (en Orderings.thy) por&lt;br /&gt;
  · mono_def: mono f ≡ ∀A B. A ≤ B ⟶ f A ≤ f B &lt;br /&gt;
&lt;br /&gt;
  Las reglas de introducción y eliminación de la monotonicidad son:&lt;br /&gt;
  . monoI: (⋀A B. A ≤ B ⟹ f A ≤ f B) ⟹ mono f&lt;br /&gt;
  · monoD: ⟦mono f ⟹ A ≤ B⟧ ⟹ f A ≤ f B&lt;br /&gt;
&lt;br /&gt;
  El menor punto fijo de un operador está definido en la teoría&lt;br /&gt;
  Inductive.thy, para los retículos completos, por&lt;br /&gt;
  · lfp_def: lfp f = Inf {u. f u ≤ u}&lt;br /&gt;
&lt;br /&gt;
  El menor punto fijo de una función monótona es un punto fijo:&lt;br /&gt;
  · lfp_unfold: mono f ⟹ lfp f = f (lfp f)&lt;br /&gt;
&lt;br /&gt;
  La regla de inducción del menor punto fijo es&lt;br /&gt;
  · lfp_induct_set: ⟦ a ∈ lfp(f);&lt;br /&gt;
                     mono(f); &lt;br /&gt;
                     ⋀x. ⟦ x ∈ f(lfp(f) ⋂ {x. P(x)}) ⟧ ⟹ P(x) ⟧&lt;br /&gt;
                    ⟹ P(a)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El mayor punto fijo de un operador está definido en la teoría&lt;br /&gt;
  Inductive.thy, para los retículos completos, por&lt;br /&gt;
  · gfp_def: gfp f = Sup {u. u ≤ f u}&lt;br /&gt;
&lt;br /&gt;
  El menor punto fijo de una función monótona es un punto fijo:&lt;br /&gt;
  · gfp_unfold: mono f ⟹ gfp f = f (gfp f)&lt;br /&gt;
&lt;br /&gt;
  La regla de inducción del menor punto fijo es&lt;br /&gt;
  · coinduct_set: ⟦ mono(f);  &lt;br /&gt;
                   a ∈ X;  &lt;br /&gt;
                   X ⊆ f(X ⋃ gfp(f)) ⟧ &lt;br /&gt;
                  ⟹ a ∈ gfp(f)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_9:_Conjuntos,_funciones_y_relaciones&amp;diff=250</id>
		<title>Tema 9: Conjuntos, funciones y relaciones</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_9:_Conjuntos,_funciones_y_relaciones&amp;diff=250"/>
		<updated>2015-01-06T12:41:38Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* Tema 9: Conjuntos, funciones y relaciones *}  theory T9_Conjuntos_funciones_y_relaciones imports Main  begin  section {* Conjuntos *}  subsection ...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* Tema 9: Conjuntos, funciones y relaciones *}&lt;br /&gt;
&lt;br /&gt;
theory T9_Conjuntos_funciones_y_relaciones&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
section {* Conjuntos *}&lt;br /&gt;
&lt;br /&gt;
subsection {* Operaciones con conjuntos *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota. La teoría elemental de conjuntos es HOL/Set.thy.&lt;br /&gt;
&lt;br /&gt;
  Nota. En un conjunto todos los elemento son del mismo tipo (por&lt;br /&gt;
  ejemplo, del tipo τ) y el conjunto tiene tipo (en el ejemplo, &amp;quot;τ set&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
  Reglas de la intersección:&lt;br /&gt;
  · IntI:  ⟦c ∈ A; c ∈ B⟧ ⟹ c ∈ A ∩ B&lt;br /&gt;
  · IntD1: c ∈ A ∩ B ⟹ c ∈ A&lt;br /&gt;
  · IntD2: c ∈ A ∩ B ⟹ c ∈ B&lt;br /&gt;
&lt;br /&gt;
  Nota. Propiedades del complementario:&lt;br /&gt;
  · Compl_iff: (c ∈ - A) = (c ∉ A)&lt;br /&gt;
  · Compl_Un:  - (A ∪ B) = - A ∩ - B&lt;br /&gt;
&lt;br /&gt;
  Nota. El conjunto vacío se representa por {} y el universal por UNIV. &lt;br /&gt;
&lt;br /&gt;
  Nota. Propiedades de la diferencia y del complementario:&lt;br /&gt;
  · Diff_disjoint:   A ∩ (B - A) = {}&lt;br /&gt;
  · Compl_partition: A ∪ - A = UNIV&lt;br /&gt;
&lt;br /&gt;
  Nota. Reglas de la relación de subconjunto:&lt;br /&gt;
  · subsetI: (⋀x. x ∈ A ⟹ x ∈ B) ⟹ A ⊆ B&lt;br /&gt;
  · subsetD: ⟦A ⊆ B; c ∈ A⟧ ⟹ c ∈ B   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo: A ∪ B ⊆ C syss A ⊆ C ∧ B ⊆ C.   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(A ∪ B ⊆ C) = (A ⊆ C ∧ B ⊆ C)&amp;quot;&lt;br /&gt;
by blast&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo: A ⊆ -B syss B ⊆ -A.   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(A ⊆ -B) = (B ⊆ -A)&amp;quot;&lt;br /&gt;
by blast&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Principio de extensionalidad de conjuntos:&lt;br /&gt;
  · set_eqI: (⋀x. (x ∈ A) = (x ∈ B)) ⟹ A = B&lt;br /&gt;
&lt;br /&gt;
  Reglas de la igualdad de conjuntos:&lt;br /&gt;
  · equalityI:  ⟦A ⊆ B; B ⊆ A⟧ ⟹ A = B&lt;br /&gt;
  · equalityD1: A = B ⟹ A ⊆ B&lt;br /&gt;
  · equalityD2: A = B ⟹ B ⊆ A &lt;br /&gt;
  · equalityE:  ⟦A = B; ⟦A ⊆ B; B ⊆ A⟧ ⟹ P⟧ ⟹ P   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lema. [Analogía entre intersección y conjunción]&lt;br /&gt;
  &amp;quot;x ∈ A ∩ B&amp;quot; syss &amp;quot;x ∈ A&amp;quot; y &amp;quot;x ∈ B&amp;quot;. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(x ∈ A ∩ B) = (x ∈ A ∧ x ∈ B)&amp;quot; &lt;br /&gt;
by simp&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lema. [Analogía entre unión y disyunción]&lt;br /&gt;
  x ∈ A ∪ B syss x ∈ A ó x ∈ B.   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(x ∈ A ∪ B) = (x ∈ A ∨ x ∈ B)&amp;quot; &lt;br /&gt;
by simp&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lema. [Analogía entre subconjunto e implicación]&lt;br /&gt;
  A ⊆ B syss para todo x, si x ∈ A entonces x ∈ B.   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(A ⊆ B) = (∀ x. x ∈ A ⟶ x ∈ B)&amp;quot; &lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Lema. [Analogía entre complementario y negación]&lt;br /&gt;
  x pertenece al complementario de A syss x no pertenece a A.   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;(x ∈ -A) = (x ∉ A)&amp;quot; &lt;br /&gt;
by simp&lt;br /&gt;
&lt;br /&gt;
subsection {* Notación de conjuntos finitos *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota. La teoría de conjuntos finitos es HOL/Finite_Set.thy.&lt;br /&gt;
&lt;br /&gt;
  Nota. Los conjuntos finitos se definen por inducción a partir de las&lt;br /&gt;
  siguientes reglas inductivas:&lt;br /&gt;
  · El conjunto vacío es un conjunto finito.&lt;br /&gt;
    · emptyI: &amp;quot;finite {}&amp;quot;&lt;br /&gt;
  · Si se le añade un elemento a un conjunto finito se obtiene otro&lt;br /&gt;
    conjunto finito. &lt;br /&gt;
    · insertI: &amp;quot;finite A ⟹ finite (insert a A)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
  A continuación se muestran ejemplos de conjuntos finitos.   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;insert 2 {} = {2} ∧&lt;br /&gt;
   insert 3 {2} = {2,3} ∧&lt;br /&gt;
   insert 2 {2,3} = {2,3} ∧&lt;br /&gt;
   {2,3} = {3,2,3,2,2}&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota. Los conjuntos finitos se representan con la notación conjuntista&lt;br /&gt;
  habitual: los elementos entre llaves y separados por comas. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo: {a,b} ∪ {c,d} = {a,b,c,d}   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;{a,b} ∪ {c,d} = {a,b,c,d}&amp;quot; &lt;br /&gt;
by blast&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de conjetura falsa y su refutación. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;{a,b} ∩ {b,c} = {b}&amp;quot; &lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo con la conjetura corregida.   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;{a,b} ∩ {b,c} = (if a=c then {a,b} else {b})&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Sumas de conjuntos finitos:&lt;br /&gt;
  · ∑A es la suma de los elementos del conjunto finito A. Por ejemplo, &lt;br /&gt;
      value &amp;quot;∑{1,2,3}::int&amp;quot; -- &amp;quot;= 6&amp;quot;&lt;br /&gt;
  · (setsum f A) es la suma de la aplicación de f a los elementos del&lt;br /&gt;
    conjunto finito A,  Por ejemplo,&lt;br /&gt;
       value &amp;quot;setsum (λx. x*x) {1,2,3}::int&amp;quot; -- &amp;quot;= 14&amp;quot;&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplos de definiciones recursivas sobre conjuntos finitos: &lt;br /&gt;
  Sea A un conjunto finito de números naturales.&lt;br /&gt;
  · sumaConj A es la suma de los elementos A.&lt;br /&gt;
  · sumaCuadradosConj A es la suma de los cuadrados de los elementos A. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
definition sumaConj :: &amp;quot;nat set ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaConj S ≡ ∑S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaConj {2,5,3}&amp;quot; -- &amp;quot;= 10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
definition sumaCuadradosConj :: &amp;quot;nat set ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaCuadradosConj S ≡ setsum (λx. x*x) S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaCuadradosConj {2,5,3}&amp;quot; -- &amp;quot;= 38&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota. Para simplificar lo que sigue, declaramos las anteriores&lt;br /&gt;
  definiciones como reglas de simplificación.   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
declare sumaConj_def[simp]&lt;br /&gt;
declare sumaCuadradosConj_def[simp]&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplos de evaluación de las anteriores definiciones recursivas.   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;sumaConj {1,2,3,4} = 10 ∧&lt;br /&gt;
   sumaCuadradosConj {1,2,3,4} = 30&amp;quot;&lt;br /&gt;
by simp&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Inducción sobre conjuntos finitos: Para demostrar que todos los&lt;br /&gt;
  conjuntos finitos tienen una propiedad P basta probar que&lt;br /&gt;
  · El conjunto vacío tiene la propiedad P.&lt;br /&gt;
  · Si a un conjunto finito que tiene la propiedad P se le añade un&lt;br /&gt;
    nuevo elemento, el conjunto obtenido sigue teniendo la propiedad P. &lt;br /&gt;
  En forma de regla&lt;br /&gt;
  · finite_induct: ⟦finite F; &lt;br /&gt;
                    P {}; &lt;br /&gt;
                    ⋀x F. ⟦finite F; x ∉ F; P F⟧ ⟹ P ({x} ∪ F)⟧ &lt;br /&gt;
                   ⟹ P F   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo de inducción sobre conjuntos finitos: Sea S un conjunto finito&lt;br /&gt;
  de números naturales. Entonces todos los elementos de S son menores o&lt;br /&gt;
  iguales que la suma de los elementos de S. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;finite S ⟹ ∀x∈S. x ≤ sumaConj S&amp;quot;&lt;br /&gt;
by (induct rule: finite_induct) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma sumaConj_acota: &lt;br /&gt;
  &amp;quot;finite S ⟹ ∀x∈S. x ≤ sumaConj S&amp;quot;&lt;br /&gt;
proof (induct rule: finite_induct)&lt;br /&gt;
  show &amp;quot;∀x ∈ {}. x ≤ sumaConj {}&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x and F&lt;br /&gt;
  assume fF: &amp;quot;finite F&amp;quot; &lt;br /&gt;
     and xF: &amp;quot;x ∉ F&amp;quot; &lt;br /&gt;
     and HI: &amp;quot;∀ x∈F. x ≤ sumaConj F&amp;quot;&lt;br /&gt;
  show &amp;quot;∀y ∈ insert x F. y ≤ sumaConj (insert x F)&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    fix y &lt;br /&gt;
    assume &amp;quot;y ∈ insert x F&amp;quot;&lt;br /&gt;
    show &amp;quot;y ≤ sumaConj (insert x F)&amp;quot;&lt;br /&gt;
    proof (cases &amp;quot;y = x&amp;quot;)&lt;br /&gt;
      assume &amp;quot;y = x&amp;quot;&lt;br /&gt;
      hence &amp;quot;y ≤ x + (sumaConj F)&amp;quot; by simp&lt;br /&gt;
      also have &amp;quot;… = sumaConj (insert x F)&amp;quot; using fF xF by simp&lt;br /&gt;
      finally show ?thesis .&lt;br /&gt;
    next&lt;br /&gt;
      assume &amp;quot;y ≠ x&amp;quot;&lt;br /&gt;
      hence &amp;quot;y ∈ F&amp;quot; using `y ∈ insert x F` by simp&lt;br /&gt;
      hence &amp;quot;y ≤ sumaConj F&amp;quot; using HI by blast&lt;br /&gt;
      also have &amp;quot;… ≤ x + (sumaConj F)&amp;quot; by simp&lt;br /&gt;
      also have &amp;quot;… = sumaConj (insert x F)&amp;quot; using fF xF by simp&lt;br /&gt;
      finally show ?thesis .&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
subsection {* Definiciones por comprensión *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El conjunto de los elementos que cumple la propiedad P se representa&lt;br /&gt;
  por {x. P}. &lt;br /&gt;
&lt;br /&gt;
  Reglas de comprensión (relación entre colección y pertenencia):&lt;br /&gt;
  · mem_Collect_eq: (a ∈ {x. P x}) = P a&lt;br /&gt;
  · Collect_mem_eq: {x. x ∈ A} = A   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de comprensión: {x. P x ∨ x ∈ A} = {x. P x} ∪ A   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;{x. P x ∨ x ∈ A} = {x. P x} ∪ A&amp;quot;&lt;br /&gt;
by blast&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de comprensión: {x. P x ⟶ Q x} = -{x. P x} ∪ {x. Q x}   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;{x. P x ⟶ Q x} = -{x. P x} ∪ {x. Q x}&amp;quot;&lt;br /&gt;
by blast&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo con la sintaxis general de comprensión.   &lt;br /&gt;
     {p*q | p q. p ∈ prime ∧ q ∈ prime} = &lt;br /&gt;
     {z. ∃p q. z = p*q ∧ p ∈ prime ∧ q ∈ prime}   &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;{p*q | p q. p ∈ prime ∧ q ∈ prime} = &lt;br /&gt;
   {z. ∃p q. z = p*q ∧ p ∈ prime ∧ q ∈ prime}&amp;quot;&lt;br /&gt;
by blast&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
   En HOL, la notación conjuntista es azúcar sintáctica:&lt;br /&gt;
   · x ∈ A  es equivalente a A(x).&lt;br /&gt;
   · {x. P} es equivalente a λx. P.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de definición por comprensión: El conjunto de los pares es el&lt;br /&gt;
  de los números n para los que existe un m tal que n = 2*m.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
definition Pares :: &amp;quot;nat set&amp;quot; where&lt;br /&gt;
  &amp;quot;Pares ≡ {n. ∃m. n = 2*m }&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo. Los números 2 y 34 son pares.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;2 ∈ Pares ∧&lt;br /&gt;
   34 ∈ Pares&amp;quot; &lt;br /&gt;
by (simp add: Pares_def)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Definición. El conjunto de los impares es el de los números n para los&lt;br /&gt;
  que existe un m tal que n = 2*m + 1.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
definition Impares :: &amp;quot;nat set&amp;quot; where&lt;br /&gt;
  &amp;quot;Impares ≡ {n. ∃m. n = 2*m + 1}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo con las reglas de intersección y comprensión: El conjunto de&lt;br /&gt;
  los pares es disjunto con el de los impares. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;x ∉ (Pares ∩ Impares)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  fix x assume S: &amp;quot;x ∈ (Pares ∩ Impares)&amp;quot;&lt;br /&gt;
  hence &amp;quot;x ∈ Pares&amp;quot; by (rule IntD1)&lt;br /&gt;
  hence &amp;quot;∃m. x = 2 * m&amp;quot; by (simp only: Pares_def mem_Collect_eq)&lt;br /&gt;
  then obtain p where p: &amp;quot;x = 2 * p&amp;quot; .. &lt;br /&gt;
  from S have &amp;quot;x ∈ Impares&amp;quot; by (rule IntD2)&lt;br /&gt;
  hence &amp;quot;∃ m. x = 2 * m + 1&amp;quot; by (simp only: Impares_def mem_Collect_eq)&lt;br /&gt;
  then obtain q where q: &amp;quot;x = 2 * q + 1&amp;quot; .. &lt;br /&gt;
  from p and q show &amp;quot;False&amp;quot; by arith&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &amp;quot;x ∉ (Pares ∩ Impares)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  fix x assume S: &amp;quot;x ∈ (Pares ∩ Impares)&amp;quot;&lt;br /&gt;
  hence &amp;quot;x ∈ Pares&amp;quot; ..&lt;br /&gt;
  hence &amp;quot;∃m. x = 2 * m&amp;quot; by (simp only: Pares_def mem_Collect_eq)&lt;br /&gt;
  then obtain p where p: &amp;quot;x = 2 * p&amp;quot; .. &lt;br /&gt;
  from S have &amp;quot;x ∈ Impares&amp;quot; ..&lt;br /&gt;
  hence &amp;quot;∃ m. x = 2 * m + 1&amp;quot; by (simp only: Impares_def mem_Collect_eq)&lt;br /&gt;
  then obtain q where q: &amp;quot;x = 2 * q + 1&amp;quot; .. &lt;br /&gt;
  from p and q show &amp;quot;False&amp;quot; by arith&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &amp;quot;x ∉ (Pares ∩ Impares)&amp;quot;&lt;br /&gt;
by (auto simp add: Pares_def Impares_def, arith)&lt;br /&gt;
&lt;br /&gt;
subsection {* Cuantificadores acotados *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Reglas de cuantificador universal acotado (&amp;quot;bounded&amp;quot;):&lt;br /&gt;
  · ballI: (⋀x. x ∈ A ⟹ P x) ⟹ ∀x∈A. P x&lt;br /&gt;
  · bspec: ⟦∀x∈A. P x; x ∈ A⟧ ⟹ P x&lt;br /&gt;
&lt;br /&gt;
  Reglas de cuantificador existencial acotado (&amp;quot;bounded&amp;quot;):&lt;br /&gt;
  · bexI: ⟦P x; x ∈ A⟧ ⟹ ∃x∈A. P x&lt;br /&gt;
  · bexE: ⟦∃x∈A. P x; ⋀x. ⟦x ∈ A; P x⟧ ⟹ Q⟧ ⟹ Q&lt;br /&gt;
&lt;br /&gt;
  Reglas de la unión indexada:&lt;br /&gt;
  · UN_iff: (b ∈ (⋃x∈A. B x)) = (∃x∈A. b ∈ B x)&lt;br /&gt;
  · UN_I:   ⟦a ∈ A; b ∈ B a⟧ ⟹ b ∈ (⋃x∈A. B x)&lt;br /&gt;
  · UN_E:   ⟦b ∈ (⋃x∈A. B x); ⋀x. ⟦x ∈ A; b ∈ B x⟧ ⟹ R⟧ ⟹ R&lt;br /&gt;
&lt;br /&gt;
  Reglas de la unión de una familia:&lt;br /&gt;
  · Union_def: ⋃S = (⋃x∈S. x)&lt;br /&gt;
  · Union_iff: (A ∈ ⋃C) = (∃X∈C. A ∈ X)&lt;br /&gt;
&lt;br /&gt;
  Reglas de la intersección indexada:&lt;br /&gt;
  · INT_iff: (b ∈ (⋂x∈A. B x)) = (∀x∈A. b ∈ B x)&lt;br /&gt;
  · INT_I:   (⋀x. x ∈ A ⟹ b ∈ B x) ⟹ b ∈ (⋂x∈A. B x)&lt;br /&gt;
  · INT_E:   ⟦b ∈ (⋂x∈A. B x); b ∈ B a ⟹ R; a ∉ A ⟹ R⟧ ⟹ R&lt;br /&gt;
&lt;br /&gt;
  Reglas de la intersección de una familia:&lt;br /&gt;
  · Inter_def: ⋂S = (⋂x∈S. x)&lt;br /&gt;
  · Inter_iff: (A ∈ ⋂C) = (∀X∈C. A ∈ X)&lt;br /&gt;
&lt;br /&gt;
  Abreviaturas:&lt;br /&gt;
  · &amp;quot;Collect P&amp;quot; es lo mismo que &amp;quot;{x. P}&amp;quot;.&lt;br /&gt;
  · &amp;quot;All P&amp;quot;     es lo mismo que &amp;quot;∀x. P x&amp;quot;.&lt;br /&gt;
  · &amp;quot;Ex P&amp;quot;      es lo mismo que &amp;quot;∃x. P x&amp;quot;.&lt;br /&gt;
  · &amp;quot;Ball A P&amp;quot;  es lo mismo que &amp;quot;∀x∈A. P x&amp;quot;.&lt;br /&gt;
  · &amp;quot;Bex A P&amp;quot;   es lo mismo que &amp;quot;∃x∈A. P x&amp;quot;.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Conjuntos finitos y cardinalidad *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El número de elementos de un conjunto finito A es el cardinal de A y&lt;br /&gt;
  se representa por &amp;quot;card A&amp;quot;.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplos de cardinales de conjuntos finitos.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;card {} = 0 ∧&lt;br /&gt;
   card {4} = 1 ∧&lt;br /&gt;
   card {4,1} = 2 ∧&lt;br /&gt;
   x ≠ y ⟹ card {x,y} = 2&amp;quot; &lt;br /&gt;
by simp&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Propiedades de cardinales:&lt;br /&gt;
  · Cardinal de la unión de conjuntos finitos:&lt;br /&gt;
    card_Un_Int: ⟦finite A; finite B⟧ &lt;br /&gt;
                 ⟹ card A + card B = card (A ∪ B) + card (A ∩ B)&amp;quot; &lt;br /&gt;
  · Cardinal del conjunto potencia: &lt;br /&gt;
    card_Pow: finite A ⟹ card (Pow A) = 2 ^ card A&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
section {* Funciones *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  La teoría de funciones es HOL/Fun.thy. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Nociones básicas de funciones *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Principio de extensionalidad para funciones:&lt;br /&gt;
  · ext: (⋀x. f x = g x) ⟹ f = g&lt;br /&gt;
&lt;br /&gt;
  Actualización de funciones  &lt;br /&gt;
  · fun_upd_apply: (f(x := y)) z = (if z = x then y else f z)&lt;br /&gt;
  · fun_upd_upd:   f(x := y, x := z) = f(x := z)&lt;br /&gt;
&lt;br /&gt;
  Función identidad&lt;br /&gt;
  · id_def: id ≡ λx. x&lt;br /&gt;
&lt;br /&gt;
  Composición de funciones:&lt;br /&gt;
  · o_def: f ∘ g = (λx. f (g x))&lt;br /&gt;
&lt;br /&gt;
  Asociatividad de la composición:&lt;br /&gt;
  · o_assoc: f ∘ (g ∘ h) = (f ∘ g) ∘ h&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Funciones inyectivas, suprayectivas y biyectivas *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Función inyectiva sobre A:&lt;br /&gt;
  · inj_on_def: inj_on f A ≡ ∀x∈A. ∀y∈A. f x = f y ⟶ x = y&lt;br /&gt;
&lt;br /&gt;
  Nota. &amp;quot;inj f&amp;quot; es una abreviatura de &amp;quot;inj_on f UNIV&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
  Función suprayectiva:&lt;br /&gt;
  · surj_def: surj f ≡ ∀y. ∃x. y = f x&lt;br /&gt;
&lt;br /&gt;
  Función biyectiva:&lt;br /&gt;
  · bij_def: bij f ≡ inj f ∧ surj f&lt;br /&gt;
&lt;br /&gt;
  Propiedades de las funciones inversas:&lt;br /&gt;
  · inv_f_f:      inj f  ⟹ inv f (f x) = x&lt;br /&gt;
  · surj_f_inv_f: surj f ⟹ f (inv f y) = y&lt;br /&gt;
  · inv_inv_eq:   bij f  ⟹ inv (inv f) = f&lt;br /&gt;
&lt;br /&gt;
  Igualdad de funciones (por extensionalidad):&lt;br /&gt;
  · fun_eq_iff: (f = g) = (∀x. f x = g x)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de lema de demostración de propiedades de funciones: Una&lt;br /&gt;
  función inyectiva puede cancelarse en el lado izquierdo de la&lt;br /&gt;
  composición de funciones. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  assumes &amp;quot;inj f&amp;quot;&lt;br /&gt;
  shows &amp;quot;(f ∘ g = f ∘ h) = (g = h)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;f ∘ g = f ∘ h&amp;quot;&lt;br /&gt;
  show &amp;quot;g = h&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    fix x&lt;br /&gt;
    have &amp;quot;(f ∘ g)(x) = (f ∘ h)(x)&amp;quot; using `f ∘ g = f ∘ h` by simp&lt;br /&gt;
    hence &amp;quot;f(g(x)) = f(h(x))&amp;quot; by simp&lt;br /&gt;
    thus &amp;quot;g(x) = h(x)&amp;quot; using `inj f` by (simp add:inj_on_def)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;g = h&amp;quot;&lt;br /&gt;
  show &amp;quot;f ∘ g = f ∘ h&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    fix x&lt;br /&gt;
    have &amp;quot;(f ∘ g) x = f(g(x))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = f(h(x))&amp;quot; using `g = h` by simp&lt;br /&gt;
    also have &amp;quot;… = (f ∘ h) x&amp;quot; by simp&lt;br /&gt;
    finally show &amp;quot;(f ∘ g) x = (f ∘ h) x&amp;quot; by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  assumes &amp;quot;inj f&amp;quot;&lt;br /&gt;
  shows &amp;quot;(f ∘ g = f ∘ h) = (g = h)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;f ∘ g = f ∘ h&amp;quot; &lt;br /&gt;
  thus &amp;quot;g = h&amp;quot; using `inj f` by (simp add: inj_on_def fun_eq_iff) &lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;g = h&amp;quot; &lt;br /&gt;
  thus &amp;quot;f ∘ g = f ∘ h&amp;quot; by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma &lt;br /&gt;
  assumes &amp;quot;inj f&amp;quot;&lt;br /&gt;
  shows &amp;quot;(f ∘ g = f ∘ h) = (g = h)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by (auto simp add: inj_on_def fun_eq_iff) &lt;br /&gt;
&lt;br /&gt;
subsubsection {* Función imagen *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Imagen de un conjunto mediante una función:&lt;br /&gt;
  · image_def: f ` A = {y. (∃x∈A. y = f x)}&lt;br /&gt;
&lt;br /&gt;
  Propiedades de la imagen:&lt;br /&gt;
  · image_compose: (f ∘ g)`r = f`g`r&lt;br /&gt;
  · image_Un:      f`(A ∪ B) = f`A ∪ f`B &lt;br /&gt;
  · image_Int:     inj f ⟹ f`(A ∩ B) = f`A ∩ f`B&amp;quot; &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de demostración de propiedades de la imagen:&lt;br /&gt;
     f`A ∪ g`A = (⋃x∈A. {f x, g x})&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;f`A ∪ g`A = (⋃x∈A. {f x, g x})&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo de demostración de propiedades de la imagen:&lt;br /&gt;
     f`{(x,y). P x y} = {f(x,y) | x y. P x y}&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;f`{(x,y). P x y} = {f(x,y) | x y. P x y}&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El rango de una función (&amp;quot;range f&amp;quot;) es la imagen del universo &lt;br /&gt;
  (&amp;quot;f`UNIV&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
  Imagen inversa de un conjunto:&lt;br /&gt;
  · vimage_def: f -` B ≡ {x. f x ∈ B}&lt;br /&gt;
&lt;br /&gt;
  Propiedad de la imagen inversa de un conjunto:&lt;br /&gt;
  · vimage_Compl: f -` (-A) = -(f -` A)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
section {* Relaciones *}&lt;br /&gt;
&lt;br /&gt;
subsection {* Relaciones básicas *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La teoría de relaciones es HOL/Relation.thy.&lt;br /&gt;
&lt;br /&gt;
  Las relaciones son conjuntos de pares.&lt;br /&gt;
&lt;br /&gt;
  Relación identidad:&lt;br /&gt;
  · Id_def: Id ≡ {p. ∃x. p = (x,x)}&lt;br /&gt;
&lt;br /&gt;
  Composición de relaciones:&lt;br /&gt;
  · rel_comp_def: r O s ≡ {(x,z). ∃y. (x, y) ∈ r ∧ (y, z) ∈ s}&lt;br /&gt;
&lt;br /&gt;
  Propiedades:&lt;br /&gt;
  · R_O_Id:        R O Id = R&lt;br /&gt;
  · rel_comp_mono: ⟦r&amp;#039; ⊆ r; s&amp;#039; ⊆ s⟧ ⟹ (r&amp;#039; O s&amp;#039;) ⊆ (r O s)&lt;br /&gt;
&lt;br /&gt;
  Imagen inversa de una relación:&lt;br /&gt;
  · converse_iff: ((a,b) ∈ r^-1) = ((b,a) ∈ r)&lt;br /&gt;
&lt;br /&gt;
  Propiedad de la imagen inversa de una relación:&lt;br /&gt;
  · converse_rel_comp: (r O s)^-1 = s^-1 O r^-1&lt;br /&gt;
&lt;br /&gt;
  Imagen de un conjunto mediante una relación:&lt;br /&gt;
  · Image_iff: (b ∈ r``A) = (∃x:A. (x, b) ∈ r)&lt;br /&gt;
&lt;br /&gt;
  Dominio de una relación:&lt;br /&gt;
  · Domain_iff: (a ∈ Domain r) = (∃y. (a, y) ∈ r)&lt;br /&gt;
&lt;br /&gt;
  Rango de una relación:&lt;br /&gt;
  · Range_iff: (a ∈ Range r) = (∃y. (y,a) ∈ r)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Clausura reflexiva y transitiva *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La teoría de la clausura reflexiva y transitiva de una relación es&lt;br /&gt;
  HOL/Transitive_Closure.thy.&lt;br /&gt;
&lt;br /&gt;
  Potencias de relaciones:&lt;br /&gt;
  · R ^^ 0 = Id&lt;br /&gt;
  · R ^^ (Suc n) = (R ^^ n) O R&lt;br /&gt;
  &lt;br /&gt;
  La clausura reflexiva y transitiva de la relación r es la menor&lt;br /&gt;
  solución de la ecuación: &lt;br /&gt;
  · rtrancl_unfold: r⇧* = Id ∪ (r⇧* O r)&lt;br /&gt;
  &lt;br /&gt;
  Propiedades básicas de la clausura reflexiva y transitiva:&lt;br /&gt;
  · rtrancl_refl:   (a,a) ∈ r⇧*&lt;br /&gt;
  · r_into_rtrancl: p ∈ r ⟹ p ∈ r⇧*&lt;br /&gt;
  · rtrancl_trans:  ⟦(a,b) ∈ r⇧*; (b,c) ∈ r⇧*⟧ ⟹ (a,c) ∈ r⇧*&lt;br /&gt;
  &lt;br /&gt;
  Inducción sobre la clausura reflexiva y transitiva&lt;br /&gt;
  · rtrancl_induct: ⟦(a,b) ∈ r⇧*; &lt;br /&gt;
                     P b; &lt;br /&gt;
                     ⋀y z. ⟦(y,z) ∈ r; (z,b) ∈ r⇧*; P z⟧ ⟹ P y⟧&lt;br /&gt;
                    ⟹ P a&lt;br /&gt;
  &lt;br /&gt;
  Idempotencia de la clausura reflexiva y transitiva:&lt;br /&gt;
  · rtrancl_idemp: (r⇧* )⇧* = r⇧*&lt;br /&gt;
  &lt;br /&gt;
  Reglas de introducción de la clausura transitiva:&lt;br /&gt;
  · r_into_trancl&amp;#039;: p ∈ r ⟹ p ∈ r⇧+&lt;br /&gt;
  · trancl_trans:   ⟦(a,b) ∈ r⇧+; (b,c) ∈ r⇧+⟧ ⟹ (a,c) ∈ r⇧+&lt;br /&gt;
&lt;br /&gt;
  Ejemplo de propiedad:&lt;br /&gt;
  · trancl_converse: (r¯)⇧+ = (r⇧+)¯&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsection {* Una demostración elemental *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se desea demostrar que la clausura reflexiva y transitiva conmuta con&lt;br /&gt;
  la inversa (cl_rtrans_inversa). &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;(r¯)⇧* = (r⇧*)¯&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {* Para demostrarlo introducimos dos lemas auxiliares: &lt;br /&gt;
  cl_rtrans_inversaD y cl_rtrans_inversaI.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada del primer lema es&amp;quot;&lt;br /&gt;
lemma cl_rtrans_inversaD: &lt;br /&gt;
  &amp;quot;(x,y) ∈ (r¯)⇧* ⟹ (y,x) ∈ r⇧*&amp;quot;&lt;br /&gt;
proof (induct rule:rtrancl_induct)&lt;br /&gt;
  show &amp;quot;(x,x) ∈ r⇧*&amp;quot; by (rule rtrancl_refl) &lt;br /&gt;
next&lt;br /&gt;
  fix y z&lt;br /&gt;
  assume &amp;quot;(x,y) ∈ (r¯)⇧*&amp;quot; and &amp;quot;(y,z) ∈ r¯&amp;quot; and &amp;quot;(y,x) ∈ r⇧*&amp;quot;&lt;br /&gt;
  show &amp;quot;(z,x) ∈ r⇧*&amp;quot;&lt;br /&gt;
  proof (rule rtrancl_trans)&lt;br /&gt;
    show &amp;quot;(z,y) ∈ r⇧*&amp;quot; using `(y,z) ∈ r¯` by simp&lt;br /&gt;
  next&lt;br /&gt;
    show &amp;quot;(y,x) ∈ r⇧*&amp;quot; using `(y,x) ∈ r⇧*` by simp&lt;br /&gt;
  qed   &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del primer lema es&amp;quot;&lt;br /&gt;
lemma  cl_rtrans_inversaD2: &lt;br /&gt;
  &amp;quot;(x,y) ∈ (r¯)⇧* ⟹ (y,x) ∈ r⇧*&amp;quot;&lt;br /&gt;
by (induct rule: rtrancl_induct) &lt;br /&gt;
   (auto simp add: rtrancl_trans)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada del segundo lema es&amp;quot;&lt;br /&gt;
lemma cl_rtrans_inversaI: &lt;br /&gt;
  &amp;quot;(y,x) ∈ r⇧* ⟹ (x,y) ∈ (r¯)⇧*&amp;quot;&lt;br /&gt;
proof (induct rule: rtrancl_induct)&lt;br /&gt;
  show &amp;quot;(y,y) ∈ (r¯)⇧*&amp;quot; by (rule rtrancl_refl) &lt;br /&gt;
next&lt;br /&gt;
  fix u z&lt;br /&gt;
  assume &amp;quot;(y,u) ∈ r⇧*&amp;quot; and &amp;quot;(u,z) ∈ r&amp;quot; and &amp;quot;(u,y) ∈ (r¯)⇧*&amp;quot;&lt;br /&gt;
  show &amp;quot;(z,y) ∈ (r¯)⇧*&amp;quot;&lt;br /&gt;
  proof (rule rtrancl_trans)&lt;br /&gt;
    show &amp;quot;(z,u) ∈ (r¯)⇧*&amp;quot; using `(u,z) ∈ r` by auto&lt;br /&gt;
  next&lt;br /&gt;
    show &amp;quot;(u,y) ∈ (r¯)⇧*&amp;quot; using `(u,y) ∈ (r¯)⇧*` by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detalla del teorema es&amp;quot;&lt;br /&gt;
theorem cl_rtrans_inversa: &lt;br /&gt;
  &amp;quot;(r¯)⇧* = (r⇧*)¯&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;(r¯)⇧* ⊆ (r⇧*)¯&amp;quot; by (auto simp add:cl_rtrans_inversaD)&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;(r⇧*)¯ ⊆ (r¯)⇧*&amp;quot; by (auto simp add:cl_rtrans_inversaI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática del teorema es&amp;quot;&lt;br /&gt;
theorem &amp;quot;(r¯)⇧* = (r⇧*)¯&amp;quot;&lt;br /&gt;
by (auto intro: cl_rtrans_inversaI dest: cl_rtrans_inversaD)&lt;br /&gt;
&lt;br /&gt;
section {* Relaciones bien fundamentadas e inducción *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La teoría de las relaciones bien fundamentadas es &lt;br /&gt;
  HOL/Wellfounded_Relations.thy.&lt;br /&gt;
&lt;br /&gt;
  La relación-objeto &amp;quot;less_than&amp;quot; es el orden de los naturales definido &lt;br /&gt;
  por&lt;br /&gt;
  · less_than = pred_nat^+&lt;br /&gt;
  donde pred_nat está definida por &lt;br /&gt;
  · pred_nat = {(m, n). n = Suc m}&lt;br /&gt;
&lt;br /&gt;
  La caracterización de less_than es&lt;br /&gt;
  · less_than_iff: ((x,y) ∈ less_than) = (x &amp;lt; y)&lt;br /&gt;
&lt;br /&gt;
  La relación less_than está bien fundamentada&lt;br /&gt;
  · wf_less_than:  wf less_than&lt;br /&gt;
&lt;br /&gt;
  Notas sobre medidas:&lt;br /&gt;
  · Imagen inversa de una relación mediante una función:&lt;br /&gt;
    · inv_image_def: inv_image r f ≡ {(x,y). (f x,f y) ∈ r}&lt;br /&gt;
  · Conservación de la buena fundamentación:&lt;br /&gt;
    · wf_inv_image: wf r ⟹ wf (inv_image r f)&lt;br /&gt;
  · Definición de la medida:&lt;br /&gt;
    · measure_def: measure ≡ inv_image less_than&lt;br /&gt;
  · Buena fundamentación de la medida:&lt;br /&gt;
    · wf_measure: wf (measure f)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Notas sobre el producto lexicográfico:&lt;br /&gt;
  · Definición del producto lexicográfico (lex_prod_def):&lt;br /&gt;
    ra &amp;lt;*lex*&amp;gt; rb ≡ {((a,b),(a&amp;#039;,b&amp;#039;)). &lt;br /&gt;
                      (a,a&amp;#039;) ∈ ra ∨ (a = a&amp;#039; ∧ (b,b&amp;#039;) ∈ rb)}&lt;br /&gt;
  · Conservación de la buena fundamentación:&lt;br /&gt;
    · wf_lex_prod: ⟦wf ra; wf rb⟧ ⟹ wf (ra &amp;lt;*lex*&amp;gt; rb)&lt;br /&gt;
&lt;br /&gt;
  El orden de multiconjuntos está en la teoría HOL/Library/Multiset.thy.&lt;br /&gt;
&lt;br /&gt;
  Inducción sobre relaciones bien fundamentadas:&lt;br /&gt;
  · wf_induct: ⟦wf r; ⋀x. (⋀y. (y,x) ∈ r ⟹ P y) ⟹ P x⟧ ⟹ P a&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
section {* Puntos fijos *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La teoría de los puntos fijos se aplican a las funciones monótonas.&lt;br /&gt;
&lt;br /&gt;
  Las funciones monótonas está definida (en Orderings.thy) por&lt;br /&gt;
  · mono_def: mono f ≡ ∀A B. A ≤ B ⟶ f A ≤ f B &lt;br /&gt;
&lt;br /&gt;
  Las reglas de introducción y eliminación de la monotonicidad son:&lt;br /&gt;
  . monoI: (⋀A B. A ≤ B ⟹ f A ≤ f B) ⟹ mono f&lt;br /&gt;
  · monoD: ⟦mono f ⟹ A ≤ B⟧ ⟹ f A ≤ f B&lt;br /&gt;
&lt;br /&gt;
  El menor punto fijo de un operador está definido en la teoría&lt;br /&gt;
  Inductive.thy, para los retículos completos, por&lt;br /&gt;
  · lfp_def: lfp f = Inf {u. f u ≤ u}&lt;br /&gt;
&lt;br /&gt;
  El menor punto fijo de una función monótona es un punto fijo:&lt;br /&gt;
  · lfp_unfold: mono f ⟹ lfp f = f (lfp f)&lt;br /&gt;
&lt;br /&gt;
  La regla de inducción del menor punto fijo es&lt;br /&gt;
  · lfp_induct_set: ⟦ a ∈ lfp(f);&lt;br /&gt;
                     mono(f); &lt;br /&gt;
                     ⋀x. ⟦ x ∈ f(lfp(f) ⋂ {x. P(x)}) ⟧ ⟹ P(x) ⟧&lt;br /&gt;
                    ⟹ P(a)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El mayor punto fijo de un operador está definido en la teoría&lt;br /&gt;
  Inductive.thy, para los retículos completos, por&lt;br /&gt;
  · gfp_def: gfp f = Sup {u. u ≤ f u}&lt;br /&gt;
&lt;br /&gt;
  El menor punto fijo de una función monótona es un punto fijo:&lt;br /&gt;
  · gfp_unfold: mono f ⟹ gfp f = f (gfp f)&lt;br /&gt;
&lt;br /&gt;
  La regla de inducción del menor punto fijo es&lt;br /&gt;
  · coinduct_set: ⟦ mono(f);  &lt;br /&gt;
                   a ∈ X;  &lt;br /&gt;
                   X ⊆ f(X ⋃ gfp(f)) ⟧ &lt;br /&gt;
                  ⟹ a ∈ gfp(f)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Temas&amp;diff=249</id>
		<title>Temas</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Temas&amp;diff=249"/>
		<updated>2015-01-06T12:40:33Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Temas de &amp;#039;&amp;#039;Razonamiento automático (2014-15)&amp;#039;&amp;#039; ==&lt;br /&gt;
* [[Tema 1: Programación funcional en Isabelle]].&lt;br /&gt;
* [http://www.cs.us.es/~jalonso/cursos/i1m/temas/tema-8t.pdf Tema 2a: Razonamiento sobre programas Haskell]&lt;br /&gt;
* [[Tema 2b: Razonamiento automático sobre programas en Isabelle/HOL]].&lt;br /&gt;
* [[Tema 3: Razonamiento estructurado sobre programas en Isabelle/HOL]].&lt;br /&gt;
* [[Tema 4: Razonamiento por casos y por inducción]].&lt;br /&gt;
* [[Tema 5a: Verificación de la ordenación por inserción]].&lt;br /&gt;
* [[Tema 5b: Verificación de la ordenación por mezcla]].&lt;br /&gt;
* [[Tema 6: Caso de estudio: Compilación de expresiones]].&lt;br /&gt;
* [http://www.cs.us.es/~jalonso/cursos/li/temas/tema-2.pdf Tema 7a: Deducción natural proposicional]].&lt;br /&gt;
* [[Tema 7b: Deducción natural proposicional con Isabelle/HOL]].&lt;br /&gt;
* [http://www.cs.us.es/~jalonso/cursos/li/temas/tema-8.pdf Tema 8a: Deducción natural en lógica de primer orden]].&lt;br /&gt;
* [[Tema 8b: Deducción natural en lógica de primer orden con Isabelle/HOL]]&lt;br /&gt;
* [[Tema 9: Conjuntos, funciones y relaciones]].&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Relaci%C3%B3n_8&amp;diff=247</id>
		<title>Relación 8</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Relaci%C3%B3n_8&amp;diff=247"/>
		<updated>2014-12-18T12:09:38Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R8: Árboles binarios completos *}&lt;br /&gt;
&lt;br /&gt;
theory R8&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que no tienen información ni en los nodos y ni en las&lt;br /&gt;
  hojas. Por ejemplo, el árbol&lt;br /&gt;
          ·&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       ·     ·&lt;br /&gt;
      / \   / \&lt;br /&gt;
     ·   · ·   · &lt;br /&gt;
  se representa por &amp;quot;N (N H H) (N H H)&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype arbol = H | N arbol arbol&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N (N H H) (N H H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (hojas a) es el número de hojas del árbol a. Por ejemplo,&lt;br /&gt;
     hojas (N (N H H) (N H H)) = 4&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;javrodviv1, jeshorcob, davoremar, domcadgom, carvelcab, juacorvic&amp;quot;&lt;br /&gt;
fun hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;hojas H       = 1&amp;quot;&lt;br /&gt;
| &amp;quot;hojas (N i d) = hojas i + hojas d&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
value &amp;quot;hojas (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (profundidad a) es la profundidad del árbol a. Por ejemplo,&lt;br /&gt;
     profundidad (N (N H H) (N H H)) = 2&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;javrodviv1&amp;quot;&lt;br /&gt;
fun max :: &amp;quot;nat ⇒ nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;max a b = (if a≥ b then a else b)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;max 6 3&amp;quot; -- &amp;quot;= 6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;davoremar, carvelcab, juacorvic&amp;quot;&lt;br /&gt;
fun profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad H       = 0&amp;quot;&lt;br /&gt;
| &amp;quot;profundidad (N a b) = 1 + max (profundidad a) (profundidad b)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;profundidad (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* Javrodviv1: Explico estas dos funciones, la que utilizo para los &lt;br /&gt;
  lemas de abajo es profundidad ya que profundidad1 me encuentra&lt;br /&gt;
  contraejemplos y para evitar eso busque definir profundidad&lt;br /&gt;
  definidad de manera distinta. No obstante la que a mi me parece&lt;br /&gt;
  mas sensata para definir la profundidad de un árbol es la &lt;br /&gt;
  profundidad1 *)&lt;br /&gt;
&lt;br /&gt;
(* Javrodviv1: Fallo mio ya lo corregí *)&lt;br /&gt;
&lt;br /&gt;
(* Pedrosrei: La profundidad correcta es la mayor. Si te encuentra&lt;br /&gt;
  contraejemplos más adelante es que te has equivocado en los&lt;br /&gt;
  enunciados. Las funciones máximo y mínimo vienen predefinidas&lt;br /&gt;
  ya sin necesidad de definirlas. *)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jeshorcob, domcadgom&amp;quot;&lt;br /&gt;
fun pr1 :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
   &amp;quot;pr1 H       = 0&amp;quot;&lt;br /&gt;
 | &amp;quot;pr1 (N i d) = Suc (max (pr1 i) (pr1 d))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     abc :: &amp;quot;nat ⇒ arbol&amp;quot; &lt;br /&gt;
  tal que (abc n) es el árbol binario completo de profundidad n. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     abc 3 = N (N (N H H) (N H H)) (N (N H H) (N H H))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;javrodviv1, jeshorcob, davoremar, domcadgom, carvelcab, juacorvic&amp;quot;&lt;br /&gt;
fun abc :: &amp;quot;nat ⇒ arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;abc 0       = H&amp;quot;&lt;br /&gt;
| &amp;quot;abc (Suc n) = N (abc n) (abc n)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jeshorcob&amp;quot; (* ¿Pudiera ser que esta sea más rápida? *)&lt;br /&gt;
fun abc1 :: &amp;quot;nat ⇒ arbol&amp;quot; where&lt;br /&gt;
   &amp;quot;abc1 0       = H&amp;quot;&lt;br /&gt;
 | &amp;quot;abc1 (Suc n) = (let a = abc1 n in N a a)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;abc 3&amp;quot; -- &amp;quot;= N (N (N H H) (N H H)) (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un árbol binario a es completo respecto de la medida f si&lt;br /&gt;
  a es una hoja o bien a es de la forma (N i d) y se cumple que tanto i&lt;br /&gt;
  como d son árboles binarios completos respecto de f y, además, &lt;br /&gt;
  f(i) = f(r).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&lt;br /&gt;
  tal que (es_abc f a) se verifica si a es un árbol binario completo&lt;br /&gt;
  respecto de f.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;javrodviv1&amp;quot;&lt;br /&gt;
fun es_abc1 :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&amp;quot; where&lt;br /&gt;
  &amp;quot;es_abc1 f H       = True&amp;quot;&lt;br /&gt;
| &amp;quot;es_abc1 f (N a b) = ((f a = f b) ∧ (es_abc1 f a ∧ es_abc1 f b))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jeshorcob, davoremar, domcadgom, carvelcab&amp;quot;&lt;br /&gt;
fun es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&amp;quot; where&lt;br /&gt;
  &amp;quot;es_abc f H = True&amp;quot;&lt;br /&gt;
| &amp;quot;es_abc f (N i d) = (f i = f d ∧ es_abc f i ∧ es_abc f d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juacorvic&amp;quot;&lt;br /&gt;
fun es_abc3 :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&amp;quot; where&lt;br /&gt;
  &amp;quot;es_abc3 f H       = True&amp;quot;&lt;br /&gt;
| &amp;quot;es_abc3 f (N i d) = ( es_abc3 f i ∧ es_abc3 f d ∧ f i = f d )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. (size a) es el número de nodos del árbol a. Por ejemplo,&lt;br /&gt;
     size (N (N H H) (N H H)) = 3&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* Para entenderme he cambiado de función de tamaño, la demostración&lt;br /&gt;
   es análoga pero buscando las simplificaciones de size cuando &lt;br /&gt;
   correspondan *)&lt;br /&gt;
&lt;br /&gt;
fun nodos::&amp;quot;arbol ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;nodos H       = 0&amp;quot;&lt;br /&gt;
| &amp;quot;nodos (N i d) = 1 + (nodos i) + (nodos d)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;size t = nodos t&amp;quot;&lt;br /&gt;
apply (induct t, auto)done&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;size (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
value &amp;quot;size (N (N (N H H) (N H H)) (N (N H H) (N H H)))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. Tenemos 3 funciones de medida sobre los árboles: número de&lt;br /&gt;
  hojas, número de nodos y profundidad. A cada una le corresponde un&lt;br /&gt;
  concepto de completitud. En los siguientes ejercicios demostraremos&lt;br /&gt;
  que los tres conceptos de completitud son iguales.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de hojas.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* Pedrosrei: Los enunciados y demostraciones que vienen a continuación &lt;br /&gt;
   son feos y engorrosos. Yo he optado por demostrarlo todo a través de &lt;br /&gt;
   una propiedad extraña a la demostración en principio. Animo&lt;br /&gt;
   encarecidamente a que pongáis una demostración más corta y directa.&lt;br /&gt;
   Voy explicando paso a paso qué he hecho en cada momento. Hecha esta&lt;br /&gt;
   demostración, el resto son triviales por una cadena de resultados. &lt;br /&gt;
&lt;br /&gt;
   No existe relación de implicación en ningún sentido entre hojas y&lt;br /&gt;
   profundidad, como es obvio y muestran los siguientes contraejemplos:&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;hojas t1 = hojas t2 ⟶ profundidad t1 = profundidad t2&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;profundidad t1 = profundidad t2 ⟶ hojas t1 = hojas t2&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;profundidad t1 = profundidad t2 ⟷ hojas t1 = hojas t2&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
(* Quickchecking... &lt;br /&gt;
Testing conjecture with Quickcheck-exhaustive... &lt;br /&gt;
Quickcheck found a counterexample:&lt;br /&gt;
&lt;br /&gt;
t1 = N (N H H) (N H H)&lt;br /&gt;
t2 = N H (N H H)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
hojas t1 = 4&lt;br /&gt;
hojas t2 = 3&lt;br /&gt;
&lt;br /&gt;
Ahora pongo una serie de resultados auxiliares que ayudarán en la prueba&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
lemma auxprof: &amp;quot;es_abc profundidad t ∧ profundidad t = n ⟹ t = abc n&amp;quot;&lt;br /&gt;
apply (induct t arbitrary:n, auto)&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
lemma eq_1_iff_exp_0: &amp;quot;Suc 0 = 2^n ⟷ n = 0&amp;quot;  &lt;br /&gt;
apply (cases n, auto) &lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
lemma auxhojas: &amp;quot;t = abc n ⟹ es_abc hojas t&amp;quot;&lt;br /&gt;
apply (induct n arbitrary: t, auto simp add: eq_1_iff_exp_0) &lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
lemma auxhoja: &amp;quot;t = abc n ⟹ hojas t = 2^n&amp;quot;&lt;br /&gt;
apply (induct n  arbitrary: t rule: abc.induct, auto)&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
(* Pedrosrei. Y aquí viene la demostración larga y fea que os animo a&lt;br /&gt;
  mejorar. He dejado los pasos exactamente que indica el razonador para&lt;br /&gt;
  que veáis qué hace en cada caso: *)&lt;br /&gt;
&lt;br /&gt;
lemma prof_eq_hoja: &amp;quot;es_abc profundidad t ⟷ es_abc hojas t&amp;quot; &lt;br /&gt;
proof &lt;br /&gt;
  assume a1: &amp;quot;es_abc profundidad t&amp;quot;&lt;br /&gt;
  have &amp;quot;∀t. ∃n. n = profundidad t&amp;quot; by auto&lt;br /&gt;
  then obtain n where &amp;quot;n = profundidad t&amp;quot; by auto&lt;br /&gt;
  with a1 have 1: &amp;quot;t= abc n&amp;quot; using auxprof by auto&lt;br /&gt;
  thus &amp;quot;es_abc hojas t&amp;quot; using auxhojas by auto&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;es_abc hojas t ⟹ es_abc profundidad t&amp;quot; &lt;br /&gt;
  apply (induct t, auto)&lt;br /&gt;
  proof -&lt;br /&gt;
    fix t1 t2 &lt;br /&gt;
    assume a1: &amp;quot;es_abc profundidad t1&amp;quot;&lt;br /&gt;
    thus &amp;quot;es_abc profundidad t2 ⟹&lt;br /&gt;
          es_abc hojas t1 ⟹&lt;br /&gt;
          es_abc hojas t2 ⟹&lt;br /&gt;
          hojas t1 = hojas t2 ⟹&lt;br /&gt;
          profundidad t1 = profundidad t2&amp;quot; &lt;br /&gt;
    proof -&lt;br /&gt;
      assume a2: &amp;quot;es_abc profundidad t2&amp;quot;&lt;br /&gt;
      thus &amp;quot;es_abc hojas t1 ⟹&lt;br /&gt;
            es_abc hojas t2 ⟹&lt;br /&gt;
            hojas t1 = hojas t2 ⟹&lt;br /&gt;
            profundidad t1 = profundidad t2&amp;quot;&lt;br /&gt;
      proof -&lt;br /&gt;
        assume a3: &amp;quot;es_abc hojas t1&amp;quot;&lt;br /&gt;
        thus &amp;quot;es_abc hojas t2 ⟹&lt;br /&gt;
              hojas t1 = hojas t2 ⟹&lt;br /&gt;
              profundidad t1 = profundidad t2&amp;quot;&lt;br /&gt;
        proof -&lt;br /&gt;
          assume a4:&amp;quot;es_abc hojas t2&amp;quot;&lt;br /&gt;
          thus &amp;quot;hojas t1 = hojas t2 ⟹&lt;br /&gt;
                profundidad t1 = profundidad t2&amp;quot; &lt;br /&gt;
          proof -&lt;br /&gt;
            assume a5: &amp;quot;hojas t1 = hojas t2&amp;quot;&lt;br /&gt;
            thus &amp;quot;profundidad t1 = profundidad t2&amp;quot;&lt;br /&gt;
            proof -&lt;br /&gt;
              obtain n where 1:&amp;quot; profundidad t1 = n&amp;quot; by auto&lt;br /&gt;
              with a1 have 2: &amp;quot;t1 = abc n&amp;quot; using auxprof by auto&lt;br /&gt;
              hence 3: &amp;quot;es_abc hojas t1&amp;quot; using auxhojas by auto&lt;br /&gt;
              have &amp;quot;hojas t1 = (2::nat)^n&amp;quot; using 2 auxhoja by auto&lt;br /&gt;
              hence 3:&amp;quot;hojas t2 =  (2::nat)^n&amp;quot; using a5 by auto&lt;br /&gt;
              obtain m where 4: &amp;quot;profundidad t2 = m&amp;quot; by auto&lt;br /&gt;
              with a2 have 5: &amp;quot;t2 = abc m&amp;quot; using auxprof by auto&lt;br /&gt;
              hence 6: &amp;quot;es_abc hojas t2&amp;quot; using auxhojas by auto&lt;br /&gt;
              have &amp;quot;hojas t2 =  (2::nat)^m&amp;quot; using 5 auxhoja by auto&lt;br /&gt;
              with 3 have &amp;quot; (2::nat)^m =  (2::nat) ^n&amp;quot; by auto&lt;br /&gt;
              hence &amp;quot;m = n&amp;quot; apply (induct, auto) done&lt;br /&gt;
              hence &amp;quot;t2 = abc n&amp;quot; using 5 by auto&lt;br /&gt;
              with 2 have &amp;quot;t1= t2&amp;quot; by auto&lt;br /&gt;
              thus &amp;quot;profundidad t1 = profundidad t2&amp;quot; by auto&lt;br /&gt;
              qed&lt;br /&gt;
             qed&lt;br /&gt;
           qed&lt;br /&gt;
         qed&lt;br /&gt;
       qed&lt;br /&gt;
     qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* jeshorcob: creo que tengo una demostración mas elegante tan&lt;br /&gt;
   sólo hace falta encontrar la relacion entre hojas y profundidad. *)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jeshorcob, carvelcab&amp;quot;&lt;br /&gt;
lemma a1: &lt;br /&gt;
  assumes &amp;quot;es_abc hojas a&amp;quot;&lt;br /&gt;
  shows &amp;quot;hojas a = 2^(pr1 a)&amp;quot;&lt;br /&gt;
using assms &lt;br /&gt;
by (induct a, simp_all)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jeshorcob, carvelcab&amp;quot;&lt;br /&gt;
lemma cpr1_chojas: &amp;quot;es_abc pr1 a = es_abc hojas a&amp;quot;&lt;br /&gt;
by (induct a, auto simp add: a1)&lt;br /&gt;
&lt;br /&gt;
(* mjeshorcob: esta es la detallada*)&lt;br /&gt;
-- &amp;quot;jeshorcob,caarvelcab&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc pr1 a = es_abc hojas a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  show &amp;quot;?P H&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix i d&lt;br /&gt;
  assume h1: &amp;quot;?P i&amp;quot;&lt;br /&gt;
  assume h2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;es_abc pr1 (N i d) = &lt;br /&gt;
        (pr1 i = pr1 d ∧ es_abc pr1 i ∧ es_abc pr1 d )&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (pr1 i = pr1 d ∧ es_abc hojas i ∧ es_abc hojas d)&amp;quot;&lt;br /&gt;
    using h1 and h2 by simp&lt;br /&gt;
  also have &amp;quot;… = (hojas i = hojas d ∧ es_abc hojas i ∧ es_abc hojas d)&amp;quot; &lt;br /&gt;
    using a1 by auto&lt;br /&gt;
  also have &amp;quot;… = es_abc hojas (N i d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N i d)&amp;quot; by simp &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;domcadgom&amp;quot;&lt;br /&gt;
lemma aux1: &amp;quot;es_abc profundidad a ⟹ hojas a = 2^(profundidad  a)&amp;quot;&lt;br /&gt;
by (induct a, simp_all)&lt;br /&gt;
&lt;br /&gt;
lemma completo1: &amp;quot;es_abc (profundidad) a = es_abc (hojas) a&amp;quot;&lt;br /&gt;
proof (induct a, simp)&lt;br /&gt;
  fix a1 :: arbol and a2 :: arbol&lt;br /&gt;
  assume a1: &amp;quot;es_abc profundidad a1 = es_abc hojas a1&amp;quot;&lt;br /&gt;
  assume a2: &amp;quot;es_abc profundidad a2 = es_abc hojas a2&amp;quot;&lt;br /&gt;
  have &amp;quot;es_abc profundidad a2 ∧ es_abc profundidad a1 ⟶ &lt;br /&gt;
        es_abc profundidad (N a1 a2) = es_abc hojas (N a1 a2)&amp;quot; &lt;br /&gt;
    using a1 a2 by (simp add: aux1)&lt;br /&gt;
  thus &amp;quot;es_abc profundidad (N a1 a2) = es_abc hojas (N a1 a2)&amp;quot; &lt;br /&gt;
    using a1 a2 es_abc.simps(2) by blast&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que un árbol binario a es completo respecto del&lt;br /&gt;
  número de hojas syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* Javrodviv1: Bueno yo para este ejercicio he encontrado algo más&lt;br /&gt;
   sencillo, tan sólo hay que encontrar una relación de igualdad entre&lt;br /&gt;
   hojas y size, que para este caso es sencillo.*)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Javrodviv1,carvelcab&amp;quot;&lt;br /&gt;
lemma hojasize_igualdad: &amp;quot;hojas x = size x + 1&amp;quot;&lt;br /&gt;
by (induct x, simp_all)&lt;br /&gt;
&lt;br /&gt;
(* lemma &amp;quot;es_abc size a &amp;lt;-&amp;gt; es_abc hojas a&amp;quot; Son equivalentes = es lo&lt;br /&gt;
   mismo que ⟷ matemáticamente hablando*)&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;es_abc size a = es_abc hojas a&amp;quot;&lt;br /&gt;
by (induct a, simp_all add: hojasize_igualdad)&lt;br /&gt;
&lt;br /&gt;
(* Pedrosrei. Aquí dejo esta. Es trivial debido a la demostración&lt;br /&gt;
   anterior, sólo hace falta coger el mismo desvío. Aquí sí que podéis&lt;br /&gt;
   encontrar una mucho más directa: *)&lt;br /&gt;
&lt;br /&gt;
lemma auxnodo: &amp;quot;t = abc n ⟹ es_abc nodos t ∧ nodos t = (2^n - 1)&amp;quot;&lt;br /&gt;
apply (induct n  arbitrary: t rule: abc.induct, auto)&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
lemma nodos_eq_hoja: &amp;quot;es_abc nodos t ⟷ es_abc hojas t&amp;quot; (is &amp;quot;?P t&amp;quot;)&lt;br /&gt;
proof -&lt;br /&gt;
  have 1:&amp;quot;es_abc hojas t ⟷ es_abc profundidad t&amp;quot; &lt;br /&gt;
    using prof_eq_hoja by auto&lt;br /&gt;
  hence 2:&amp;quot;?P t = (es_abc profundidad t ⟷ es_abc nodos t)&amp;quot; by auto&lt;br /&gt;
  have &amp;quot;es_abc profundidad t ⟷ es_abc nodos t&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume a1: &amp;quot;es_abc profundidad t&amp;quot;&lt;br /&gt;
    have &amp;quot;∀t. ∃n. n = profundidad t&amp;quot; by auto&lt;br /&gt;
    then obtain n where &amp;quot;n = profundidad t&amp;quot; by auto&lt;br /&gt;
    with a1 have 1:&amp;quot;t= abc n&amp;quot; using auxprof by auto&lt;br /&gt;
    thus &amp;quot;es_abc nodos t&amp;quot; using auxnodo by auto&lt;br /&gt;
    next&lt;br /&gt;
    show &amp;quot;es_abc nodos t ⟹ es_abc profundidad t&amp;quot; &lt;br /&gt;
      apply (induct t, auto)&lt;br /&gt;
      proof -&lt;br /&gt;
        fix t1 t2 &lt;br /&gt;
        assume a1: &amp;quot;es_abc profundidad t1&amp;quot;&lt;br /&gt;
        thus &amp;quot;es_abc profundidad t2 ⟹&lt;br /&gt;
              es_abc nodos t1 ⟹&lt;br /&gt;
              es_abc nodos t2 ⟹&lt;br /&gt;
              nodos t1 = nodos t2 ⟹&lt;br /&gt;
              profundidad t1 = profundidad t2&amp;quot; &lt;br /&gt;
        proof -&lt;br /&gt;
          assume a2: &amp;quot;es_abc profundidad t2&amp;quot;&lt;br /&gt;
          thus &amp;quot;es_abc nodos t1 ⟹&lt;br /&gt;
                es_abc nodos t2 ⟹&lt;br /&gt;
                nodos t1 = nodos t2 ⟹&lt;br /&gt;
                profundidad t1 = profundidad t2&amp;quot;&lt;br /&gt;
          proof-&lt;br /&gt;
            assume a3: &amp;quot;es_abc nodos t1&amp;quot;&lt;br /&gt;
            thus &amp;quot;es_abc nodos t2 ⟹&lt;br /&gt;
                  nodos t1 = nodos t2 ⟹&lt;br /&gt;
                  profundidad t1 = profundidad t2&amp;quot;&lt;br /&gt;
            proof-&lt;br /&gt;
              assume a4: &amp;quot;es_abc nodos t2&amp;quot;&lt;br /&gt;
              thus &amp;quot;nodos t1 = nodos t2 ⟹&lt;br /&gt;
                    profundidad t1 = profundidad t2&amp;quot; &lt;br /&gt;
              proof -&lt;br /&gt;
                assume a5: &amp;quot;nodos t1 = nodos t2&amp;quot;&lt;br /&gt;
                thus &amp;quot;profundidad t1 = profundidad t2&amp;quot;&lt;br /&gt;
                proof -&lt;br /&gt;
                  obtain n where 1: &amp;quot;profundidad t1 = n&amp;quot; by auto&lt;br /&gt;
                  with a1 have 2: &amp;quot;t1 = abc n&amp;quot; using auxprof by auto&lt;br /&gt;
                  hence 3: &amp;quot;es_abc nodos t1&amp;quot; using auxnodo by auto&lt;br /&gt;
                  have &amp;quot;nodos t1 = (2::nat)^n - 1&amp;quot; &lt;br /&gt;
                    using 2 auxnodo by auto&lt;br /&gt;
                  hence 3:&amp;quot;nodos t2 =  (2::nat)^n - 1&amp;quot; using a5 by auto&lt;br /&gt;
                  obtain m where 4: &amp;quot;profundidad t2 = m&amp;quot; by auto&lt;br /&gt;
                  with a2 have 5:&amp;quot;t2 = abc m&amp;quot;using auxprof by auto&lt;br /&gt;
                  hence 6:&amp;quot;es_abc nodos t2&amp;quot; using auxnodo by auto&lt;br /&gt;
                  have &amp;quot;nodos t2 =  (2::nat)^m - 1&amp;quot; &lt;br /&gt;
                    using 5 auxnodo by auto&lt;br /&gt;
                  with 3 have 7: &amp;quot;(2::nat)^m - 1 =  (2::nat) ^n - 1&amp;quot; &lt;br /&gt;
                    by auto&lt;br /&gt;
                  hence &amp;quot;m = n&amp;quot; &lt;br /&gt;
                  proof -&lt;br /&gt;
                    have &amp;quot; (2::nat)^m - 1 =  (2::nat) ^n - 1&amp;quot;&lt;br /&gt;
                      using 7 by auto&lt;br /&gt;
                    hence &amp;quot;(2::nat)^m - 1 + 1 =  (2::nat) ^n&amp;quot; by auto&lt;br /&gt;
                    hence &amp;quot;(2::nat)^m  =  (2::nat) ^n&amp;quot; by auto&lt;br /&gt;
                    thus ?thesis apply (induct, auto)done&lt;br /&gt;
                  qed&lt;br /&gt;
                hence &amp;quot;t2 = abc n&amp;quot; using 5 by auto&lt;br /&gt;
                with 2 have &amp;quot;t1= t2&amp;quot; by auto&lt;br /&gt;
                thus &amp;quot;profundidad t1 = profundidad t2&amp;quot; by auto&lt;br /&gt;
                qed&lt;br /&gt;
              qed&lt;br /&gt;
            qed&lt;br /&gt;
          qed&lt;br /&gt;
        qed&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
    with 1 2 show ?thesis by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* jeshorcob: aquí similar*)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jeshorcob&amp;quot;&lt;br /&gt;
lemma a2: &lt;br /&gt;
  assumes &amp;quot;es_abc size a&amp;quot;&lt;br /&gt;
  shows &amp;quot;hojas a = (size a) + 1&amp;quot;&lt;br /&gt;
using assms &lt;br /&gt;
by (induct a, simp_all)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jeshorcob&amp;quot;&lt;br /&gt;
lemma chojas_cnodos: &amp;quot;es_abc hojas a = es_abc size a&amp;quot;&lt;br /&gt;
by (induct a, auto simp add: a2)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jeshorcob&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc hojas a = es_abc size a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  show &amp;quot;?P H&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix i d&lt;br /&gt;
  assume h1: &amp;quot;?P i&amp;quot;&lt;br /&gt;
  assume h2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;es_abc hojas (N i d) = &lt;br /&gt;
        (hojas i = hojas d ∧ es_abc hojas i ∧ es_abc hojas d )&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;… = (hojas i = hojas d ∧ es_abc size i ∧ es_abc size d)&amp;quot;&lt;br /&gt;
    using h1 and h2 by simp&lt;br /&gt;
  also have &amp;quot;... = (size i = size d ∧ es_abc size i ∧ es_abc size d)&amp;quot; &lt;br /&gt;
    using a2 by auto&lt;br /&gt;
  also have &amp;quot;... = es_abc size (N i d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N i d)&amp;quot; by simp &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;domcadgom&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma aux2: &amp;quot;es_abc size a ⟹ (hojas a = size a + 1)&amp;quot;&lt;br /&gt;
by (induct a, simp_all)&lt;br /&gt;
&lt;br /&gt;
lemma completo2: &amp;quot;es_abc hojas a = es_abc (size) a&amp;quot;&lt;br /&gt;
proof (induct a, simp)&lt;br /&gt;
 fix a1 :: arbol and a2 :: arbol&lt;br /&gt;
  assume a1: &amp;quot;es_abc hojas a1 = es_abc size a1&amp;quot;&lt;br /&gt;
  assume a2: &amp;quot;es_abc hojas a2 = es_abc size a2&amp;quot;&lt;br /&gt;
  hence &amp;quot;es_abc size a2 ∧ es_abc size a1 ⟶ &lt;br /&gt;
         es_abc hojas (N a1 a2) = es_abc size (N a1 a2)&amp;quot; &lt;br /&gt;
    using a1 by (simp add: aux2)&lt;br /&gt;
  thus &amp;quot;es_abc hojas (N a1 a2) = es_abc size (N a1 a2)&amp;quot; &lt;br /&gt;
    using a1 a2 es_abc.simps(2) by blast&lt;br /&gt;
qed &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juacorvic&amp;quot;&lt;br /&gt;
(* número de hojas es size + 1 *)&lt;br /&gt;
lemma l_hojas_size: &amp;quot;hojas x = size x + 1&amp;quot;&lt;br /&gt;
proof (induct x)&lt;br /&gt;
  show &amp;quot; hojas H = size H + 1&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
  fix x1 x2&lt;br /&gt;
  assume h1: &amp;quot;hojas x1 = size x1 + 1&amp;quot;&lt;br /&gt;
  assume h2:&amp;quot;hojas x2 = size x2 + 1&amp;quot;&lt;br /&gt;
  have &amp;quot;hojas (N x1 x2) =  hojas x1 + hojas x2&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = size x1 + 1 + size x2 + 1&amp;quot; using h1 h2 by simp&lt;br /&gt;
  also have &amp;quot;... =  (1 + size x1 + size x2) + 1&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = size (N x1 x2) + 1&amp;quot; by simp&lt;br /&gt;
  finally show  &amp;quot;hojas (N x1 x2) = size (N x1 x2) + 1&amp;quot; by simp &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juacorvic&amp;quot;&lt;br /&gt;
(* usando lema anterior *)&lt;br /&gt;
lemma rel_size_igualdad: &amp;quot; es_abc size  a = es_abc hojas a&amp;quot;&lt;br /&gt;
by (induct a, simp_all add: l_hojas_size)&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* Pedrosrei. De hecho, esta es una parte de la anterior: *)&lt;br /&gt;
&lt;br /&gt;
lemma prof_eq_nodos: &amp;quot;es_abc profundidad t ⟷ es_abc nodos t&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume a1: &amp;quot;es_abc profundidad t&amp;quot;&lt;br /&gt;
  have &amp;quot;∀t. ∃n. n = profundidad t&amp;quot; by auto&lt;br /&gt;
  then obtain n where &amp;quot;n = profundidad t&amp;quot; by auto&lt;br /&gt;
  with a1 have 1:&amp;quot;t= abc n&amp;quot; using auxprof by auto&lt;br /&gt;
  thus &amp;quot;es_abc nodos t&amp;quot; using auxnodo by auto&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;es_abc nodos t ⟹ es_abc profundidad t&amp;quot; &lt;br /&gt;
    apply (induct t, auto)&lt;br /&gt;
    proof -&lt;br /&gt;
      fix t1 t2 &lt;br /&gt;
      assume a1: &amp;quot;es_abc profundidad t1&amp;quot;&lt;br /&gt;
      thus &amp;quot;es_abc profundidad t2 ⟹&lt;br /&gt;
            es_abc nodos t1 ⟹&lt;br /&gt;
            es_abc nodos t2 ⟹&lt;br /&gt;
            nodos t1 = nodos t2 ⟹&lt;br /&gt;
            profundidad t1 = profundidad t2&amp;quot; &lt;br /&gt;
      proof -&lt;br /&gt;
        assume a2: &amp;quot;es_abc profundidad t2&amp;quot;&lt;br /&gt;
        thus &amp;quot;es_abc nodos t1 ⟹&lt;br /&gt;
              es_abc nodos t2 ⟹&lt;br /&gt;
              nodos t1 = nodos t2 ⟹&lt;br /&gt;
              profundidad t1 = profundidad t2&amp;quot;&lt;br /&gt;
        proof-&lt;br /&gt;
          assume a3: &amp;quot;es_abc nodos t1&amp;quot;&lt;br /&gt;
          thus &amp;quot;es_abc nodos t2 ⟹&lt;br /&gt;
                nodos t1 = nodos t2 ⟹&lt;br /&gt;
                profundidad t1 = profundidad t2&amp;quot;&lt;br /&gt;
          proof-&lt;br /&gt;
            assume a4: &amp;quot;es_abc nodos t2&amp;quot;&lt;br /&gt;
            thus &amp;quot;nodos t1 = nodos t2 ⟹&lt;br /&gt;
                  profundidad t1 = profundidad t2&amp;quot; &lt;br /&gt;
            proof -&lt;br /&gt;
              assume a5: &amp;quot;nodos t1 = nodos t2&amp;quot;&lt;br /&gt;
              thus &amp;quot;profundidad t1 = profundidad t2&amp;quot;&lt;br /&gt;
              proof -&lt;br /&gt;
                obtain n where 1:&amp;quot;profundidad t1 = n&amp;quot; by auto&lt;br /&gt;
                with a1 have 2:&amp;quot;t1 = abc n&amp;quot;using auxprof by auto&lt;br /&gt;
                hence 3:&amp;quot;es_abc nodos t1&amp;quot; using auxnodo by auto&lt;br /&gt;
                have &amp;quot;nodos t1 = (2::nat)^n - 1&amp;quot; using 2 auxnodo by auto&lt;br /&gt;
                hence 3:&amp;quot;nodos t2 =  (2::nat)^n - 1&amp;quot; using a5 by auto&lt;br /&gt;
                obtain m where 4:&amp;quot;profundidad t2 = m&amp;quot; by auto&lt;br /&gt;
                with a2 have 5:&amp;quot;t2 = abc m&amp;quot;using auxprof by auto&lt;br /&gt;
                hence 6:&amp;quot;es_abc nodos t2&amp;quot; using auxnodo by auto&lt;br /&gt;
                have &amp;quot;nodos t2 = (2::nat)^m - 1&amp;quot; using 5 auxnodo by auto&lt;br /&gt;
               with 3 have 7:&amp;quot; (2::nat)^m - 1 = (2::nat) ^n - 1&amp;quot; by auto&lt;br /&gt;
               hence &amp;quot;m = n&amp;quot; &lt;br /&gt;
               proof -&lt;br /&gt;
                 have &amp;quot; (2::nat)^m - 1 = (2::nat) ^n - 1&amp;quot;using 7 by auto&lt;br /&gt;
                 hence &amp;quot;(2::nat)^m - 1 + 1 =  (2::nat) ^n&amp;quot; by auto&lt;br /&gt;
                 hence &amp;quot;(2::nat)^m  =  (2::nat) ^n&amp;quot; by auto&lt;br /&gt;
                 thus ?thesis apply (induct, auto)done&lt;br /&gt;
               qed&lt;br /&gt;
               hence &amp;quot;t2 = abc n&amp;quot; using 5 by auto&lt;br /&gt;
               with 2 have &amp;quot;t1= t2&amp;quot; by auto&lt;br /&gt;
               thus &amp;quot;profundidad t1 = profundidad t2&amp;quot; by auto&lt;br /&gt;
               qed&lt;br /&gt;
             qed&lt;br /&gt;
           qed&lt;br /&gt;
         qed&lt;br /&gt;
       qed&lt;br /&gt;
   qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(*jeshorcob: sale directo como corolario de los anteriores*)&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;jeshorcob,carvelcab&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc pr1 a = es_abc size a&amp;quot;&lt;br /&gt;
using cpr1_chojas and chojas_cnodos by simp_all&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;domcadgom&amp;quot;&lt;br /&gt;
corollary completo3: &amp;quot;es_abc profundidad a = es_abc size a&amp;quot;&lt;br /&gt;
 using completo1 completo2 by simp&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juacorvic&amp;quot;&lt;br /&gt;
(* 1.- En apartado 7 se demuestra que:&lt;br /&gt;
          es_abc profundidad a ⟷ es_abc hojas a&lt;br /&gt;
   2.- En apartado 8 se demuestra que:&lt;br /&gt;
          es_abc hojas a ⟷ es_abc size  a &lt;br /&gt;
   3.- Luego podremos demostrar usando las anteriores:&lt;br /&gt;
          es_abc profundidad a ⟷ es_abc size  a &lt;br /&gt;
&lt;br /&gt;
   Nota: Aplico demostración de &amp;quot;domcadgom&amp;quot; de apartado 7, que no he&lt;br /&gt;
   conseguido reproducir *)  &lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;es_abc profundidad a = es_abc size a&amp;quot;&lt;br /&gt;
using completo1 rel_size_igualdad by simp_all&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que (abc n) es un árbol binario completo.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Pedrosrei&amp;quot;&lt;br /&gt;
lemma &amp;quot; es_abc f (abc n)&amp;quot;&lt;br /&gt;
apply (induct n, auto) &lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jeshorcob, davoremar, domcadgom, carvelcab, juacorvic&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc f (abc n)&amp;quot;&lt;br /&gt;
by (induct n, simp_all)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jeshorcob&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc f (abc n)&amp;quot; (is &amp;quot;?P n&amp;quot;)&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;?P 0&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n assume h: &amp;quot;?P n&amp;quot;&lt;br /&gt;
  have &amp;quot;es_abc f (abc (Suc n)) = es_abc f (N (abc n) (abc n))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (f (abc n) = f (abc n) ∧ &lt;br /&gt;
                   es_abc f (abc n) ∧ es_abc f (abc n))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = True&amp;quot; using h by simp&lt;br /&gt;
  finally show &amp;quot;?P (Suc n)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juacorvic&amp;quot;&lt;br /&gt;
(* Más detallada *)&lt;br /&gt;
lemma &amp;quot;es_abc f (abc n)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot; es_abc f (abc 0)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n &lt;br /&gt;
  assume h1: &amp;quot;es_abc f (abc n)&amp;quot;&lt;br /&gt;
  have &amp;quot;es_abc f (abc (Suc n)) = es_abc f (N (abc n) (abc n))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (es_abc f (abc n) ∧ es_abc f (abc n) ∧ &lt;br /&gt;
                    (f (abc n) = f (abc n)))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (f (abc n) = f (abc n) )&amp;quot; using h1 by simp&lt;br /&gt;
  also have &amp;quot;... = True &amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;es_abc f (abc n) ⟹ es_abc f (abc (Suc n))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que si a es un árbolo binario completo&lt;br /&gt;
  respecto de la profundidad, entonces a es (abc (profundidad a)).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;Pedrosrei:&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc profundidad a ⟹ (a = abc (profundidad a))&amp;quot;&lt;br /&gt;
apply (induct a, auto) &lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;jeshorcob&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc pr1 a ⟹ (a = abc (pr1 a))&amp;quot;&lt;br /&gt;
by (induct a, simp_all)&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;davoremar, domcadgom&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc profundidad a ⟹ (a = abc (profundidad a))&amp;quot;&lt;br /&gt;
by (induct a, simp_all)&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;juacorvic&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc profundidad a  ⟹ a = abc (profundidad a)&amp;quot;&lt;br /&gt;
by (induct a, simp_all)&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Encontrar una medida f tal que (es_abc f) es distinto de &lt;br /&gt;
  (es_abc size).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
--&amp;quot;Pedrosrei:&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc f = es_abc nodos&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
(*&lt;br /&gt;
El contraejemplo no es más que una medida constante, la trivial:&lt;br /&gt;
&lt;br /&gt;
Quickchecking... &lt;br /&gt;
Testing conjecture with Quickcheck-exhaustive... &lt;br /&gt;
Quickcheck found a counterexample:&lt;br /&gt;
&lt;br /&gt;
f = λx. a⇣1&lt;br /&gt;
x = N H (N H H)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
es_abc f x = True&lt;br /&gt;
es_abc R8_Arboles_binarios_completos.size x = False&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
(* jeshorcob: usando size en lugar de nodos, se encuentra el mismo&lt;br /&gt;
   contraejemplo. *) &lt;br /&gt;
--&amp;quot;jeshorcob, domcadgom&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc f = es_abc size&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
(*&lt;br /&gt;
el contraejemplo es:&lt;br /&gt;
&lt;br /&gt;
f = λx. a⇩1&lt;br /&gt;
x = N H (N H H)&lt;br /&gt;
&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
es_abc f x = True&lt;br /&gt;
es_abc size x = False&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;davoremar&amp;quot;&lt;br /&gt;
lemma &amp;quot;es_abc f t = es_abc size t&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;juacorvic&amp;quot;&lt;br /&gt;
fun medida :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;medida H = 0&amp;quot;&lt;br /&gt;
| &amp;quot;medida (N i d) = 0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;es_abc medida a = es_abc size a&amp;quot;&lt;br /&gt;
quickcheck&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
(*Contraejemplo&lt;br /&gt;
value &amp;quot;es_abc medida (N H (N H H))&amp;quot; (*devuelve true*)&lt;br /&gt;
value &amp;quot;es_abc size (N H (N H H))&amp;quot;   (*devuelve false*)&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Relaci%C3%B3n_10&amp;diff=246</id>
		<title>Relación 10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Relaci%C3%B3n_10&amp;diff=246"/>
		<updated>2014-12-18T10:13:31Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* R10: Formalización y argumentación con Isabelle/HOL *}  theory R10 imports Main  begin  text {*   ----------------------------------------------...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R10: Formalización y argumentación con Isabelle/HOL *}&lt;br /&gt;
&lt;br /&gt;
theory R10&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta es relación formalizar y demostrar la corrección&lt;br /&gt;
  de los argumentos usando sólo las reglas básicas de deducción natural&lt;br /&gt;
  de la lógica (sin usar el método auto). &lt;br /&gt;
&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
&lt;br /&gt;
  · allI:       ⟦∀x. P x; P x ⟹ R⟧ ⟹ R&lt;br /&gt;
  · allE:       (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
  · exI:        P x ⟹ ∃x. P x&lt;br /&gt;
  · exE:        ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&lt;br /&gt;
&lt;br /&gt;
  · refl:       t = t&lt;br /&gt;
  · subst:      ⟦s = t; P s⟧ ⟹ P t&lt;br /&gt;
  · trans:      ⟦r = s; s = t⟧ ⟹ r = t&lt;br /&gt;
  · sym:        s = t ⟹ t = s&lt;br /&gt;
  · not_sym:    t ≠ s ⟹ s ≠ t&lt;br /&gt;
  · ssubst:     ⟦t = s; P s⟧ ⟹ P t&lt;br /&gt;
  · box_equals: ⟦a = b; a = c; b = d⟧ ⟹ a: = d&lt;br /&gt;
  · arg_cong:   x = y ⟹ f x = f y&lt;br /&gt;
  · fun_cong:   f = g ⟹ f x = g x&lt;br /&gt;
  · cong:       ⟦f = g; x = y⟧ ⟹ f x = g y&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI, mt, no_ex y no_para_todo que demostramos&lt;br /&gt;
  a continuación. &lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma no_ex: &amp;quot;¬(∃x. P(x)) ⟹ ∀x. ¬P(x)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma no_para_todo: &amp;quot;¬(∀x. P(x)) ⟹ ∃x. ¬P(x)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     Si no está el mañana ni el ayer escrito, entonces no está el mañana&lt;br /&gt;
     escrito. &lt;br /&gt;
  Usar M: El mañana está escrito.&lt;br /&gt;
       A: El ayer está escrito.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Siempre que un número x es divisible por 10, acaba en 0. El número&lt;br /&gt;
     x no acaba en 0. Por lo tanto, x no es divisible por 10. &lt;br /&gt;
  Usar D para &amp;quot;el número es divisible por 10&amp;quot; y&lt;br /&gt;
       C para &amp;quot;el número acaba en cero&amp;quot;.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si no hay control de nacimientos, entonces la población crece&lt;br /&gt;
     ilimitadamente; pero si la población crece ilimitadamente,&lt;br /&gt;
     aumentará el índice de pobreza. Por consiguiente, si no hay control&lt;br /&gt;
     de nacimientos, aumentará el índice de pobreza. &lt;br /&gt;
  Usar N: Hay control de nacimientos. &lt;br /&gt;
       P: La población crece ilimitadamente,&lt;br /&gt;
       I: Aumentará el índice de pobreza. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si te llamé por teléfono, entonces recibiste mi llamada y no es&lt;br /&gt;
     cierto que no te avisé del peligro que corrías. Por consiguiente,&lt;br /&gt;
     como te llamé, es cierto que te avisé del peligro que corrías.&lt;br /&gt;
  Usar T: Te llamé por teléfono.&lt;br /&gt;
       R: Recibiste mi llamada.&lt;br /&gt;
       P: Te avisé del peligro que corrías.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si la válvula está abierta o la monitorización está preparada,&lt;br /&gt;
     entonces se envía una señal de reconocimiento y un mensaje de&lt;br /&gt;
     funcionamiento al controlador del ordenador. Si se envía un mensaje &lt;br /&gt;
     de funcionamiento al controlador del ordenador o el sistema está en &lt;br /&gt;
     estado normal, entonces se aceptan las órdenes del operador. Por lo&lt;br /&gt;
     tanto, si la válvula está abierta, entonces se aceptan las órdenes&lt;br /&gt;
     del operador. &lt;br /&gt;
  Usar A : La válvula está abierta.&lt;br /&gt;
       P : La monitorización está preparada.&lt;br /&gt;
       R : Envía una señal de reconocimiento.&lt;br /&gt;
       F : Envía un mensaje de funcionamiento.&lt;br /&gt;
       N : El sistema está en estado normal.&lt;br /&gt;
       O : Se aceptan órdenes del operador.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Cuando tanto la temperatura como la presión atmosférica permanecen&lt;br /&gt;
     contantes, no llueve. La temperatura permanece constante. Por lo&lt;br /&gt;
     tanto, en caso de que llueva, la presión atmosférica no permanece&lt;br /&gt;
     constante. &lt;br /&gt;
  Usar T para &amp;quot;La temperatura permanece constante&amp;quot;,&lt;br /&gt;
       P para &amp;quot;La presión atmosférica permanece constante&amp;quot; y&lt;br /&gt;
       L para &amp;quot;Llueve&amp;quot;.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si el general era leal, hubiera obedecido las órdenes, y si era&lt;br /&gt;
     inteligente las hubiera comprendido. O el general desobedeció las&lt;br /&gt;
     órdenes o no las comprendió. Luego, el general era desleal o no era&lt;br /&gt;
     inteligente. &lt;br /&gt;
  Usar L:  El general es leal.&lt;br /&gt;
       Ob: El general obedece las órdenes.&lt;br /&gt;
       I:  El general es inteligente.&lt;br /&gt;
       C:  El general comprende las órdenes.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Me matan si no trabajo y si trabajo me matan. Me matan siempre me&lt;br /&gt;
     matan. &lt;br /&gt;
  Usar M: Me matan.&lt;br /&gt;
       T: Trabajo.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     En cierto experimento, cuando hemos empleado un fármaco A, el&lt;br /&gt;
     paciente ha mejorado considerablemente en el caso, y sólo en el&lt;br /&gt;
     caso, en que no se haya empleado también un fármaco B. Además, o se&lt;br /&gt;
     ha empleado el fármaco A o se ha empleado el fármaco B. En&lt;br /&gt;
     consecuencia, podemos afirmar que si no hemos empleado el fármaco&lt;br /&gt;
     B, el paciente ha mejorado considerablemente. &lt;br /&gt;
  Usar A: Hemos empleado el fármaco A.&lt;br /&gt;
       B: Hemos empleado el fármaco B.&lt;br /&gt;
       M: El paciente ha mejorado notablemente.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si trabajo gano dinero, pero si no trabajo gozo de la vida. Sin&lt;br /&gt;
     embargo, si trabajo no gozo de la vida, mientras que si no trabajo&lt;br /&gt;
     no gano dinero. Por lo tanto, gozo de la vida si y sólo si no gano&lt;br /&gt;
  dinero. &lt;br /&gt;
  Usar p: Trabajo&lt;br /&gt;
       q: Gano dinero.&lt;br /&gt;
       r: Gozo de la vida.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si Dios fuera capaz de evitar el mal y quisiera hacerlo, lo&lt;br /&gt;
     haría. Si Dios fuera incapaz de evitar el mal, no sería&lt;br /&gt;
     omnipotente; si no quisiera evitar el mal sería malévolo. Dios no&lt;br /&gt;
     evita el mal. Si Dios existe, es omnipotente y no es&lt;br /&gt;
     malévolo. Luego, Dios no existe. &lt;br /&gt;
  Usar C:  Dios es capaz de evitar el mal.&lt;br /&gt;
       Q:  Dios quiere evitar el mal.&lt;br /&gt;
       Om: Dios es omnipotente.&lt;br /&gt;
       M:  Dios es malévolo.&lt;br /&gt;
       P:  Dios evita el mal.&lt;br /&gt;
       E:  Dios existe.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Sócrates es un hombre. &lt;br /&gt;
     Los hombres son mortales. &lt;br /&gt;
     Luego, Sócrates es mortal.&lt;br /&gt;
  Usar s    para Sócrates&lt;br /&gt;
       H(x) para x es un hombre          &lt;br /&gt;
       M(x) para x es mortal&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Hay estudiantes inteligentes y hay estudiantes trabajadores. Por&lt;br /&gt;
     tanto, hay estudiantes inteligentes y trabajadores.&lt;br /&gt;
  Usar I(x) para x es inteligente&lt;br /&gt;
       T(x) para x es trabajador&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todos los participantes son vencedores. Hay como máximo un&lt;br /&gt;
     vencedor. Hay como máximo un participante. Por lo tanto, hay&lt;br /&gt;
     exactamente un participante. &lt;br /&gt;
  Usar P(x) para x es un participante&lt;br /&gt;
       V(x) para x es un vencedor&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todo aquel que entre en el país y no sea un VIP será cacheado por&lt;br /&gt;
     un aduanero. Hay un contrabandista que entra en el país y que solo&lt;br /&gt;
     podrá ser cacheado por contrabandistas. Ningún contrabandista es un&lt;br /&gt;
     VIP. Por tanto, algún aduanero es contrabandista.&lt;br /&gt;
  Usar A(x)    para x es aduanero&lt;br /&gt;
       Ca(x,y) para x cachea a y&lt;br /&gt;
       Co(x)   para x es contrabandista&lt;br /&gt;
       E(x)    para x entra en el pais&lt;br /&gt;
       V(x)    para x es un VIP&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Juan teme a María. Pedro es temido por Juan. Luego, alguien teme a&lt;br /&gt;
     María y a Pedro.&lt;br /&gt;
  Usar j      para Juan  &lt;br /&gt;
       m      para María&lt;br /&gt;
       p      para Pedro&lt;br /&gt;
       T(x,y) para x teme a y&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Los hermanos tienen el mismo padre. Juan es hermano de Luis. Carlos&lt;br /&gt;
     es padre de Luis. Por tanto, Carlos es padre de Juan.&lt;br /&gt;
  Usar H(x,y) para x es hermano de y&lt;br /&gt;
       P(x,y) para x es padre de y&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     La existencia de algún canal de TV pública, supone un acicate para&lt;br /&gt;
     cualquier canal de TV privada; el que un canal de TV tenga un&lt;br /&gt;
     acicate, supone una gran satisfacción para cualquiera de sus&lt;br /&gt;
     directivos; en Madrid hay varios canales públicos de TV; TV5 es un&lt;br /&gt;
     canal de TV privada; por tanto, todos los directivos de TV5 están&lt;br /&gt;
     satisfechos. &lt;br /&gt;
  Usar Pu(x)  para x es un canal de TV pública&lt;br /&gt;
       Pr(x)  para x es un canal de TV privada&lt;br /&gt;
       A(x)   para x posee un acicate&lt;br /&gt;
       D(x,y) para x es un directivo del canal y&lt;br /&gt;
       S(x)   para x está satisfecho &lt;br /&gt;
       t      para TV5&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Quien intente entrar en un país y no tenga pasaporte, encontrará&lt;br /&gt;
     algún aduanero que le impida el paso. A algunas personas&lt;br /&gt;
     motorizadas que intentan entrar en un país le impiden el paso&lt;br /&gt;
     únicamente personas motorizadas. Ninguna persona motorizada tiene&lt;br /&gt;
     pasaporte. Por tanto, ciertos aduaneros están motorizados.&lt;br /&gt;
  Usar E(x)   para x entra en un país&lt;br /&gt;
       P(x)   para x tiene pasaporte&lt;br /&gt;
       A(x)   para x es aduanero&lt;br /&gt;
       I(x,y) para x impide el paso a y&lt;br /&gt;
       M(x)   para x está motorizada&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Los aficionados al fútbol aplauden a cualquier futbolista&lt;br /&gt;
     extranjero. Juanito no aplaude a futbolistas extranjeros. Por&lt;br /&gt;
     tanto, si hay algún futbolista extranjero nacionalizado español,&lt;br /&gt;
     Juanito no es aficionado al fútbol.&lt;br /&gt;
  Usar Af(x)   para x es aficicionado al fútbol&lt;br /&gt;
       Ap(x,y) para x aplaude a y&lt;br /&gt;
       E(x)    para x es un futbolista extranjero&lt;br /&gt;
       N(x)    para x es un futbolista nacionalizado español&lt;br /&gt;
       j       para Juanito&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Ningún aristócrata debe ser condenado a galeras a menos que sus&lt;br /&gt;
     crímenes sean vergonzosos y lleve una vida licenciosa. En la ciudad&lt;br /&gt;
     hay aristócratas que han cometido crímenes vergonzosos aunque su&lt;br /&gt;
     forma de vida no sea licenciosa. Por tanto, hay algún aristócrata&lt;br /&gt;
     que no está condenado a galeras. &lt;br /&gt;
  Usar A(x)  para x es aristócrata&lt;br /&gt;
       G(x)  para x está condenado a galeras&lt;br /&gt;
       L(x)  para x lleva una vida licenciosa&lt;br /&gt;
       V(x)  para x ha cometido crímenes vergonzoso&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todo individuo que esté conforme con el contenido de cualquier&lt;br /&gt;
     acuerdo internacional lo apoya o se inhibe en absoluto de asuntos&lt;br /&gt;
     políticos. Cualquiera que se inhiba de los asuntos políticos, no&lt;br /&gt;
     participará en el próximo referéndum. Todo español, está conforme&lt;br /&gt;
     con el acuerdo internacional de Maastricht, al que sin embargo no&lt;br /&gt;
     apoya. Por tanto, cualquier individuo o no es español, o en otro&lt;br /&gt;
     caso, está conforme con el contenido del acuerdo internacional de&lt;br /&gt;
     Maastricht y no participará en el próximo referéndum. &lt;br /&gt;
  Usar C(x,y) para la persona x conforme con el contenido del acuerdo y&lt;br /&gt;
       A(x,y) para la persona x apoya el acuerdo y&lt;br /&gt;
       I(x)   para la persona x se inibe de asuntos políticos&lt;br /&gt;
       R(x)   para la persona x participará en el próximo referéndum&lt;br /&gt;
       E(x)   para la persona x es española&lt;br /&gt;
       m      para el acuerdo de Maastricht&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Toda persona pobre tiene un padre rico. Por tanto, existe una&lt;br /&gt;
     persona rica que tiene un abuelo rico.&lt;br /&gt;
  Usar R(x) para x es rico&lt;br /&gt;
       p(x) para el padre de x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todo deprimido que estima a un submarinista es listo. Cualquiera&lt;br /&gt;
     que se estime a sí mismo es listo. Ningún deprimido se estima a sí&lt;br /&gt;
     mismo. Por tanto, ningún deprimido estima a un submarinista.&lt;br /&gt;
  Usar D(x)   para x está deprimido&lt;br /&gt;
       E(x,y) para x estima a y&lt;br /&gt;
       L(x)   para x es listo&lt;br /&gt;
       S(x)   para x es submarinista&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todos los robots obedecen a los amigos del programador jefe.&lt;br /&gt;
     Alvaro es amigo del programador jefe, pero Benito no le&lt;br /&gt;
     obedece. Por tanto, Benito no es un robot.&lt;br /&gt;
  Usar R(x)    para x es un robot&lt;br /&gt;
       Ob(x,y) para x obedece a y&lt;br /&gt;
       A(x)    para x es amigo del programador jefe&lt;br /&gt;
       b       para Benito&lt;br /&gt;
       a       para Alvaro&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     En una pecera nadan una serie de peces. Se observa que:&lt;br /&gt;
     * Hay algún pez x que para cualquier pez y, si el pez x no se come&lt;br /&gt;
       al pez y entonces existe un pez z tal que z es un tiburón o bien&lt;br /&gt;
       z protege al pez y. &lt;br /&gt;
     * No hay ningún pez que se coma a todos los demás.&lt;br /&gt;
     * Ningún pez protege a ningún otro.&lt;br /&gt;
     Por tanto, existe algún tiburón en la pecera.&lt;br /&gt;
  Usar C(x,y) para x se come a y &lt;br /&gt;
       P(x,y) para x protege a y&lt;br /&gt;
       T(x)   para x es un tiburón&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Supongamos conocidos los siguientes hechos acerca del número de&lt;br /&gt;
     aprobados de dos asignaturas A y B: &lt;br /&gt;
     * Si todos los alumnos aprueban la asignatura A, entonces todos&lt;br /&gt;
       aprueban la asignatura B.&lt;br /&gt;
     * Si algún delegado de la clase aprueba A y B, entonces todos los &lt;br /&gt;
       alumnos aprueban A.&lt;br /&gt;
     * Si nadie aprueba B, entonces ningún delegado aprueba A.&lt;br /&gt;
     * Si Manuel no aprueba B, entonces nadie aprueba B.&lt;br /&gt;
     Por tanto, si Manuel es un delegado y aprueba la asignatura A,&lt;br /&gt;
     entonces todos los alumnos aprueban las asignaturas A y B.&lt;br /&gt;
  Usar A(x,y) para x aprueba la asignatura y&lt;br /&gt;
       D(x)   para x es delegado&lt;br /&gt;
       m      para Manuel&lt;br /&gt;
       a      para la asignatura A&lt;br /&gt;
       b      para la asignatura B&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     En cierto país oriental se ha celebrado la fase final del&lt;br /&gt;
     campeonato mundial de fútbol. Cierto diario deportivo ha publicado&lt;br /&gt;
     las siguientes estadísticas de tan magno acontecimiento: &lt;br /&gt;
     * A todos los porteros que no vistieron camiseta negra les marcó un&lt;br /&gt;
       gol algún delantero europeo.  &lt;br /&gt;
     * Algún portero jugó con botas blancas y sólo le marcaron goles&lt;br /&gt;
       jugadores con botas blancas.  &lt;br /&gt;
     * Ningún portero se marcó un gol a sí mismo. &lt;br /&gt;
     * Ningún jugador con botas blancas vistió camiseta negra. &lt;br /&gt;
     Por tanto, algún delantero europeo jugó con botas blancas.&lt;br /&gt;
  Usar P(x)   para x es portero&lt;br /&gt;
       D(x)   para x es delantero europeo &lt;br /&gt;
       N(x)   para x viste camiseta negra&lt;br /&gt;
       B(x)   para x juega con botas blancas &lt;br /&gt;
       M(x,y) para x marcó un gol a y&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Las relaciones de parentesco verifican la siguientes propiedades&lt;br /&gt;
     generales:  &lt;br /&gt;
     * Si x es hermano de y, entonces y es hermano de x. &lt;br /&gt;
     * Todo el mundo es hijo de alguien. &lt;br /&gt;
     * Nadie es hijo del hermano de su padre. &lt;br /&gt;
     * Cualquier padre de una persona es también padre de todos los&lt;br /&gt;
       hermanos de esa persona. &lt;br /&gt;
     * Nadie es hijo ni hermano de sí mismo. &lt;br /&gt;
     Tenemos los siguientes miembros de la familia Peláez: Don Antonio,&lt;br /&gt;
     Don Luis, Antoñito y Manolito y sabemos que Don Antonio y Don Luis&lt;br /&gt;
     son hermanos, Antoñito y Manolito son hermanos, y Antoñito es hijo&lt;br /&gt;
     de Don Antonio. Por tanto, Don Luis no es el padre de Manolito.&lt;br /&gt;
  Usar A       para Don Antonio&lt;br /&gt;
       He(x,y) para x es hermano de y &lt;br /&gt;
       Hi(x,y) para x es hijo de y  &lt;br /&gt;
       L       para Don Luis&lt;br /&gt;
       a       para Antoñito&lt;br /&gt;
       m       para Manolito&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. [Problema del apisonador de Schubert (en inglés, &lt;br /&gt;
  &amp;quot;Schubert’s steamroller&amp;quot;)] Formalizar, y decidir la corrección, del&lt;br /&gt;
  siguiente argumento &lt;br /&gt;
     Si uno de los miembros del club afeita a algún otro (incluido a&lt;br /&gt;
     sí mismo), entonces todos los miembros del club lo han afeitado&lt;br /&gt;
     a él (aunque no necesariamente al mismo tiempo). Guido, Lorenzo,&lt;br /&gt;
     Petruccio y Cesare pertenecen al club de barberos. Guido ha&lt;br /&gt;
     afeitado a Cesare. Por tanto, Petruccio ha afeitado a Lorenzo.&lt;br /&gt;
  Usar g      para Guido&lt;br /&gt;
       l      para Lorenzo&lt;br /&gt;
       p      para Petruccio&lt;br /&gt;
       c      para Cesare&lt;br /&gt;
       B(x)   para x es un miembro del club de barberos&lt;br /&gt;
       A(x,y) para x ha afeitado a y&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Carlos afeita a todos los habitantes de Las Chinas que no se&lt;br /&gt;
     afeitan a sí mismo y sólo a ellos. Carlos es un habitante de las&lt;br /&gt;
     Chinas. Por consiguiente, Carlos no afeita a nadie.&lt;br /&gt;
  Usar A(x,y) para x afeita a y&lt;br /&gt;
       C(x)   para x es un habitante de Las Chinas&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     Quien desprecia a todos los fanáticos desprecia también a todos los&lt;br /&gt;
     políticos. Alguien no desprecia a un determinado político. Por&lt;br /&gt;
     consiguiente, hay un fanático al que no todo el mundo desprecia.&lt;br /&gt;
   Usar D(x,y) para x desprecia a y&lt;br /&gt;
        F(x)   para x es fanático&lt;br /&gt;
        P(x)   para x es político&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     El hombre puro ama todo lo que es puro. Por tanto, el hombre puro&lt;br /&gt;
     se ama a sí mismo.&lt;br /&gt;
  Usar A(x,y) para x ama a y&lt;br /&gt;
       H(x)   para x es un hombre&lt;br /&gt;
       P(x)   para x es puro&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     Ningún socio del club está en deuda con el tesorero del club. Si&lt;br /&gt;
     un socio del club no paga su cuota está en deuda con el tesorero&lt;br /&gt;
     del club. Por tanto, si el tesorero del club es socio del club,&lt;br /&gt;
     entonces paga su cuota. &lt;br /&gt;
  Usar P(x) para x es socio del club&lt;br /&gt;
       Q(x) para x paga su cuota&lt;br /&gt;
       R(x) para x está en deuda con el tesorero&lt;br /&gt;
       a    para el tesorero del club&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     1. Los lobos, zorros, pájaros, orugas y caracoles son animales y&lt;br /&gt;
        existen algunos ejemplares de estos animales. &lt;br /&gt;
     2. También hay algunas semillas y las semillas son plantas. &lt;br /&gt;
     3. A todo animal le gusta o bien comer todo tipo de plantas o bien&lt;br /&gt;
        le gusta comerse a todos los animales más pequeños que él mismo&lt;br /&gt;
        que gustan de comer algunas plantas. &lt;br /&gt;
     4. Las orugas y los caracoles son mucho más pequeños que los&lt;br /&gt;
        pájaros, que son mucho más pequeños que los zorros que a su vez&lt;br /&gt;
        son mucho más pequeños que los lobos. &lt;br /&gt;
     5. A los lobos no les gusta comer ni zorros ni semillas, mientras&lt;br /&gt;
        que a los pájaros les gusta comer orugas pero no caracoles. &lt;br /&gt;
     6. Las orugas y los caracoles gustan de comer algunas plantas. &lt;br /&gt;
     7. Luego, existe un animal al que le gusta comerse un animal al que&lt;br /&gt;
        le gusta comer semillas.  &lt;br /&gt;
  Usar A(x)    para x es un animal&lt;br /&gt;
       Ca(x)   para x es un caracol&lt;br /&gt;
       Co(x,y) para x le gusta comerse a y&lt;br /&gt;
       L(x)    para x es un lobo&lt;br /&gt;
       M(x,y)  para x es más pequeño que y&lt;br /&gt;
       Or(x)   para x es una oruga&lt;br /&gt;
       Pa(x)   para x es un pájaro&lt;br /&gt;
       Pl(x)   para x es una planta&lt;br /&gt;
       S(x)    para x es una semilla&lt;br /&gt;
       Z(x)    para x es un zorro&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Rosa ama a Curro. Paco no simpatiza con Ana. Quien no simpatiza con&lt;br /&gt;
     Ana ama a Rosa. Si una persona ama a otra, la segunda ama a la&lt;br /&gt;
     primera. Hay como máximo una persona que ama a Rosa. Por tanto,&lt;br /&gt;
     Paco es Curro. &lt;br /&gt;
  Usar A(x,y) para x ama a y &lt;br /&gt;
       S(x,y) para x simpatiza con y &lt;br /&gt;
       a      para Ana&lt;br /&gt;
       c      para Curro&lt;br /&gt;
       p      para Paco &lt;br /&gt;
       r      para Rosa&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Sólo hay un sofista que enseña gratuitamente, y éste es&lt;br /&gt;
     Sócrates. Sócrates argumenta mejor que ningún otro sofista. Platón&lt;br /&gt;
     argumenta mejor que algún sofista que enseña gratuitamente. Si una&lt;br /&gt;
     persona argumenta mejor que otra segunda, entonces la segunda no&lt;br /&gt;
     argumenta mejor que la primera. Por consiguiente, Platón no es un&lt;br /&gt;
     sofista. &lt;br /&gt;
  Usar G(x)   para x enseña gratuitamente&lt;br /&gt;
       M(x,y) para x argumenta mejor que y&lt;br /&gt;
       S(x)   para x es un sofista&lt;br /&gt;
       p      para Platón&lt;br /&gt;
       s      para Sócrates&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 38. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todos los filósofos se han preguntado qué es la filosofía. Los que&lt;br /&gt;
     se preguntan qué es la filosofía se vuelven locos. Nietzsche es&lt;br /&gt;
     filósofo. El maestro de Nietzsche no acabó loco. Por tanto,&lt;br /&gt;
     Nietzsche y su maestro son diferentes personas. &lt;br /&gt;
  Usar F(x) para x es filósofo&lt;br /&gt;
       L(x) para x se vuelve loco&lt;br /&gt;
       P(x) para x se ha preguntado qué es la filosofía.&lt;br /&gt;
       m    para el maestro de Nietzsche&lt;br /&gt;
       n    para Nietzsche&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 39. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Los padres son mayores que los hijos. Juan es el padre de Luis. Por&lt;br /&gt;
     tanto, Juan es mayor que Luis.&lt;br /&gt;
  Usar M(x,y) para x es mayor que y&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 40. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     El esposo de la hermana de Toni es Roberto. La hermana de Toni es&lt;br /&gt;
     María. Por tanto, el esposo de María es Roberto. &lt;br /&gt;
  Usar e(x) para el esposo de x&lt;br /&gt;
       h    para la hermana de Toni&lt;br /&gt;
       m    para María&lt;br /&gt;
       r    para Roberto&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 41. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Luis y Jaime tienen el mismo padre. La madre de Rosa es&lt;br /&gt;
     Eva. Eva ama a Carlos. Carlos es el padre de Jaime. Por tanto,&lt;br /&gt;
     la madre de Rosa ama al padre de Luis.&lt;br /&gt;
  Usar A(x,y) para x ama a y&lt;br /&gt;
       m(x)   para la madre de x&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
       e      para Eva&lt;br /&gt;
       j      para Jaime&lt;br /&gt;
       l      para Luis&lt;br /&gt;
       r      para Rosa&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 42. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si dos personas son hermanos, entonces tienen la misma madre y el&lt;br /&gt;
     mismo padre. Juan es hermano de Luis. Por tanto, la madre del padre&lt;br /&gt;
     de Juan es la madre del padre de Luis.&lt;br /&gt;
  Usar H(x,y) para x es hermano de y&lt;br /&gt;
       m(x)   para la madre de x&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 43. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todos los miembros del claustro son asturianos. El secretario forma&lt;br /&gt;
     parte del claustro. El señor Martínez es el secretario. Por tanto,&lt;br /&gt;
     el señor Martínez es asturiano.&lt;br /&gt;
  Usar C(x) para x es miembro del claustro&lt;br /&gt;
       A(x) para x es asturiano&lt;br /&gt;
       s    para el secretario&lt;br /&gt;
       m    para el señor Martínez&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 44. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Eduardo pudo haber visto al asesino. Antonio fue el primer testigo&lt;br /&gt;
     de la defensa. O Eduardo estaba en clase o Antonio dio falso&lt;br /&gt;
     testimonio. Nadie en clase pudo haber visto al asesino. Luego, el&lt;br /&gt;
     primer testigo de la defensa dio falso testimonio. &lt;br /&gt;
  Usar C(x) para x estaba en clase&lt;br /&gt;
       F(x) para x dio falso testimonio&lt;br /&gt;
       V(x) para x pudo haber visto al asesino&lt;br /&gt;
       a    para Antonio&lt;br /&gt;
       e    para Eduardo&lt;br /&gt;
       p    para el primer testigo de la defensa&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 45. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     La luna hoy es redonda. La luna de hace dos semanas tenía forma de&lt;br /&gt;
     cuarto creciente. Luna no hay más que una, es decir, siempre es la&lt;br /&gt;
     misma. Luego existe algo que es a la vez redondo y con forma de&lt;br /&gt;
     cuarto creciente. &lt;br /&gt;
  Usar L(x) para la luna del momento x&lt;br /&gt;
       R(x) para x es redonda&lt;br /&gt;
       C(x) para x tiene forma de cuarto creciente&lt;br /&gt;
       h    para hoy&lt;br /&gt;
       d    para hace dos semanas&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 46. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Juana sólo tiene un marido. Juana está casada con Tomás. Tomás es&lt;br /&gt;
     delgado y Guillermo no. Luego, Juana no está casada con Guillermo. &lt;br /&gt;
  Usar D(x)   para x es delgado&lt;br /&gt;
       C(x,y) para x está casada con y&lt;br /&gt;
       g      para Guillermo&lt;br /&gt;
       j      para Juana&lt;br /&gt;
       t      para Tomás&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 47. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Sultán no es Chitón. Sultán no obtendrá un plátano a menos que&lt;br /&gt;
     pueda resolver cualquier problema. Si el chimpancé Chitón trabaja&lt;br /&gt;
     más que Sultán resolverá problemas que Sultán no puede resolver. &lt;br /&gt;
     Todos los chimpancés distintos de Sultán trabajan más que Sultán. &lt;br /&gt;
     Por consiguiente, Sultán no obtendrá un plátano.&lt;br /&gt;
  Usar Pl(x)  para x obtiene el plátano&lt;br /&gt;
       Pr(x)  para x es un problema&lt;br /&gt;
       R(x,y) para x resuelve y&lt;br /&gt;
       T(x,y) para x trabaja más que y&lt;br /&gt;
       c      para Chitón&lt;br /&gt;
       s      para Sultán&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=R10&amp;diff=245</id>
		<title>R10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=R10&amp;diff=245"/>
		<updated>2014-12-18T10:13:16Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R10: Formalización y argumentación con Isabelle/HOL *}&lt;br /&gt;
&lt;br /&gt;
theory R10&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta es relación formalizar y demostrar la corrección&lt;br /&gt;
  de los argumentos usando sólo las reglas básicas de deducción natural&lt;br /&gt;
  de la lógica (sin usar el método auto). &lt;br /&gt;
&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
&lt;br /&gt;
  · allI:       ⟦∀x. P x; P x ⟹ R⟧ ⟹ R&lt;br /&gt;
  · allE:       (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
  · exI:        P x ⟹ ∃x. P x&lt;br /&gt;
  · exE:        ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&lt;br /&gt;
&lt;br /&gt;
  · refl:       t = t&lt;br /&gt;
  · subst:      ⟦s = t; P s⟧ ⟹ P t&lt;br /&gt;
  · trans:      ⟦r = s; s = t⟧ ⟹ r = t&lt;br /&gt;
  · sym:        s = t ⟹ t = s&lt;br /&gt;
  · not_sym:    t ≠ s ⟹ s ≠ t&lt;br /&gt;
  · ssubst:     ⟦t = s; P s⟧ ⟹ P t&lt;br /&gt;
  · box_equals: ⟦a = b; a = c; b = d⟧ ⟹ a: = d&lt;br /&gt;
  · arg_cong:   x = y ⟹ f x = f y&lt;br /&gt;
  · fun_cong:   f = g ⟹ f x = g x&lt;br /&gt;
  · cong:       ⟦f = g; x = y⟧ ⟹ f x = g y&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI, mt, no_ex y no_para_todo que demostramos&lt;br /&gt;
  a continuación. &lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma no_ex: &amp;quot;¬(∃x. P(x)) ⟹ ∀x. ¬P(x)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma no_para_todo: &amp;quot;¬(∀x. P(x)) ⟹ ∃x. ¬P(x)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     Si no está el mañana ni el ayer escrito, entonces no está el mañana&lt;br /&gt;
     escrito. &lt;br /&gt;
  Usar M: El mañana está escrito.&lt;br /&gt;
       A: El ayer está escrito.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Siempre que un número x es divisible por 10, acaba en 0. El número&lt;br /&gt;
     x no acaba en 0. Por lo tanto, x no es divisible por 10. &lt;br /&gt;
  Usar D para &amp;quot;el número es divisible por 10&amp;quot; y&lt;br /&gt;
       C para &amp;quot;el número acaba en cero&amp;quot;.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si no hay control de nacimientos, entonces la población crece&lt;br /&gt;
     ilimitadamente; pero si la población crece ilimitadamente,&lt;br /&gt;
     aumentará el índice de pobreza. Por consiguiente, si no hay control&lt;br /&gt;
     de nacimientos, aumentará el índice de pobreza. &lt;br /&gt;
  Usar N: Hay control de nacimientos. &lt;br /&gt;
       P: La población crece ilimitadamente,&lt;br /&gt;
       I: Aumentará el índice de pobreza. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si te llamé por teléfono, entonces recibiste mi llamada y no es&lt;br /&gt;
     cierto que no te avisé del peligro que corrías. Por consiguiente,&lt;br /&gt;
     como te llamé, es cierto que te avisé del peligro que corrías.&lt;br /&gt;
  Usar T: Te llamé por teléfono.&lt;br /&gt;
       R: Recibiste mi llamada.&lt;br /&gt;
       P: Te avisé del peligro que corrías.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si la válvula está abierta o la monitorización está preparada,&lt;br /&gt;
     entonces se envía una señal de reconocimiento y un mensaje de&lt;br /&gt;
     funcionamiento al controlador del ordenador. Si se envía un mensaje &lt;br /&gt;
     de funcionamiento al controlador del ordenador o el sistema está en &lt;br /&gt;
     estado normal, entonces se aceptan las órdenes del operador. Por lo&lt;br /&gt;
     tanto, si la válvula está abierta, entonces se aceptan las órdenes&lt;br /&gt;
     del operador. &lt;br /&gt;
  Usar A : La válvula está abierta.&lt;br /&gt;
       P : La monitorización está preparada.&lt;br /&gt;
       R : Envía una señal de reconocimiento.&lt;br /&gt;
       F : Envía un mensaje de funcionamiento.&lt;br /&gt;
       N : El sistema está en estado normal.&lt;br /&gt;
       O : Se aceptan órdenes del operador.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Cuando tanto la temperatura como la presión atmosférica permanecen&lt;br /&gt;
     contantes, no llueve. La temperatura permanece constante. Por lo&lt;br /&gt;
     tanto, en caso de que llueva, la presión atmosférica no permanece&lt;br /&gt;
     constante. &lt;br /&gt;
  Usar T para &amp;quot;La temperatura permanece constante&amp;quot;,&lt;br /&gt;
       P para &amp;quot;La presión atmosférica permanece constante&amp;quot; y&lt;br /&gt;
       L para &amp;quot;Llueve&amp;quot;.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si el general era leal, hubiera obedecido las órdenes, y si era&lt;br /&gt;
     inteligente las hubiera comprendido. O el general desobedeció las&lt;br /&gt;
     órdenes o no las comprendió. Luego, el general era desleal o no era&lt;br /&gt;
     inteligente. &lt;br /&gt;
  Usar L:  El general es leal.&lt;br /&gt;
       Ob: El general obedece las órdenes.&lt;br /&gt;
       I:  El general es inteligente.&lt;br /&gt;
       C:  El general comprende las órdenes.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Me matan si no trabajo y si trabajo me matan. Me matan siempre me&lt;br /&gt;
     matan. &lt;br /&gt;
  Usar M: Me matan.&lt;br /&gt;
       T: Trabajo.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     En cierto experimento, cuando hemos empleado un fármaco A, el&lt;br /&gt;
     paciente ha mejorado considerablemente en el caso, y sólo en el&lt;br /&gt;
     caso, en que no se haya empleado también un fármaco B. Además, o se&lt;br /&gt;
     ha empleado el fármaco A o se ha empleado el fármaco B. En&lt;br /&gt;
     consecuencia, podemos afirmar que si no hemos empleado el fármaco&lt;br /&gt;
     B, el paciente ha mejorado considerablemente. &lt;br /&gt;
  Usar A: Hemos empleado el fármaco A.&lt;br /&gt;
       B: Hemos empleado el fármaco B.&lt;br /&gt;
       M: El paciente ha mejorado notablemente.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si trabajo gano dinero, pero si no trabajo gozo de la vida. Sin&lt;br /&gt;
     embargo, si trabajo no gozo de la vida, mientras que si no trabajo&lt;br /&gt;
     no gano dinero. Por lo tanto, gozo de la vida si y sólo si no gano&lt;br /&gt;
  dinero. &lt;br /&gt;
  Usar p: Trabajo&lt;br /&gt;
       q: Gano dinero.&lt;br /&gt;
       r: Gozo de la vida.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si Dios fuera capaz de evitar el mal y quisiera hacerlo, lo&lt;br /&gt;
     haría. Si Dios fuera incapaz de evitar el mal, no sería&lt;br /&gt;
     omnipotente; si no quisiera evitar el mal sería malévolo. Dios no&lt;br /&gt;
     evita el mal. Si Dios existe, es omnipotente y no es&lt;br /&gt;
     malévolo. Luego, Dios no existe. &lt;br /&gt;
  Usar C:  Dios es capaz de evitar el mal.&lt;br /&gt;
       Q:  Dios quiere evitar el mal.&lt;br /&gt;
       Om: Dios es omnipotente.&lt;br /&gt;
       M:  Dios es malévolo.&lt;br /&gt;
       P:  Dios evita el mal.&lt;br /&gt;
       E:  Dios existe.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Sócrates es un hombre. &lt;br /&gt;
     Los hombres son mortales. &lt;br /&gt;
     Luego, Sócrates es mortal.&lt;br /&gt;
  Usar s    para Sócrates&lt;br /&gt;
       H(x) para x es un hombre          &lt;br /&gt;
       M(x) para x es mortal&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Hay estudiantes inteligentes y hay estudiantes trabajadores. Por&lt;br /&gt;
     tanto, hay estudiantes inteligentes y trabajadores.&lt;br /&gt;
  Usar I(x) para x es inteligente&lt;br /&gt;
       T(x) para x es trabajador&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todos los participantes son vencedores. Hay como máximo un&lt;br /&gt;
     vencedor. Hay como máximo un participante. Por lo tanto, hay&lt;br /&gt;
     exactamente un participante. &lt;br /&gt;
  Usar P(x) para x es un participante&lt;br /&gt;
       V(x) para x es un vencedor&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todo aquel que entre en el país y no sea un VIP será cacheado por&lt;br /&gt;
     un aduanero. Hay un contrabandista que entra en el país y que solo&lt;br /&gt;
     podrá ser cacheado por contrabandistas. Ningún contrabandista es un&lt;br /&gt;
     VIP. Por tanto, algún aduanero es contrabandista.&lt;br /&gt;
  Usar A(x)    para x es aduanero&lt;br /&gt;
       Ca(x,y) para x cachea a y&lt;br /&gt;
       Co(x)   para x es contrabandista&lt;br /&gt;
       E(x)    para x entra en el pais&lt;br /&gt;
       V(x)    para x es un VIP&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Juan teme a María. Pedro es temido por Juan. Luego, alguien teme a&lt;br /&gt;
     María y a Pedro.&lt;br /&gt;
  Usar j      para Juan  &lt;br /&gt;
       m      para María&lt;br /&gt;
       p      para Pedro&lt;br /&gt;
       T(x,y) para x teme a y&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Los hermanos tienen el mismo padre. Juan es hermano de Luis. Carlos&lt;br /&gt;
     es padre de Luis. Por tanto, Carlos es padre de Juan.&lt;br /&gt;
  Usar H(x,y) para x es hermano de y&lt;br /&gt;
       P(x,y) para x es padre de y&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     La existencia de algún canal de TV pública, supone un acicate para&lt;br /&gt;
     cualquier canal de TV privada; el que un canal de TV tenga un&lt;br /&gt;
     acicate, supone una gran satisfacción para cualquiera de sus&lt;br /&gt;
     directivos; en Madrid hay varios canales públicos de TV; TV5 es un&lt;br /&gt;
     canal de TV privada; por tanto, todos los directivos de TV5 están&lt;br /&gt;
     satisfechos. &lt;br /&gt;
  Usar Pu(x)  para x es un canal de TV pública&lt;br /&gt;
       Pr(x)  para x es un canal de TV privada&lt;br /&gt;
       A(x)   para x posee un acicate&lt;br /&gt;
       D(x,y) para x es un directivo del canal y&lt;br /&gt;
       S(x)   para x está satisfecho &lt;br /&gt;
       t      para TV5&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Quien intente entrar en un país y no tenga pasaporte, encontrará&lt;br /&gt;
     algún aduanero que le impida el paso. A algunas personas&lt;br /&gt;
     motorizadas que intentan entrar en un país le impiden el paso&lt;br /&gt;
     únicamente personas motorizadas. Ninguna persona motorizada tiene&lt;br /&gt;
     pasaporte. Por tanto, ciertos aduaneros están motorizados.&lt;br /&gt;
  Usar E(x)   para x entra en un país&lt;br /&gt;
       P(x)   para x tiene pasaporte&lt;br /&gt;
       A(x)   para x es aduanero&lt;br /&gt;
       I(x,y) para x impide el paso a y&lt;br /&gt;
       M(x)   para x está motorizada&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Los aficionados al fútbol aplauden a cualquier futbolista&lt;br /&gt;
     extranjero. Juanito no aplaude a futbolistas extranjeros. Por&lt;br /&gt;
     tanto, si hay algún futbolista extranjero nacionalizado español,&lt;br /&gt;
     Juanito no es aficionado al fútbol.&lt;br /&gt;
  Usar Af(x)   para x es aficicionado al fútbol&lt;br /&gt;
       Ap(x,y) para x aplaude a y&lt;br /&gt;
       E(x)    para x es un futbolista extranjero&lt;br /&gt;
       N(x)    para x es un futbolista nacionalizado español&lt;br /&gt;
       j       para Juanito&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Ningún aristócrata debe ser condenado a galeras a menos que sus&lt;br /&gt;
     crímenes sean vergonzosos y lleve una vida licenciosa. En la ciudad&lt;br /&gt;
     hay aristócratas que han cometido crímenes vergonzosos aunque su&lt;br /&gt;
     forma de vida no sea licenciosa. Por tanto, hay algún aristócrata&lt;br /&gt;
     que no está condenado a galeras. &lt;br /&gt;
  Usar A(x)  para x es aristócrata&lt;br /&gt;
       G(x)  para x está condenado a galeras&lt;br /&gt;
       L(x)  para x lleva una vida licenciosa&lt;br /&gt;
       V(x)  para x ha cometido crímenes vergonzoso&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todo individuo que esté conforme con el contenido de cualquier&lt;br /&gt;
     acuerdo internacional lo apoya o se inhibe en absoluto de asuntos&lt;br /&gt;
     políticos. Cualquiera que se inhiba de los asuntos políticos, no&lt;br /&gt;
     participará en el próximo referéndum. Todo español, está conforme&lt;br /&gt;
     con el acuerdo internacional de Maastricht, al que sin embargo no&lt;br /&gt;
     apoya. Por tanto, cualquier individuo o no es español, o en otro&lt;br /&gt;
     caso, está conforme con el contenido del acuerdo internacional de&lt;br /&gt;
     Maastricht y no participará en el próximo referéndum. &lt;br /&gt;
  Usar C(x,y) para la persona x conforme con el contenido del acuerdo y&lt;br /&gt;
       A(x,y) para la persona x apoya el acuerdo y&lt;br /&gt;
       I(x)   para la persona x se inibe de asuntos políticos&lt;br /&gt;
       R(x)   para la persona x participará en el próximo referéndum&lt;br /&gt;
       E(x)   para la persona x es española&lt;br /&gt;
       m      para el acuerdo de Maastricht&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Toda persona pobre tiene un padre rico. Por tanto, existe una&lt;br /&gt;
     persona rica que tiene un abuelo rico.&lt;br /&gt;
  Usar R(x) para x es rico&lt;br /&gt;
       p(x) para el padre de x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todo deprimido que estima a un submarinista es listo. Cualquiera&lt;br /&gt;
     que se estime a sí mismo es listo. Ningún deprimido se estima a sí&lt;br /&gt;
     mismo. Por tanto, ningún deprimido estima a un submarinista.&lt;br /&gt;
  Usar D(x)   para x está deprimido&lt;br /&gt;
       E(x,y) para x estima a y&lt;br /&gt;
       L(x)   para x es listo&lt;br /&gt;
       S(x)   para x es submarinista&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todos los robots obedecen a los amigos del programador jefe.&lt;br /&gt;
     Alvaro es amigo del programador jefe, pero Benito no le&lt;br /&gt;
     obedece. Por tanto, Benito no es un robot.&lt;br /&gt;
  Usar R(x)    para x es un robot&lt;br /&gt;
       Ob(x,y) para x obedece a y&lt;br /&gt;
       A(x)    para x es amigo del programador jefe&lt;br /&gt;
       b       para Benito&lt;br /&gt;
       a       para Alvaro&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     En una pecera nadan una serie de peces. Se observa que:&lt;br /&gt;
     * Hay algún pez x que para cualquier pez y, si el pez x no se come&lt;br /&gt;
       al pez y entonces existe un pez z tal que z es un tiburón o bien&lt;br /&gt;
       z protege al pez y. &lt;br /&gt;
     * No hay ningún pez que se coma a todos los demás.&lt;br /&gt;
     * Ningún pez protege a ningún otro.&lt;br /&gt;
     Por tanto, existe algún tiburón en la pecera.&lt;br /&gt;
  Usar C(x,y) para x se come a y &lt;br /&gt;
       P(x,y) para x protege a y&lt;br /&gt;
       T(x)   para x es un tiburón&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Supongamos conocidos los siguientes hechos acerca del número de&lt;br /&gt;
     aprobados de dos asignaturas A y B: &lt;br /&gt;
     * Si todos los alumnos aprueban la asignatura A, entonces todos&lt;br /&gt;
       aprueban la asignatura B.&lt;br /&gt;
     * Si algún delegado de la clase aprueba A y B, entonces todos los &lt;br /&gt;
       alumnos aprueban A.&lt;br /&gt;
     * Si nadie aprueba B, entonces ningún delegado aprueba A.&lt;br /&gt;
     * Si Manuel no aprueba B, entonces nadie aprueba B.&lt;br /&gt;
     Por tanto, si Manuel es un delegado y aprueba la asignatura A,&lt;br /&gt;
     entonces todos los alumnos aprueban las asignaturas A y B.&lt;br /&gt;
  Usar A(x,y) para x aprueba la asignatura y&lt;br /&gt;
       D(x)   para x es delegado&lt;br /&gt;
       m      para Manuel&lt;br /&gt;
       a      para la asignatura A&lt;br /&gt;
       b      para la asignatura B&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     En cierto país oriental se ha celebrado la fase final del&lt;br /&gt;
     campeonato mundial de fútbol. Cierto diario deportivo ha publicado&lt;br /&gt;
     las siguientes estadísticas de tan magno acontecimiento: &lt;br /&gt;
     * A todos los porteros que no vistieron camiseta negra les marcó un&lt;br /&gt;
       gol algún delantero europeo.  &lt;br /&gt;
     * Algún portero jugó con botas blancas y sólo le marcaron goles&lt;br /&gt;
       jugadores con botas blancas.  &lt;br /&gt;
     * Ningún portero se marcó un gol a sí mismo. &lt;br /&gt;
     * Ningún jugador con botas blancas vistió camiseta negra. &lt;br /&gt;
     Por tanto, algún delantero europeo jugó con botas blancas.&lt;br /&gt;
  Usar P(x)   para x es portero&lt;br /&gt;
       D(x)   para x es delantero europeo &lt;br /&gt;
       N(x)   para x viste camiseta negra&lt;br /&gt;
       B(x)   para x juega con botas blancas &lt;br /&gt;
       M(x,y) para x marcó un gol a y&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Las relaciones de parentesco verifican la siguientes propiedades&lt;br /&gt;
     generales:  &lt;br /&gt;
     * Si x es hermano de y, entonces y es hermano de x. &lt;br /&gt;
     * Todo el mundo es hijo de alguien. &lt;br /&gt;
     * Nadie es hijo del hermano de su padre. &lt;br /&gt;
     * Cualquier padre de una persona es también padre de todos los&lt;br /&gt;
       hermanos de esa persona. &lt;br /&gt;
     * Nadie es hijo ni hermano de sí mismo. &lt;br /&gt;
     Tenemos los siguientes miembros de la familia Peláez: Don Antonio,&lt;br /&gt;
     Don Luis, Antoñito y Manolito y sabemos que Don Antonio y Don Luis&lt;br /&gt;
     son hermanos, Antoñito y Manolito son hermanos, y Antoñito es hijo&lt;br /&gt;
     de Don Antonio. Por tanto, Don Luis no es el padre de Manolito.&lt;br /&gt;
  Usar A       para Don Antonio&lt;br /&gt;
       He(x,y) para x es hermano de y &lt;br /&gt;
       Hi(x,y) para x es hijo de y  &lt;br /&gt;
       L       para Don Luis&lt;br /&gt;
       a       para Antoñito&lt;br /&gt;
       m       para Manolito&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. [Problema del apisonador de Schubert (en inglés, &lt;br /&gt;
  &amp;quot;Schubert’s steamroller&amp;quot;)] Formalizar, y decidir la corrección, del&lt;br /&gt;
  siguiente argumento &lt;br /&gt;
     Si uno de los miembros del club afeita a algún otro (incluido a&lt;br /&gt;
     sí mismo), entonces todos los miembros del club lo han afeitado&lt;br /&gt;
     a él (aunque no necesariamente al mismo tiempo). Guido, Lorenzo,&lt;br /&gt;
     Petruccio y Cesare pertenecen al club de barberos. Guido ha&lt;br /&gt;
     afeitado a Cesare. Por tanto, Petruccio ha afeitado a Lorenzo.&lt;br /&gt;
  Usar g      para Guido&lt;br /&gt;
       l      para Lorenzo&lt;br /&gt;
       p      para Petruccio&lt;br /&gt;
       c      para Cesare&lt;br /&gt;
       B(x)   para x es un miembro del club de barberos&lt;br /&gt;
       A(x,y) para x ha afeitado a y&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Carlos afeita a todos los habitantes de Las Chinas que no se&lt;br /&gt;
     afeitan a sí mismo y sólo a ellos. Carlos es un habitante de las&lt;br /&gt;
     Chinas. Por consiguiente, Carlos no afeita a nadie.&lt;br /&gt;
  Usar A(x,y) para x afeita a y&lt;br /&gt;
       C(x)   para x es un habitante de Las Chinas&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     Quien desprecia a todos los fanáticos desprecia también a todos los&lt;br /&gt;
     políticos. Alguien no desprecia a un determinado político. Por&lt;br /&gt;
     consiguiente, hay un fanático al que no todo el mundo desprecia.&lt;br /&gt;
   Usar D(x,y) para x desprecia a y&lt;br /&gt;
        F(x)   para x es fanático&lt;br /&gt;
        P(x)   para x es político&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     El hombre puro ama todo lo que es puro. Por tanto, el hombre puro&lt;br /&gt;
     se ama a sí mismo.&lt;br /&gt;
  Usar A(x,y) para x ama a y&lt;br /&gt;
       H(x)   para x es un hombre&lt;br /&gt;
       P(x)   para x es puro&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     Ningún socio del club está en deuda con el tesorero del club. Si&lt;br /&gt;
     un socio del club no paga su cuota está en deuda con el tesorero&lt;br /&gt;
     del club. Por tanto, si el tesorero del club es socio del club,&lt;br /&gt;
     entonces paga su cuota. &lt;br /&gt;
  Usar P(x) para x es socio del club&lt;br /&gt;
       Q(x) para x paga su cuota&lt;br /&gt;
       R(x) para x está en deuda con el tesorero&lt;br /&gt;
       a    para el tesorero del club&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     1. Los lobos, zorros, pájaros, orugas y caracoles son animales y&lt;br /&gt;
        existen algunos ejemplares de estos animales. &lt;br /&gt;
     2. También hay algunas semillas y las semillas son plantas. &lt;br /&gt;
     3. A todo animal le gusta o bien comer todo tipo de plantas o bien&lt;br /&gt;
        le gusta comerse a todos los animales más pequeños que él mismo&lt;br /&gt;
        que gustan de comer algunas plantas. &lt;br /&gt;
     4. Las orugas y los caracoles son mucho más pequeños que los&lt;br /&gt;
        pájaros, que son mucho más pequeños que los zorros que a su vez&lt;br /&gt;
        son mucho más pequeños que los lobos. &lt;br /&gt;
     5. A los lobos no les gusta comer ni zorros ni semillas, mientras&lt;br /&gt;
        que a los pájaros les gusta comer orugas pero no caracoles. &lt;br /&gt;
     6. Las orugas y los caracoles gustan de comer algunas plantas. &lt;br /&gt;
     7. Luego, existe un animal al que le gusta comerse un animal al que&lt;br /&gt;
        le gusta comer semillas.  &lt;br /&gt;
  Usar A(x)    para x es un animal&lt;br /&gt;
       Ca(x)   para x es un caracol&lt;br /&gt;
       Co(x,y) para x le gusta comerse a y&lt;br /&gt;
       L(x)    para x es un lobo&lt;br /&gt;
       M(x,y)  para x es más pequeño que y&lt;br /&gt;
       Or(x)   para x es una oruga&lt;br /&gt;
       Pa(x)   para x es un pájaro&lt;br /&gt;
       Pl(x)   para x es una planta&lt;br /&gt;
       S(x)    para x es una semilla&lt;br /&gt;
       Z(x)    para x es un zorro&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Rosa ama a Curro. Paco no simpatiza con Ana. Quien no simpatiza con&lt;br /&gt;
     Ana ama a Rosa. Si una persona ama a otra, la segunda ama a la&lt;br /&gt;
     primera. Hay como máximo una persona que ama a Rosa. Por tanto,&lt;br /&gt;
     Paco es Curro. &lt;br /&gt;
  Usar A(x,y) para x ama a y &lt;br /&gt;
       S(x,y) para x simpatiza con y &lt;br /&gt;
       a      para Ana&lt;br /&gt;
       c      para Curro&lt;br /&gt;
       p      para Paco &lt;br /&gt;
       r      para Rosa&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Sólo hay un sofista que enseña gratuitamente, y éste es&lt;br /&gt;
     Sócrates. Sócrates argumenta mejor que ningún otro sofista. Platón&lt;br /&gt;
     argumenta mejor que algún sofista que enseña gratuitamente. Si una&lt;br /&gt;
     persona argumenta mejor que otra segunda, entonces la segunda no&lt;br /&gt;
     argumenta mejor que la primera. Por consiguiente, Platón no es un&lt;br /&gt;
     sofista. &lt;br /&gt;
  Usar G(x)   para x enseña gratuitamente&lt;br /&gt;
       M(x,y) para x argumenta mejor que y&lt;br /&gt;
       S(x)   para x es un sofista&lt;br /&gt;
       p      para Platón&lt;br /&gt;
       s      para Sócrates&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 38. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todos los filósofos se han preguntado qué es la filosofía. Los que&lt;br /&gt;
     se preguntan qué es la filosofía se vuelven locos. Nietzsche es&lt;br /&gt;
     filósofo. El maestro de Nietzsche no acabó loco. Por tanto,&lt;br /&gt;
     Nietzsche y su maestro son diferentes personas. &lt;br /&gt;
  Usar F(x) para x es filósofo&lt;br /&gt;
       L(x) para x se vuelve loco&lt;br /&gt;
       P(x) para x se ha preguntado qué es la filosofía.&lt;br /&gt;
       m    para el maestro de Nietzsche&lt;br /&gt;
       n    para Nietzsche&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 39. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Los padres son mayores que los hijos. Juan es el padre de Luis. Por&lt;br /&gt;
     tanto, Juan es mayor que Luis.&lt;br /&gt;
  Usar M(x,y) para x es mayor que y&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 40. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     El esposo de la hermana de Toni es Roberto. La hermana de Toni es&lt;br /&gt;
     María. Por tanto, el esposo de María es Roberto. &lt;br /&gt;
  Usar e(x) para el esposo de x&lt;br /&gt;
       h    para la hermana de Toni&lt;br /&gt;
       m    para María&lt;br /&gt;
       r    para Roberto&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 41. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Luis y Jaime tienen el mismo padre. La madre de Rosa es&lt;br /&gt;
     Eva. Eva ama a Carlos. Carlos es el padre de Jaime. Por tanto,&lt;br /&gt;
     la madre de Rosa ama al padre de Luis.&lt;br /&gt;
  Usar A(x,y) para x ama a y&lt;br /&gt;
       m(x)   para la madre de x&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
       e      para Eva&lt;br /&gt;
       j      para Jaime&lt;br /&gt;
       l      para Luis&lt;br /&gt;
       r      para Rosa&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 42. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si dos personas son hermanos, entonces tienen la misma madre y el&lt;br /&gt;
     mismo padre. Juan es hermano de Luis. Por tanto, la madre del padre&lt;br /&gt;
     de Juan es la madre del padre de Luis.&lt;br /&gt;
  Usar H(x,y) para x es hermano de y&lt;br /&gt;
       m(x)   para la madre de x&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 43. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todos los miembros del claustro son asturianos. El secretario forma&lt;br /&gt;
     parte del claustro. El señor Martínez es el secretario. Por tanto,&lt;br /&gt;
     el señor Martínez es asturiano.&lt;br /&gt;
  Usar C(x) para x es miembro del claustro&lt;br /&gt;
       A(x) para x es asturiano&lt;br /&gt;
       s    para el secretario&lt;br /&gt;
       m    para el señor Martínez&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 44. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Eduardo pudo haber visto al asesino. Antonio fue el primer testigo&lt;br /&gt;
     de la defensa. O Eduardo estaba en clase o Antonio dio falso&lt;br /&gt;
     testimonio. Nadie en clase pudo haber visto al asesino. Luego, el&lt;br /&gt;
     primer testigo de la defensa dio falso testimonio. &lt;br /&gt;
  Usar C(x) para x estaba en clase&lt;br /&gt;
       F(x) para x dio falso testimonio&lt;br /&gt;
       V(x) para x pudo haber visto al asesino&lt;br /&gt;
       a    para Antonio&lt;br /&gt;
       e    para Eduardo&lt;br /&gt;
       p    para el primer testigo de la defensa&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 45. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     La luna hoy es redonda. La luna de hace dos semanas tenía forma de&lt;br /&gt;
     cuarto creciente. Luna no hay más que una, es decir, siempre es la&lt;br /&gt;
     misma. Luego existe algo que es a la vez redondo y con forma de&lt;br /&gt;
     cuarto creciente. &lt;br /&gt;
  Usar L(x) para la luna del momento x&lt;br /&gt;
       R(x) para x es redonda&lt;br /&gt;
       C(x) para x tiene forma de cuarto creciente&lt;br /&gt;
       h    para hoy&lt;br /&gt;
       d    para hace dos semanas&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 46. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Juana sólo tiene un marido. Juana está casada con Tomás. Tomás es&lt;br /&gt;
     delgado y Guillermo no. Luego, Juana no está casada con Guillermo. &lt;br /&gt;
  Usar D(x)   para x es delgado&lt;br /&gt;
       C(x,y) para x está casada con y&lt;br /&gt;
       g      para Guillermo&lt;br /&gt;
       j      para Juana&lt;br /&gt;
       t      para Tomás&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 47. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Sultán no es Chitón. Sultán no obtendrá un plátano a menos que&lt;br /&gt;
     pueda resolver cualquier problema. Si el chimpancé Chitón trabaja&lt;br /&gt;
     más que Sultán resolverá problemas que Sultán no puede resolver. &lt;br /&gt;
     Todos los chimpancés distintos de Sultán trabajan más que Sultán. &lt;br /&gt;
     Por consiguiente, Sultán no obtendrá un plátano.&lt;br /&gt;
  Usar Pl(x)  para x obtiene el plátano&lt;br /&gt;
       Pr(x)  para x es un problema&lt;br /&gt;
       R(x,y) para x resuelve y&lt;br /&gt;
       T(x,y) para x trabaja más que y&lt;br /&gt;
       c      para Chitón&lt;br /&gt;
       s      para Sultán&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=R10&amp;diff=244</id>
		<title>R10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=R10&amp;diff=244"/>
		<updated>2014-12-18T10:12:53Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Protegió «R10» ([edit=sysop] (indefinido) [move=sysop] (indefinido))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R10: Formalización y argumentación con Isabelle/HOL *}&lt;br /&gt;
&lt;br /&gt;
theory R10_Formalizacion_y_argmentacion&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta es relación formalizar y demostrar la corrección&lt;br /&gt;
  de los argumentos usando sólo las reglas básicas de deducción natural&lt;br /&gt;
  de la lógica (sin usar el método auto). &lt;br /&gt;
&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
&lt;br /&gt;
  · allI:       ⟦∀x. P x; P x ⟹ R⟧ ⟹ R&lt;br /&gt;
  · allE:       (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
  · exI:        P x ⟹ ∃x. P x&lt;br /&gt;
  · exE:        ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&lt;br /&gt;
&lt;br /&gt;
  · refl:       t = t&lt;br /&gt;
  · subst:      ⟦s = t; P s⟧ ⟹ P t&lt;br /&gt;
  · trans:      ⟦r = s; s = t⟧ ⟹ r = t&lt;br /&gt;
  · sym:        s = t ⟹ t = s&lt;br /&gt;
  · not_sym:    t ≠ s ⟹ s ≠ t&lt;br /&gt;
  · ssubst:     ⟦t = s; P s⟧ ⟹ P t&lt;br /&gt;
  · box_equals: ⟦a = b; a = c; b = d⟧ ⟹ a: = d&lt;br /&gt;
  · arg_cong:   x = y ⟹ f x = f y&lt;br /&gt;
  · fun_cong:   f = g ⟹ f x = g x&lt;br /&gt;
  · cong:       ⟦f = g; x = y⟧ ⟹ f x = g y&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI, mt, no_ex y no_para_todo que demostramos&lt;br /&gt;
  a continuación. &lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma no_ex: &amp;quot;¬(∃x. P(x)) ⟹ ∀x. ¬P(x)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma no_para_todo: &amp;quot;¬(∀x. P(x)) ⟹ ∃x. ¬P(x)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     Si no está el mañana ni el ayer escrito, entonces no está el mañana&lt;br /&gt;
     escrito. &lt;br /&gt;
  Usar M: El mañana está escrito.&lt;br /&gt;
       A: El ayer está escrito.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Siempre que un número x es divisible por 10, acaba en 0. El número&lt;br /&gt;
     x no acaba en 0. Por lo tanto, x no es divisible por 10. &lt;br /&gt;
  Usar D para &amp;quot;el número es divisible por 10&amp;quot; y&lt;br /&gt;
       C para &amp;quot;el número acaba en cero&amp;quot;.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si no hay control de nacimientos, entonces la población crece&lt;br /&gt;
     ilimitadamente; pero si la población crece ilimitadamente,&lt;br /&gt;
     aumentará el índice de pobreza. Por consiguiente, si no hay control&lt;br /&gt;
     de nacimientos, aumentará el índice de pobreza. &lt;br /&gt;
  Usar N: Hay control de nacimientos. &lt;br /&gt;
       P: La población crece ilimitadamente,&lt;br /&gt;
       I: Aumentará el índice de pobreza. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si te llamé por teléfono, entonces recibiste mi llamada y no es&lt;br /&gt;
     cierto que no te avisé del peligro que corrías. Por consiguiente,&lt;br /&gt;
     como te llamé, es cierto que te avisé del peligro que corrías.&lt;br /&gt;
  Usar T: Te llamé por teléfono.&lt;br /&gt;
       R: Recibiste mi llamada.&lt;br /&gt;
       P: Te avisé del peligro que corrías.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si la válvula está abierta o la monitorización está preparada,&lt;br /&gt;
     entonces se envía una señal de reconocimiento y un mensaje de&lt;br /&gt;
     funcionamiento al controlador del ordenador. Si se envía un mensaje &lt;br /&gt;
     de funcionamiento al controlador del ordenador o el sistema está en &lt;br /&gt;
     estado normal, entonces se aceptan las órdenes del operador. Por lo&lt;br /&gt;
     tanto, si la válvula está abierta, entonces se aceptan las órdenes&lt;br /&gt;
     del operador. &lt;br /&gt;
  Usar A : La válvula está abierta.&lt;br /&gt;
       P : La monitorización está preparada.&lt;br /&gt;
       R : Envía una señal de reconocimiento.&lt;br /&gt;
       F : Envía un mensaje de funcionamiento.&lt;br /&gt;
       N : El sistema está en estado normal.&lt;br /&gt;
       O : Se aceptan órdenes del operador.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Cuando tanto la temperatura como la presión atmosférica permanecen&lt;br /&gt;
     contantes, no llueve. La temperatura permanece constante. Por lo&lt;br /&gt;
     tanto, en caso de que llueva, la presión atmosférica no permanece&lt;br /&gt;
     constante. &lt;br /&gt;
  Usar T para &amp;quot;La temperatura permanece constante&amp;quot;,&lt;br /&gt;
       P para &amp;quot;La presión atmosférica permanece constante&amp;quot; y&lt;br /&gt;
       L para &amp;quot;Llueve&amp;quot;.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si el general era leal, hubiera obedecido las órdenes, y si era&lt;br /&gt;
     inteligente las hubiera comprendido. O el general desobedeció las&lt;br /&gt;
     órdenes o no las comprendió. Luego, el general era desleal o no era&lt;br /&gt;
     inteligente. &lt;br /&gt;
  Usar L:  El general es leal.&lt;br /&gt;
       Ob: El general obedece las órdenes.&lt;br /&gt;
       I:  El general es inteligente.&lt;br /&gt;
       C:  El general comprende las órdenes.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Me matan si no trabajo y si trabajo me matan. Me matan siempre me&lt;br /&gt;
     matan. &lt;br /&gt;
  Usar M: Me matan.&lt;br /&gt;
       T: Trabajo.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     En cierto experimento, cuando hemos empleado un fármaco A, el&lt;br /&gt;
     paciente ha mejorado considerablemente en el caso, y sólo en el&lt;br /&gt;
     caso, en que no se haya empleado también un fármaco B. Además, o se&lt;br /&gt;
     ha empleado el fármaco A o se ha empleado el fármaco B. En&lt;br /&gt;
     consecuencia, podemos afirmar que si no hemos empleado el fármaco&lt;br /&gt;
     B, el paciente ha mejorado considerablemente. &lt;br /&gt;
  Usar A: Hemos empleado el fármaco A.&lt;br /&gt;
       B: Hemos empleado el fármaco B.&lt;br /&gt;
       M: El paciente ha mejorado notablemente.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si trabajo gano dinero, pero si no trabajo gozo de la vida. Sin&lt;br /&gt;
     embargo, si trabajo no gozo de la vida, mientras que si no trabajo&lt;br /&gt;
     no gano dinero. Por lo tanto, gozo de la vida si y sólo si no gano&lt;br /&gt;
  dinero. &lt;br /&gt;
  Usar p: Trabajo&lt;br /&gt;
       q: Gano dinero.&lt;br /&gt;
       r: Gozo de la vida.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si Dios fuera capaz de evitar el mal y quisiera hacerlo, lo&lt;br /&gt;
     haría. Si Dios fuera incapaz de evitar el mal, no sería&lt;br /&gt;
     omnipotente; si no quisiera evitar el mal sería malévolo. Dios no&lt;br /&gt;
     evita el mal. Si Dios existe, es omnipotente y no es&lt;br /&gt;
     malévolo. Luego, Dios no existe. &lt;br /&gt;
  Usar C:  Dios es capaz de evitar el mal.&lt;br /&gt;
       Q:  Dios quiere evitar el mal.&lt;br /&gt;
       Om: Dios es omnipotente.&lt;br /&gt;
       M:  Dios es malévolo.&lt;br /&gt;
       P:  Dios evita el mal.&lt;br /&gt;
       E:  Dios existe.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Sócrates es un hombre. &lt;br /&gt;
     Los hombres son mortales. &lt;br /&gt;
     Luego, Sócrates es mortal.&lt;br /&gt;
  Usar s    para Sócrates&lt;br /&gt;
       H(x) para x es un hombre          &lt;br /&gt;
       M(x) para x es mortal&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Hay estudiantes inteligentes y hay estudiantes trabajadores. Por&lt;br /&gt;
     tanto, hay estudiantes inteligentes y trabajadores.&lt;br /&gt;
  Usar I(x) para x es inteligente&lt;br /&gt;
       T(x) para x es trabajador&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todos los participantes son vencedores. Hay como máximo un&lt;br /&gt;
     vencedor. Hay como máximo un participante. Por lo tanto, hay&lt;br /&gt;
     exactamente un participante. &lt;br /&gt;
  Usar P(x) para x es un participante&lt;br /&gt;
       V(x) para x es un vencedor&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todo aquel que entre en el país y no sea un VIP será cacheado por&lt;br /&gt;
     un aduanero. Hay un contrabandista que entra en el país y que solo&lt;br /&gt;
     podrá ser cacheado por contrabandistas. Ningún contrabandista es un&lt;br /&gt;
     VIP. Por tanto, algún aduanero es contrabandista.&lt;br /&gt;
  Usar A(x)    para x es aduanero&lt;br /&gt;
       Ca(x,y) para x cachea a y&lt;br /&gt;
       Co(x)   para x es contrabandista&lt;br /&gt;
       E(x)    para x entra en el pais&lt;br /&gt;
       V(x)    para x es un VIP&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Juan teme a María. Pedro es temido por Juan. Luego, alguien teme a&lt;br /&gt;
     María y a Pedro.&lt;br /&gt;
  Usar j      para Juan  &lt;br /&gt;
       m      para María&lt;br /&gt;
       p      para Pedro&lt;br /&gt;
       T(x,y) para x teme a y&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Los hermanos tienen el mismo padre. Juan es hermano de Luis. Carlos&lt;br /&gt;
     es padre de Luis. Por tanto, Carlos es padre de Juan.&lt;br /&gt;
  Usar H(x,y) para x es hermano de y&lt;br /&gt;
       P(x,y) para x es padre de y&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     La existencia de algún canal de TV pública, supone un acicate para&lt;br /&gt;
     cualquier canal de TV privada; el que un canal de TV tenga un&lt;br /&gt;
     acicate, supone una gran satisfacción para cualquiera de sus&lt;br /&gt;
     directivos; en Madrid hay varios canales públicos de TV; TV5 es un&lt;br /&gt;
     canal de TV privada; por tanto, todos los directivos de TV5 están&lt;br /&gt;
     satisfechos. &lt;br /&gt;
  Usar Pu(x)  para x es un canal de TV pública&lt;br /&gt;
       Pr(x)  para x es un canal de TV privada&lt;br /&gt;
       A(x)   para x posee un acicate&lt;br /&gt;
       D(x,y) para x es un directivo del canal y&lt;br /&gt;
       S(x)   para x está satisfecho &lt;br /&gt;
       t      para TV5&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Quien intente entrar en un país y no tenga pasaporte, encontrará&lt;br /&gt;
     algún aduanero que le impida el paso. A algunas personas&lt;br /&gt;
     motorizadas que intentan entrar en un país le impiden el paso&lt;br /&gt;
     únicamente personas motorizadas. Ninguna persona motorizada tiene&lt;br /&gt;
     pasaporte. Por tanto, ciertos aduaneros están motorizados.&lt;br /&gt;
  Usar E(x)   para x entra en un país&lt;br /&gt;
       P(x)   para x tiene pasaporte&lt;br /&gt;
       A(x)   para x es aduanero&lt;br /&gt;
       I(x,y) para x impide el paso a y&lt;br /&gt;
       M(x)   para x está motorizada&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Los aficionados al fútbol aplauden a cualquier futbolista&lt;br /&gt;
     extranjero. Juanito no aplaude a futbolistas extranjeros. Por&lt;br /&gt;
     tanto, si hay algún futbolista extranjero nacionalizado español,&lt;br /&gt;
     Juanito no es aficionado al fútbol.&lt;br /&gt;
  Usar Af(x)   para x es aficicionado al fútbol&lt;br /&gt;
       Ap(x,y) para x aplaude a y&lt;br /&gt;
       E(x)    para x es un futbolista extranjero&lt;br /&gt;
       N(x)    para x es un futbolista nacionalizado español&lt;br /&gt;
       j       para Juanito&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Ningún aristócrata debe ser condenado a galeras a menos que sus&lt;br /&gt;
     crímenes sean vergonzosos y lleve una vida licenciosa. En la ciudad&lt;br /&gt;
     hay aristócratas que han cometido crímenes vergonzosos aunque su&lt;br /&gt;
     forma de vida no sea licenciosa. Por tanto, hay algún aristócrata&lt;br /&gt;
     que no está condenado a galeras. &lt;br /&gt;
  Usar A(x)  para x es aristócrata&lt;br /&gt;
       G(x)  para x está condenado a galeras&lt;br /&gt;
       L(x)  para x lleva una vida licenciosa&lt;br /&gt;
       V(x)  para x ha cometido crímenes vergonzoso&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todo individuo que esté conforme con el contenido de cualquier&lt;br /&gt;
     acuerdo internacional lo apoya o se inhibe en absoluto de asuntos&lt;br /&gt;
     políticos. Cualquiera que se inhiba de los asuntos políticos, no&lt;br /&gt;
     participará en el próximo referéndum. Todo español, está conforme&lt;br /&gt;
     con el acuerdo internacional de Maastricht, al que sin embargo no&lt;br /&gt;
     apoya. Por tanto, cualquier individuo o no es español, o en otro&lt;br /&gt;
     caso, está conforme con el contenido del acuerdo internacional de&lt;br /&gt;
     Maastricht y no participará en el próximo referéndum. &lt;br /&gt;
  Usar C(x,y) para la persona x conforme con el contenido del acuerdo y&lt;br /&gt;
       A(x,y) para la persona x apoya el acuerdo y&lt;br /&gt;
       I(x)   para la persona x se inibe de asuntos políticos&lt;br /&gt;
       R(x)   para la persona x participará en el próximo referéndum&lt;br /&gt;
       E(x)   para la persona x es española&lt;br /&gt;
       m      para el acuerdo de Maastricht&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Toda persona pobre tiene un padre rico. Por tanto, existe una&lt;br /&gt;
     persona rica que tiene un abuelo rico.&lt;br /&gt;
  Usar R(x) para x es rico&lt;br /&gt;
       p(x) para el padre de x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todo deprimido que estima a un submarinista es listo. Cualquiera&lt;br /&gt;
     que se estime a sí mismo es listo. Ningún deprimido se estima a sí&lt;br /&gt;
     mismo. Por tanto, ningún deprimido estima a un submarinista.&lt;br /&gt;
  Usar D(x)   para x está deprimido&lt;br /&gt;
       E(x,y) para x estima a y&lt;br /&gt;
       L(x)   para x es listo&lt;br /&gt;
       S(x)   para x es submarinista&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todos los robots obedecen a los amigos del programador jefe.&lt;br /&gt;
     Alvaro es amigo del programador jefe, pero Benito no le&lt;br /&gt;
     obedece. Por tanto, Benito no es un robot.&lt;br /&gt;
  Usar R(x)    para x es un robot&lt;br /&gt;
       Ob(x,y) para x obedece a y&lt;br /&gt;
       A(x)    para x es amigo del programador jefe&lt;br /&gt;
       b       para Benito&lt;br /&gt;
       a       para Alvaro&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     En una pecera nadan una serie de peces. Se observa que:&lt;br /&gt;
     * Hay algún pez x que para cualquier pez y, si el pez x no se come&lt;br /&gt;
       al pez y entonces existe un pez z tal que z es un tiburón o bien&lt;br /&gt;
       z protege al pez y. &lt;br /&gt;
     * No hay ningún pez que se coma a todos los demás.&lt;br /&gt;
     * Ningún pez protege a ningún otro.&lt;br /&gt;
     Por tanto, existe algún tiburón en la pecera.&lt;br /&gt;
  Usar C(x,y) para x se come a y &lt;br /&gt;
       P(x,y) para x protege a y&lt;br /&gt;
       T(x)   para x es un tiburón&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Supongamos conocidos los siguientes hechos acerca del número de&lt;br /&gt;
     aprobados de dos asignaturas A y B: &lt;br /&gt;
     * Si todos los alumnos aprueban la asignatura A, entonces todos&lt;br /&gt;
       aprueban la asignatura B.&lt;br /&gt;
     * Si algún delegado de la clase aprueba A y B, entonces todos los &lt;br /&gt;
       alumnos aprueban A.&lt;br /&gt;
     * Si nadie aprueba B, entonces ningún delegado aprueba A.&lt;br /&gt;
     * Si Manuel no aprueba B, entonces nadie aprueba B.&lt;br /&gt;
     Por tanto, si Manuel es un delegado y aprueba la asignatura A,&lt;br /&gt;
     entonces todos los alumnos aprueban las asignaturas A y B.&lt;br /&gt;
  Usar A(x,y) para x aprueba la asignatura y&lt;br /&gt;
       D(x)   para x es delegado&lt;br /&gt;
       m      para Manuel&lt;br /&gt;
       a      para la asignatura A&lt;br /&gt;
       b      para la asignatura B&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     En cierto país oriental se ha celebrado la fase final del&lt;br /&gt;
     campeonato mundial de fútbol. Cierto diario deportivo ha publicado&lt;br /&gt;
     las siguientes estadísticas de tan magno acontecimiento: &lt;br /&gt;
     * A todos los porteros que no vistieron camiseta negra les marcó un&lt;br /&gt;
       gol algún delantero europeo.  &lt;br /&gt;
     * Algún portero jugó con botas blancas y sólo le marcaron goles&lt;br /&gt;
       jugadores con botas blancas.  &lt;br /&gt;
     * Ningún portero se marcó un gol a sí mismo. &lt;br /&gt;
     * Ningún jugador con botas blancas vistió camiseta negra. &lt;br /&gt;
     Por tanto, algún delantero europeo jugó con botas blancas.&lt;br /&gt;
  Usar P(x)   para x es portero&lt;br /&gt;
       D(x)   para x es delantero europeo &lt;br /&gt;
       N(x)   para x viste camiseta negra&lt;br /&gt;
       B(x)   para x juega con botas blancas &lt;br /&gt;
       M(x,y) para x marcó un gol a y&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Las relaciones de parentesco verifican la siguientes propiedades&lt;br /&gt;
     generales:  &lt;br /&gt;
     * Si x es hermano de y, entonces y es hermano de x. &lt;br /&gt;
     * Todo el mundo es hijo de alguien. &lt;br /&gt;
     * Nadie es hijo del hermano de su padre. &lt;br /&gt;
     * Cualquier padre de una persona es también padre de todos los&lt;br /&gt;
       hermanos de esa persona. &lt;br /&gt;
     * Nadie es hijo ni hermano de sí mismo. &lt;br /&gt;
     Tenemos los siguientes miembros de la familia Peláez: Don Antonio,&lt;br /&gt;
     Don Luis, Antoñito y Manolito y sabemos que Don Antonio y Don Luis&lt;br /&gt;
     son hermanos, Antoñito y Manolito son hermanos, y Antoñito es hijo&lt;br /&gt;
     de Don Antonio. Por tanto, Don Luis no es el padre de Manolito.&lt;br /&gt;
  Usar A       para Don Antonio&lt;br /&gt;
       He(x,y) para x es hermano de y &lt;br /&gt;
       Hi(x,y) para x es hijo de y  &lt;br /&gt;
       L       para Don Luis&lt;br /&gt;
       a       para Antoñito&lt;br /&gt;
       m       para Manolito&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. [Problema del apisonador de Schubert (en inglés, &lt;br /&gt;
  &amp;quot;Schubert’s steamroller&amp;quot;)] Formalizar, y decidir la corrección, del&lt;br /&gt;
  siguiente argumento &lt;br /&gt;
     Si uno de los miembros del club afeita a algún otro (incluido a&lt;br /&gt;
     sí mismo), entonces todos los miembros del club lo han afeitado&lt;br /&gt;
     a él (aunque no necesariamente al mismo tiempo). Guido, Lorenzo,&lt;br /&gt;
     Petruccio y Cesare pertenecen al club de barberos. Guido ha&lt;br /&gt;
     afeitado a Cesare. Por tanto, Petruccio ha afeitado a Lorenzo.&lt;br /&gt;
  Usar g      para Guido&lt;br /&gt;
       l      para Lorenzo&lt;br /&gt;
       p      para Petruccio&lt;br /&gt;
       c      para Cesare&lt;br /&gt;
       B(x)   para x es un miembro del club de barberos&lt;br /&gt;
       A(x,y) para x ha afeitado a y&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Carlos afeita a todos los habitantes de Las Chinas que no se&lt;br /&gt;
     afeitan a sí mismo y sólo a ellos. Carlos es un habitante de las&lt;br /&gt;
     Chinas. Por consiguiente, Carlos no afeita a nadie.&lt;br /&gt;
  Usar A(x,y) para x afeita a y&lt;br /&gt;
       C(x)   para x es un habitante de Las Chinas&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     Quien desprecia a todos los fanáticos desprecia también a todos los&lt;br /&gt;
     políticos. Alguien no desprecia a un determinado político. Por&lt;br /&gt;
     consiguiente, hay un fanático al que no todo el mundo desprecia.&lt;br /&gt;
   Usar D(x,y) para x desprecia a y&lt;br /&gt;
        F(x)   para x es fanático&lt;br /&gt;
        P(x)   para x es político&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     El hombre puro ama todo lo que es puro. Por tanto, el hombre puro&lt;br /&gt;
     se ama a sí mismo.&lt;br /&gt;
  Usar A(x,y) para x ama a y&lt;br /&gt;
       H(x)   para x es un hombre&lt;br /&gt;
       P(x)   para x es puro&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     Ningún socio del club está en deuda con el tesorero del club. Si&lt;br /&gt;
     un socio del club no paga su cuota está en deuda con el tesorero&lt;br /&gt;
     del club. Por tanto, si el tesorero del club es socio del club,&lt;br /&gt;
     entonces paga su cuota. &lt;br /&gt;
  Usar P(x) para x es socio del club&lt;br /&gt;
       Q(x) para x paga su cuota&lt;br /&gt;
       R(x) para x está en deuda con el tesorero&lt;br /&gt;
       a    para el tesorero del club&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     1. Los lobos, zorros, pájaros, orugas y caracoles son animales y&lt;br /&gt;
        existen algunos ejemplares de estos animales. &lt;br /&gt;
     2. También hay algunas semillas y las semillas son plantas. &lt;br /&gt;
     3. A todo animal le gusta o bien comer todo tipo de plantas o bien&lt;br /&gt;
        le gusta comerse a todos los animales más pequeños que él mismo&lt;br /&gt;
        que gustan de comer algunas plantas. &lt;br /&gt;
     4. Las orugas y los caracoles son mucho más pequeños que los&lt;br /&gt;
        pájaros, que son mucho más pequeños que los zorros que a su vez&lt;br /&gt;
        son mucho más pequeños que los lobos. &lt;br /&gt;
     5. A los lobos no les gusta comer ni zorros ni semillas, mientras&lt;br /&gt;
        que a los pájaros les gusta comer orugas pero no caracoles. &lt;br /&gt;
     6. Las orugas y los caracoles gustan de comer algunas plantas. &lt;br /&gt;
     7. Luego, existe un animal al que le gusta comerse un animal al que&lt;br /&gt;
        le gusta comer semillas.  &lt;br /&gt;
  Usar A(x)    para x es un animal&lt;br /&gt;
       Ca(x)   para x es un caracol&lt;br /&gt;
       Co(x,y) para x le gusta comerse a y&lt;br /&gt;
       L(x)    para x es un lobo&lt;br /&gt;
       M(x,y)  para x es más pequeño que y&lt;br /&gt;
       Or(x)   para x es una oruga&lt;br /&gt;
       Pa(x)   para x es un pájaro&lt;br /&gt;
       Pl(x)   para x es una planta&lt;br /&gt;
       S(x)    para x es una semilla&lt;br /&gt;
       Z(x)    para x es un zorro&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Rosa ama a Curro. Paco no simpatiza con Ana. Quien no simpatiza con&lt;br /&gt;
     Ana ama a Rosa. Si una persona ama a otra, la segunda ama a la&lt;br /&gt;
     primera. Hay como máximo una persona que ama a Rosa. Por tanto,&lt;br /&gt;
     Paco es Curro. &lt;br /&gt;
  Usar A(x,y) para x ama a y &lt;br /&gt;
       S(x,y) para x simpatiza con y &lt;br /&gt;
       a      para Ana&lt;br /&gt;
       c      para Curro&lt;br /&gt;
       p      para Paco &lt;br /&gt;
       r      para Rosa&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Sólo hay un sofista que enseña gratuitamente, y éste es&lt;br /&gt;
     Sócrates. Sócrates argumenta mejor que ningún otro sofista. Platón&lt;br /&gt;
     argumenta mejor que algún sofista que enseña gratuitamente. Si una&lt;br /&gt;
     persona argumenta mejor que otra segunda, entonces la segunda no&lt;br /&gt;
     argumenta mejor que la primera. Por consiguiente, Platón no es un&lt;br /&gt;
     sofista. &lt;br /&gt;
  Usar G(x)   para x enseña gratuitamente&lt;br /&gt;
       M(x,y) para x argumenta mejor que y&lt;br /&gt;
       S(x)   para x es un sofista&lt;br /&gt;
       p      para Platón&lt;br /&gt;
       s      para Sócrates&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 38. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todos los filósofos se han preguntado qué es la filosofía. Los que&lt;br /&gt;
     se preguntan qué es la filosofía se vuelven locos. Nietzsche es&lt;br /&gt;
     filósofo. El maestro de Nietzsche no acabó loco. Por tanto,&lt;br /&gt;
     Nietzsche y su maestro son diferentes personas. &lt;br /&gt;
  Usar F(x) para x es filósofo&lt;br /&gt;
       L(x) para x se vuelve loco&lt;br /&gt;
       P(x) para x se ha preguntado qué es la filosofía.&lt;br /&gt;
       m    para el maestro de Nietzsche&lt;br /&gt;
       n    para Nietzsche&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 39. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Los padres son mayores que los hijos. Juan es el padre de Luis. Por&lt;br /&gt;
     tanto, Juan es mayor que Luis.&lt;br /&gt;
  Usar M(x,y) para x es mayor que y&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 40. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     El esposo de la hermana de Toni es Roberto. La hermana de Toni es&lt;br /&gt;
     María. Por tanto, el esposo de María es Roberto. &lt;br /&gt;
  Usar e(x) para el esposo de x&lt;br /&gt;
       h    para la hermana de Toni&lt;br /&gt;
       m    para María&lt;br /&gt;
       r    para Roberto&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 41. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Luis y Jaime tienen el mismo padre. La madre de Rosa es&lt;br /&gt;
     Eva. Eva ama a Carlos. Carlos es el padre de Jaime. Por tanto,&lt;br /&gt;
     la madre de Rosa ama al padre de Luis.&lt;br /&gt;
  Usar A(x,y) para x ama a y&lt;br /&gt;
       m(x)   para la madre de x&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
       e      para Eva&lt;br /&gt;
       j      para Jaime&lt;br /&gt;
       l      para Luis&lt;br /&gt;
       r      para Rosa&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 42. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si dos personas son hermanos, entonces tienen la misma madre y el&lt;br /&gt;
     mismo padre. Juan es hermano de Luis. Por tanto, la madre del padre&lt;br /&gt;
     de Juan es la madre del padre de Luis.&lt;br /&gt;
  Usar H(x,y) para x es hermano de y&lt;br /&gt;
       m(x)   para la madre de x&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 43. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todos los miembros del claustro son asturianos. El secretario forma&lt;br /&gt;
     parte del claustro. El señor Martínez es el secretario. Por tanto,&lt;br /&gt;
     el señor Martínez es asturiano.&lt;br /&gt;
  Usar C(x) para x es miembro del claustro&lt;br /&gt;
       A(x) para x es asturiano&lt;br /&gt;
       s    para el secretario&lt;br /&gt;
       m    para el señor Martínez&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 44. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Eduardo pudo haber visto al asesino. Antonio fue el primer testigo&lt;br /&gt;
     de la defensa. O Eduardo estaba en clase o Antonio dio falso&lt;br /&gt;
     testimonio. Nadie en clase pudo haber visto al asesino. Luego, el&lt;br /&gt;
     primer testigo de la defensa dio falso testimonio. &lt;br /&gt;
  Usar C(x) para x estaba en clase&lt;br /&gt;
       F(x) para x dio falso testimonio&lt;br /&gt;
       V(x) para x pudo haber visto al asesino&lt;br /&gt;
       a    para Antonio&lt;br /&gt;
       e    para Eduardo&lt;br /&gt;
       p    para el primer testigo de la defensa&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 45. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     La luna hoy es redonda. La luna de hace dos semanas tenía forma de&lt;br /&gt;
     cuarto creciente. Luna no hay más que una, es decir, siempre es la&lt;br /&gt;
     misma. Luego existe algo que es a la vez redondo y con forma de&lt;br /&gt;
     cuarto creciente. &lt;br /&gt;
  Usar L(x) para la luna del momento x&lt;br /&gt;
       R(x) para x es redonda&lt;br /&gt;
       C(x) para x tiene forma de cuarto creciente&lt;br /&gt;
       h    para hoy&lt;br /&gt;
       d    para hace dos semanas&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 46. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Juana sólo tiene un marido. Juana está casada con Tomás. Tomás es&lt;br /&gt;
     delgado y Guillermo no. Luego, Juana no está casada con Guillermo. &lt;br /&gt;
  Usar D(x)   para x es delgado&lt;br /&gt;
       C(x,y) para x está casada con y&lt;br /&gt;
       g      para Guillermo&lt;br /&gt;
       j      para Juana&lt;br /&gt;
       t      para Tomás&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 47. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Sultán no es Chitón. Sultán no obtendrá un plátano a menos que&lt;br /&gt;
     pueda resolver cualquier problema. Si el chimpancé Chitón trabaja&lt;br /&gt;
     más que Sultán resolverá problemas que Sultán no puede resolver. &lt;br /&gt;
     Todos los chimpancés distintos de Sultán trabajan más que Sultán. &lt;br /&gt;
     Por consiguiente, Sultán no obtendrá un plátano.&lt;br /&gt;
  Usar Pl(x)  para x obtiene el plátano&lt;br /&gt;
       Pr(x)  para x es un problema&lt;br /&gt;
       R(x,y) para x resuelve y&lt;br /&gt;
       T(x,y) para x trabaja más que y&lt;br /&gt;
       c      para Chitón&lt;br /&gt;
       s      para Sultán&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=R10&amp;diff=243</id>
		<title>R10</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=R10&amp;diff=243"/>
		<updated>2014-12-18T10:12:38Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* R10: Formalización y argumentación con Isabelle/HOL *}  theory R10_Formalizacion_y_argmentacion imports Main  begin  text {*   -----------------...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R10: Formalización y argumentación con Isabelle/HOL *}&lt;br /&gt;
&lt;br /&gt;
theory R10_Formalizacion_y_argmentacion&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta es relación formalizar y demostrar la corrección&lt;br /&gt;
  de los argumentos usando sólo las reglas básicas de deducción natural&lt;br /&gt;
  de la lógica (sin usar el método auto). &lt;br /&gt;
&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
&lt;br /&gt;
  · allI:       ⟦∀x. P x; P x ⟹ R⟧ ⟹ R&lt;br /&gt;
  · allE:       (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
  · exI:        P x ⟹ ∃x. P x&lt;br /&gt;
  · exE:        ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&lt;br /&gt;
&lt;br /&gt;
  · refl:       t = t&lt;br /&gt;
  · subst:      ⟦s = t; P s⟧ ⟹ P t&lt;br /&gt;
  · trans:      ⟦r = s; s = t⟧ ⟹ r = t&lt;br /&gt;
  · sym:        s = t ⟹ t = s&lt;br /&gt;
  · not_sym:    t ≠ s ⟹ s ≠ t&lt;br /&gt;
  · ssubst:     ⟦t = s; P s⟧ ⟹ P t&lt;br /&gt;
  · box_equals: ⟦a = b; a = c; b = d⟧ ⟹ a: = d&lt;br /&gt;
  · arg_cong:   x = y ⟹ f x = f y&lt;br /&gt;
  · fun_cong:   f = g ⟹ f x = g x&lt;br /&gt;
  · cong:       ⟦f = g; x = y⟧ ⟹ f x = g y&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI, mt, no_ex y no_para_todo que demostramos&lt;br /&gt;
  a continuación. &lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma no_ex: &amp;quot;¬(∃x. P(x)) ⟹ ∀x. ¬P(x)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma no_para_todo: &amp;quot;¬(∀x. P(x)) ⟹ ∃x. ¬P(x)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     Si no está el mañana ni el ayer escrito, entonces no está el mañana&lt;br /&gt;
     escrito. &lt;br /&gt;
  Usar M: El mañana está escrito.&lt;br /&gt;
       A: El ayer está escrito.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Siempre que un número x es divisible por 10, acaba en 0. El número&lt;br /&gt;
     x no acaba en 0. Por lo tanto, x no es divisible por 10. &lt;br /&gt;
  Usar D para &amp;quot;el número es divisible por 10&amp;quot; y&lt;br /&gt;
       C para &amp;quot;el número acaba en cero&amp;quot;.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si no hay control de nacimientos, entonces la población crece&lt;br /&gt;
     ilimitadamente; pero si la población crece ilimitadamente,&lt;br /&gt;
     aumentará el índice de pobreza. Por consiguiente, si no hay control&lt;br /&gt;
     de nacimientos, aumentará el índice de pobreza. &lt;br /&gt;
  Usar N: Hay control de nacimientos. &lt;br /&gt;
       P: La población crece ilimitadamente,&lt;br /&gt;
       I: Aumentará el índice de pobreza. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si te llamé por teléfono, entonces recibiste mi llamada y no es&lt;br /&gt;
     cierto que no te avisé del peligro que corrías. Por consiguiente,&lt;br /&gt;
     como te llamé, es cierto que te avisé del peligro que corrías.&lt;br /&gt;
  Usar T: Te llamé por teléfono.&lt;br /&gt;
       R: Recibiste mi llamada.&lt;br /&gt;
       P: Te avisé del peligro que corrías.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si la válvula está abierta o la monitorización está preparada,&lt;br /&gt;
     entonces se envía una señal de reconocimiento y un mensaje de&lt;br /&gt;
     funcionamiento al controlador del ordenador. Si se envía un mensaje &lt;br /&gt;
     de funcionamiento al controlador del ordenador o el sistema está en &lt;br /&gt;
     estado normal, entonces se aceptan las órdenes del operador. Por lo&lt;br /&gt;
     tanto, si la válvula está abierta, entonces se aceptan las órdenes&lt;br /&gt;
     del operador. &lt;br /&gt;
  Usar A : La válvula está abierta.&lt;br /&gt;
       P : La monitorización está preparada.&lt;br /&gt;
       R : Envía una señal de reconocimiento.&lt;br /&gt;
       F : Envía un mensaje de funcionamiento.&lt;br /&gt;
       N : El sistema está en estado normal.&lt;br /&gt;
       O : Se aceptan órdenes del operador.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Cuando tanto la temperatura como la presión atmosférica permanecen&lt;br /&gt;
     contantes, no llueve. La temperatura permanece constante. Por lo&lt;br /&gt;
     tanto, en caso de que llueva, la presión atmosférica no permanece&lt;br /&gt;
     constante. &lt;br /&gt;
  Usar T para &amp;quot;La temperatura permanece constante&amp;quot;,&lt;br /&gt;
       P para &amp;quot;La presión atmosférica permanece constante&amp;quot; y&lt;br /&gt;
       L para &amp;quot;Llueve&amp;quot;.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si el general era leal, hubiera obedecido las órdenes, y si era&lt;br /&gt;
     inteligente las hubiera comprendido. O el general desobedeció las&lt;br /&gt;
     órdenes o no las comprendió. Luego, el general era desleal o no era&lt;br /&gt;
     inteligente. &lt;br /&gt;
  Usar L:  El general es leal.&lt;br /&gt;
       Ob: El general obedece las órdenes.&lt;br /&gt;
       I:  El general es inteligente.&lt;br /&gt;
       C:  El general comprende las órdenes.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Me matan si no trabajo y si trabajo me matan. Me matan siempre me&lt;br /&gt;
     matan. &lt;br /&gt;
  Usar M: Me matan.&lt;br /&gt;
       T: Trabajo.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     En cierto experimento, cuando hemos empleado un fármaco A, el&lt;br /&gt;
     paciente ha mejorado considerablemente en el caso, y sólo en el&lt;br /&gt;
     caso, en que no se haya empleado también un fármaco B. Además, o se&lt;br /&gt;
     ha empleado el fármaco A o se ha empleado el fármaco B. En&lt;br /&gt;
     consecuencia, podemos afirmar que si no hemos empleado el fármaco&lt;br /&gt;
     B, el paciente ha mejorado considerablemente. &lt;br /&gt;
  Usar A: Hemos empleado el fármaco A.&lt;br /&gt;
       B: Hemos empleado el fármaco B.&lt;br /&gt;
       M: El paciente ha mejorado notablemente.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si trabajo gano dinero, pero si no trabajo gozo de la vida. Sin&lt;br /&gt;
     embargo, si trabajo no gozo de la vida, mientras que si no trabajo&lt;br /&gt;
     no gano dinero. Por lo tanto, gozo de la vida si y sólo si no gano&lt;br /&gt;
  dinero. &lt;br /&gt;
  Usar p: Trabajo&lt;br /&gt;
       q: Gano dinero.&lt;br /&gt;
       r: Gozo de la vida.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Formalizar, y demostrar la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si Dios fuera capaz de evitar el mal y quisiera hacerlo, lo&lt;br /&gt;
     haría. Si Dios fuera incapaz de evitar el mal, no sería&lt;br /&gt;
     omnipotente; si no quisiera evitar el mal sería malévolo. Dios no&lt;br /&gt;
     evita el mal. Si Dios existe, es omnipotente y no es&lt;br /&gt;
     malévolo. Luego, Dios no existe. &lt;br /&gt;
  Usar C:  Dios es capaz de evitar el mal.&lt;br /&gt;
       Q:  Dios quiere evitar el mal.&lt;br /&gt;
       Om: Dios es omnipotente.&lt;br /&gt;
       M:  Dios es malévolo.&lt;br /&gt;
       P:  Dios evita el mal.&lt;br /&gt;
       E:  Dios existe.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Sócrates es un hombre. &lt;br /&gt;
     Los hombres son mortales. &lt;br /&gt;
     Luego, Sócrates es mortal.&lt;br /&gt;
  Usar s    para Sócrates&lt;br /&gt;
       H(x) para x es un hombre          &lt;br /&gt;
       M(x) para x es mortal&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Hay estudiantes inteligentes y hay estudiantes trabajadores. Por&lt;br /&gt;
     tanto, hay estudiantes inteligentes y trabajadores.&lt;br /&gt;
  Usar I(x) para x es inteligente&lt;br /&gt;
       T(x) para x es trabajador&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todos los participantes son vencedores. Hay como máximo un&lt;br /&gt;
     vencedor. Hay como máximo un participante. Por lo tanto, hay&lt;br /&gt;
     exactamente un participante. &lt;br /&gt;
  Usar P(x) para x es un participante&lt;br /&gt;
       V(x) para x es un vencedor&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todo aquel que entre en el país y no sea un VIP será cacheado por&lt;br /&gt;
     un aduanero. Hay un contrabandista que entra en el país y que solo&lt;br /&gt;
     podrá ser cacheado por contrabandistas. Ningún contrabandista es un&lt;br /&gt;
     VIP. Por tanto, algún aduanero es contrabandista.&lt;br /&gt;
  Usar A(x)    para x es aduanero&lt;br /&gt;
       Ca(x,y) para x cachea a y&lt;br /&gt;
       Co(x)   para x es contrabandista&lt;br /&gt;
       E(x)    para x entra en el pais&lt;br /&gt;
       V(x)    para x es un VIP&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Juan teme a María. Pedro es temido por Juan. Luego, alguien teme a&lt;br /&gt;
     María y a Pedro.&lt;br /&gt;
  Usar j      para Juan  &lt;br /&gt;
       m      para María&lt;br /&gt;
       p      para Pedro&lt;br /&gt;
       T(x,y) para x teme a y&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Los hermanos tienen el mismo padre. Juan es hermano de Luis. Carlos&lt;br /&gt;
     es padre de Luis. Por tanto, Carlos es padre de Juan.&lt;br /&gt;
  Usar H(x,y) para x es hermano de y&lt;br /&gt;
       P(x,y) para x es padre de y&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     La existencia de algún canal de TV pública, supone un acicate para&lt;br /&gt;
     cualquier canal de TV privada; el que un canal de TV tenga un&lt;br /&gt;
     acicate, supone una gran satisfacción para cualquiera de sus&lt;br /&gt;
     directivos; en Madrid hay varios canales públicos de TV; TV5 es un&lt;br /&gt;
     canal de TV privada; por tanto, todos los directivos de TV5 están&lt;br /&gt;
     satisfechos. &lt;br /&gt;
  Usar Pu(x)  para x es un canal de TV pública&lt;br /&gt;
       Pr(x)  para x es un canal de TV privada&lt;br /&gt;
       A(x)   para x posee un acicate&lt;br /&gt;
       D(x,y) para x es un directivo del canal y&lt;br /&gt;
       S(x)   para x está satisfecho &lt;br /&gt;
       t      para TV5&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Quien intente entrar en un país y no tenga pasaporte, encontrará&lt;br /&gt;
     algún aduanero que le impida el paso. A algunas personas&lt;br /&gt;
     motorizadas que intentan entrar en un país le impiden el paso&lt;br /&gt;
     únicamente personas motorizadas. Ninguna persona motorizada tiene&lt;br /&gt;
     pasaporte. Por tanto, ciertos aduaneros están motorizados.&lt;br /&gt;
  Usar E(x)   para x entra en un país&lt;br /&gt;
       P(x)   para x tiene pasaporte&lt;br /&gt;
       A(x)   para x es aduanero&lt;br /&gt;
       I(x,y) para x impide el paso a y&lt;br /&gt;
       M(x)   para x está motorizada&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Los aficionados al fútbol aplauden a cualquier futbolista&lt;br /&gt;
     extranjero. Juanito no aplaude a futbolistas extranjeros. Por&lt;br /&gt;
     tanto, si hay algún futbolista extranjero nacionalizado español,&lt;br /&gt;
     Juanito no es aficionado al fútbol.&lt;br /&gt;
  Usar Af(x)   para x es aficicionado al fútbol&lt;br /&gt;
       Ap(x,y) para x aplaude a y&lt;br /&gt;
       E(x)    para x es un futbolista extranjero&lt;br /&gt;
       N(x)    para x es un futbolista nacionalizado español&lt;br /&gt;
       j       para Juanito&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Ningún aristócrata debe ser condenado a galeras a menos que sus&lt;br /&gt;
     crímenes sean vergonzosos y lleve una vida licenciosa. En la ciudad&lt;br /&gt;
     hay aristócratas que han cometido crímenes vergonzosos aunque su&lt;br /&gt;
     forma de vida no sea licenciosa. Por tanto, hay algún aristócrata&lt;br /&gt;
     que no está condenado a galeras. &lt;br /&gt;
  Usar A(x)  para x es aristócrata&lt;br /&gt;
       G(x)  para x está condenado a galeras&lt;br /&gt;
       L(x)  para x lleva una vida licenciosa&lt;br /&gt;
       V(x)  para x ha cometido crímenes vergonzoso&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todo individuo que esté conforme con el contenido de cualquier&lt;br /&gt;
     acuerdo internacional lo apoya o se inhibe en absoluto de asuntos&lt;br /&gt;
     políticos. Cualquiera que se inhiba de los asuntos políticos, no&lt;br /&gt;
     participará en el próximo referéndum. Todo español, está conforme&lt;br /&gt;
     con el acuerdo internacional de Maastricht, al que sin embargo no&lt;br /&gt;
     apoya. Por tanto, cualquier individuo o no es español, o en otro&lt;br /&gt;
     caso, está conforme con el contenido del acuerdo internacional de&lt;br /&gt;
     Maastricht y no participará en el próximo referéndum. &lt;br /&gt;
  Usar C(x,y) para la persona x conforme con el contenido del acuerdo y&lt;br /&gt;
       A(x,y) para la persona x apoya el acuerdo y&lt;br /&gt;
       I(x)   para la persona x se inibe de asuntos políticos&lt;br /&gt;
       R(x)   para la persona x participará en el próximo referéndum&lt;br /&gt;
       E(x)   para la persona x es española&lt;br /&gt;
       m      para el acuerdo de Maastricht&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Toda persona pobre tiene un padre rico. Por tanto, existe una&lt;br /&gt;
     persona rica que tiene un abuelo rico.&lt;br /&gt;
  Usar R(x) para x es rico&lt;br /&gt;
       p(x) para el padre de x&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todo deprimido que estima a un submarinista es listo. Cualquiera&lt;br /&gt;
     que se estime a sí mismo es listo. Ningún deprimido se estima a sí&lt;br /&gt;
     mismo. Por tanto, ningún deprimido estima a un submarinista.&lt;br /&gt;
  Usar D(x)   para x está deprimido&lt;br /&gt;
       E(x,y) para x estima a y&lt;br /&gt;
       L(x)   para x es listo&lt;br /&gt;
       S(x)   para x es submarinista&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todos los robots obedecen a los amigos del programador jefe.&lt;br /&gt;
     Alvaro es amigo del programador jefe, pero Benito no le&lt;br /&gt;
     obedece. Por tanto, Benito no es un robot.&lt;br /&gt;
  Usar R(x)    para x es un robot&lt;br /&gt;
       Ob(x,y) para x obedece a y&lt;br /&gt;
       A(x)    para x es amigo del programador jefe&lt;br /&gt;
       b       para Benito&lt;br /&gt;
       a       para Alvaro&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     En una pecera nadan una serie de peces. Se observa que:&lt;br /&gt;
     * Hay algún pez x que para cualquier pez y, si el pez x no se come&lt;br /&gt;
       al pez y entonces existe un pez z tal que z es un tiburón o bien&lt;br /&gt;
       z protege al pez y. &lt;br /&gt;
     * No hay ningún pez que se coma a todos los demás.&lt;br /&gt;
     * Ningún pez protege a ningún otro.&lt;br /&gt;
     Por tanto, existe algún tiburón en la pecera.&lt;br /&gt;
  Usar C(x,y) para x se come a y &lt;br /&gt;
       P(x,y) para x protege a y&lt;br /&gt;
       T(x)   para x es un tiburón&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Supongamos conocidos los siguientes hechos acerca del número de&lt;br /&gt;
     aprobados de dos asignaturas A y B: &lt;br /&gt;
     * Si todos los alumnos aprueban la asignatura A, entonces todos&lt;br /&gt;
       aprueban la asignatura B.&lt;br /&gt;
     * Si algún delegado de la clase aprueba A y B, entonces todos los &lt;br /&gt;
       alumnos aprueban A.&lt;br /&gt;
     * Si nadie aprueba B, entonces ningún delegado aprueba A.&lt;br /&gt;
     * Si Manuel no aprueba B, entonces nadie aprueba B.&lt;br /&gt;
     Por tanto, si Manuel es un delegado y aprueba la asignatura A,&lt;br /&gt;
     entonces todos los alumnos aprueban las asignaturas A y B.&lt;br /&gt;
  Usar A(x,y) para x aprueba la asignatura y&lt;br /&gt;
       D(x)   para x es delegado&lt;br /&gt;
       m      para Manuel&lt;br /&gt;
       a      para la asignatura A&lt;br /&gt;
       b      para la asignatura B&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     En cierto país oriental se ha celebrado la fase final del&lt;br /&gt;
     campeonato mundial de fútbol. Cierto diario deportivo ha publicado&lt;br /&gt;
     las siguientes estadísticas de tan magno acontecimiento: &lt;br /&gt;
     * A todos los porteros que no vistieron camiseta negra les marcó un&lt;br /&gt;
       gol algún delantero europeo.  &lt;br /&gt;
     * Algún portero jugó con botas blancas y sólo le marcaron goles&lt;br /&gt;
       jugadores con botas blancas.  &lt;br /&gt;
     * Ningún portero se marcó un gol a sí mismo. &lt;br /&gt;
     * Ningún jugador con botas blancas vistió camiseta negra. &lt;br /&gt;
     Por tanto, algún delantero europeo jugó con botas blancas.&lt;br /&gt;
  Usar P(x)   para x es portero&lt;br /&gt;
       D(x)   para x es delantero europeo &lt;br /&gt;
       N(x)   para x viste camiseta negra&lt;br /&gt;
       B(x)   para x juega con botas blancas &lt;br /&gt;
       M(x,y) para x marcó un gol a y&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Las relaciones de parentesco verifican la siguientes propiedades&lt;br /&gt;
     generales:  &lt;br /&gt;
     * Si x es hermano de y, entonces y es hermano de x. &lt;br /&gt;
     * Todo el mundo es hijo de alguien. &lt;br /&gt;
     * Nadie es hijo del hermano de su padre. &lt;br /&gt;
     * Cualquier padre de una persona es también padre de todos los&lt;br /&gt;
       hermanos de esa persona. &lt;br /&gt;
     * Nadie es hijo ni hermano de sí mismo. &lt;br /&gt;
     Tenemos los siguientes miembros de la familia Peláez: Don Antonio,&lt;br /&gt;
     Don Luis, Antoñito y Manolito y sabemos que Don Antonio y Don Luis&lt;br /&gt;
     son hermanos, Antoñito y Manolito son hermanos, y Antoñito es hijo&lt;br /&gt;
     de Don Antonio. Por tanto, Don Luis no es el padre de Manolito.&lt;br /&gt;
  Usar A       para Don Antonio&lt;br /&gt;
       He(x,y) para x es hermano de y &lt;br /&gt;
       Hi(x,y) para x es hijo de y  &lt;br /&gt;
       L       para Don Luis&lt;br /&gt;
       a       para Antoñito&lt;br /&gt;
       m       para Manolito&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. [Problema del apisonador de Schubert (en inglés, &lt;br /&gt;
  &amp;quot;Schubert’s steamroller&amp;quot;)] Formalizar, y decidir la corrección, del&lt;br /&gt;
  siguiente argumento &lt;br /&gt;
     Si uno de los miembros del club afeita a algún otro (incluido a&lt;br /&gt;
     sí mismo), entonces todos los miembros del club lo han afeitado&lt;br /&gt;
     a él (aunque no necesariamente al mismo tiempo). Guido, Lorenzo,&lt;br /&gt;
     Petruccio y Cesare pertenecen al club de barberos. Guido ha&lt;br /&gt;
     afeitado a Cesare. Por tanto, Petruccio ha afeitado a Lorenzo.&lt;br /&gt;
  Usar g      para Guido&lt;br /&gt;
       l      para Lorenzo&lt;br /&gt;
       p      para Petruccio&lt;br /&gt;
       c      para Cesare&lt;br /&gt;
       B(x)   para x es un miembro del club de barberos&lt;br /&gt;
       A(x,y) para x ha afeitado a y&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Carlos afeita a todos los habitantes de Las Chinas que no se&lt;br /&gt;
     afeitan a sí mismo y sólo a ellos. Carlos es un habitante de las&lt;br /&gt;
     Chinas. Por consiguiente, Carlos no afeita a nadie.&lt;br /&gt;
  Usar A(x,y) para x afeita a y&lt;br /&gt;
       C(x)   para x es un habitante de Las Chinas&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     Quien desprecia a todos los fanáticos desprecia también a todos los&lt;br /&gt;
     políticos. Alguien no desprecia a un determinado político. Por&lt;br /&gt;
     consiguiente, hay un fanático al que no todo el mundo desprecia.&lt;br /&gt;
   Usar D(x,y) para x desprecia a y&lt;br /&gt;
        F(x)   para x es fanático&lt;br /&gt;
        P(x)   para x es político&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     El hombre puro ama todo lo que es puro. Por tanto, el hombre puro&lt;br /&gt;
     se ama a sí mismo.&lt;br /&gt;
  Usar A(x,y) para x ama a y&lt;br /&gt;
       H(x)   para x es un hombre&lt;br /&gt;
       P(x)   para x es puro&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     Ningún socio del club está en deuda con el tesorero del club. Si&lt;br /&gt;
     un socio del club no paga su cuota está en deuda con el tesorero&lt;br /&gt;
     del club. Por tanto, si el tesorero del club es socio del club,&lt;br /&gt;
     entonces paga su cuota. &lt;br /&gt;
  Usar P(x) para x es socio del club&lt;br /&gt;
       Q(x) para x paga su cuota&lt;br /&gt;
       R(x) para x está en deuda con el tesorero&lt;br /&gt;
       a    para el tesorero del club&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento&lt;br /&gt;
     1. Los lobos, zorros, pájaros, orugas y caracoles son animales y&lt;br /&gt;
        existen algunos ejemplares de estos animales. &lt;br /&gt;
     2. También hay algunas semillas y las semillas son plantas. &lt;br /&gt;
     3. A todo animal le gusta o bien comer todo tipo de plantas o bien&lt;br /&gt;
        le gusta comerse a todos los animales más pequeños que él mismo&lt;br /&gt;
        que gustan de comer algunas plantas. &lt;br /&gt;
     4. Las orugas y los caracoles son mucho más pequeños que los&lt;br /&gt;
        pájaros, que son mucho más pequeños que los zorros que a su vez&lt;br /&gt;
        son mucho más pequeños que los lobos. &lt;br /&gt;
     5. A los lobos no les gusta comer ni zorros ni semillas, mientras&lt;br /&gt;
        que a los pájaros les gusta comer orugas pero no caracoles. &lt;br /&gt;
     6. Las orugas y los caracoles gustan de comer algunas plantas. &lt;br /&gt;
     7. Luego, existe un animal al que le gusta comerse un animal al que&lt;br /&gt;
        le gusta comer semillas.  &lt;br /&gt;
  Usar A(x)    para x es un animal&lt;br /&gt;
       Ca(x)   para x es un caracol&lt;br /&gt;
       Co(x,y) para x le gusta comerse a y&lt;br /&gt;
       L(x)    para x es un lobo&lt;br /&gt;
       M(x,y)  para x es más pequeño que y&lt;br /&gt;
       Or(x)   para x es una oruga&lt;br /&gt;
       Pa(x)   para x es un pájaro&lt;br /&gt;
       Pl(x)   para x es una planta&lt;br /&gt;
       S(x)    para x es una semilla&lt;br /&gt;
       Z(x)    para x es un zorro&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Rosa ama a Curro. Paco no simpatiza con Ana. Quien no simpatiza con&lt;br /&gt;
     Ana ama a Rosa. Si una persona ama a otra, la segunda ama a la&lt;br /&gt;
     primera. Hay como máximo una persona que ama a Rosa. Por tanto,&lt;br /&gt;
     Paco es Curro. &lt;br /&gt;
  Usar A(x,y) para x ama a y &lt;br /&gt;
       S(x,y) para x simpatiza con y &lt;br /&gt;
       a      para Ana&lt;br /&gt;
       c      para Curro&lt;br /&gt;
       p      para Paco &lt;br /&gt;
       r      para Rosa&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Sólo hay un sofista que enseña gratuitamente, y éste es&lt;br /&gt;
     Sócrates. Sócrates argumenta mejor que ningún otro sofista. Platón&lt;br /&gt;
     argumenta mejor que algún sofista que enseña gratuitamente. Si una&lt;br /&gt;
     persona argumenta mejor que otra segunda, entonces la segunda no&lt;br /&gt;
     argumenta mejor que la primera. Por consiguiente, Platón no es un&lt;br /&gt;
     sofista. &lt;br /&gt;
  Usar G(x)   para x enseña gratuitamente&lt;br /&gt;
       M(x,y) para x argumenta mejor que y&lt;br /&gt;
       S(x)   para x es un sofista&lt;br /&gt;
       p      para Platón&lt;br /&gt;
       s      para Sócrates&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 38. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todos los filósofos se han preguntado qué es la filosofía. Los que&lt;br /&gt;
     se preguntan qué es la filosofía se vuelven locos. Nietzsche es&lt;br /&gt;
     filósofo. El maestro de Nietzsche no acabó loco. Por tanto,&lt;br /&gt;
     Nietzsche y su maestro son diferentes personas. &lt;br /&gt;
  Usar F(x) para x es filósofo&lt;br /&gt;
       L(x) para x se vuelve loco&lt;br /&gt;
       P(x) para x se ha preguntado qué es la filosofía.&lt;br /&gt;
       m    para el maestro de Nietzsche&lt;br /&gt;
       n    para Nietzsche&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 39. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Los padres son mayores que los hijos. Juan es el padre de Luis. Por&lt;br /&gt;
     tanto, Juan es mayor que Luis.&lt;br /&gt;
  Usar M(x,y) para x es mayor que y&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 40. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     El esposo de la hermana de Toni es Roberto. La hermana de Toni es&lt;br /&gt;
     María. Por tanto, el esposo de María es Roberto. &lt;br /&gt;
  Usar e(x) para el esposo de x&lt;br /&gt;
       h    para la hermana de Toni&lt;br /&gt;
       m    para María&lt;br /&gt;
       r    para Roberto&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 41. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Luis y Jaime tienen el mismo padre. La madre de Rosa es&lt;br /&gt;
     Eva. Eva ama a Carlos. Carlos es el padre de Jaime. Por tanto,&lt;br /&gt;
     la madre de Rosa ama al padre de Luis.&lt;br /&gt;
  Usar A(x,y) para x ama a y&lt;br /&gt;
       m(x)   para la madre de x&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       c      para Carlos&lt;br /&gt;
       e      para Eva&lt;br /&gt;
       j      para Jaime&lt;br /&gt;
       l      para Luis&lt;br /&gt;
       r      para Rosa&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 42. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Si dos personas son hermanos, entonces tienen la misma madre y el&lt;br /&gt;
     mismo padre. Juan es hermano de Luis. Por tanto, la madre del padre&lt;br /&gt;
     de Juan es la madre del padre de Luis.&lt;br /&gt;
  Usar H(x,y) para x es hermano de y&lt;br /&gt;
       m(x)   para la madre de x&lt;br /&gt;
       p(x)   para el padre de x&lt;br /&gt;
       j      para Juan&lt;br /&gt;
       l      para Luis&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 43. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Todos los miembros del claustro son asturianos. El secretario forma&lt;br /&gt;
     parte del claustro. El señor Martínez es el secretario. Por tanto,&lt;br /&gt;
     el señor Martínez es asturiano.&lt;br /&gt;
  Usar C(x) para x es miembro del claustro&lt;br /&gt;
       A(x) para x es asturiano&lt;br /&gt;
       s    para el secretario&lt;br /&gt;
       m    para el señor Martínez&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 44. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Eduardo pudo haber visto al asesino. Antonio fue el primer testigo&lt;br /&gt;
     de la defensa. O Eduardo estaba en clase o Antonio dio falso&lt;br /&gt;
     testimonio. Nadie en clase pudo haber visto al asesino. Luego, el&lt;br /&gt;
     primer testigo de la defensa dio falso testimonio. &lt;br /&gt;
  Usar C(x) para x estaba en clase&lt;br /&gt;
       F(x) para x dio falso testimonio&lt;br /&gt;
       V(x) para x pudo haber visto al asesino&lt;br /&gt;
       a    para Antonio&lt;br /&gt;
       e    para Eduardo&lt;br /&gt;
       p    para el primer testigo de la defensa&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 45. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     La luna hoy es redonda. La luna de hace dos semanas tenía forma de&lt;br /&gt;
     cuarto creciente. Luna no hay más que una, es decir, siempre es la&lt;br /&gt;
     misma. Luego existe algo que es a la vez redondo y con forma de&lt;br /&gt;
     cuarto creciente. &lt;br /&gt;
  Usar L(x) para la luna del momento x&lt;br /&gt;
       R(x) para x es redonda&lt;br /&gt;
       C(x) para x tiene forma de cuarto creciente&lt;br /&gt;
       h    para hoy&lt;br /&gt;
       d    para hace dos semanas&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 46. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Juana sólo tiene un marido. Juana está casada con Tomás. Tomás es&lt;br /&gt;
     delgado y Guillermo no. Luego, Juana no está casada con Guillermo. &lt;br /&gt;
  Usar D(x)   para x es delgado&lt;br /&gt;
       C(x,y) para x está casada con y&lt;br /&gt;
       g      para Guillermo&lt;br /&gt;
       j      para Juana&lt;br /&gt;
       t      para Tomás&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 47. Formalizar, y decidir la corrección, del siguiente&lt;br /&gt;
  argumento &lt;br /&gt;
     Sultán no es Chitón. Sultán no obtendrá un plátano a menos que&lt;br /&gt;
     pueda resolver cualquier problema. Si el chimpancé Chitón trabaja&lt;br /&gt;
     más que Sultán resolverá problemas que Sultán no puede resolver. &lt;br /&gt;
     Todos los chimpancés distintos de Sultán trabajan más que Sultán. &lt;br /&gt;
     Por consiguiente, Sultán no obtendrá un plátano.&lt;br /&gt;
  Usar Pl(x)  para x obtiene el plátano&lt;br /&gt;
       Pr(x)  para x es un problema&lt;br /&gt;
       R(x,y) para x resuelve y&lt;br /&gt;
       T(x,y) para x trabaja más que y&lt;br /&gt;
       c      para Chitón&lt;br /&gt;
       s      para Sultán&lt;br /&gt;
   ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Relaci%C3%B3n_9&amp;diff=242</id>
		<title>Relación 9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Relaci%C3%B3n_9&amp;diff=242"/>
		<updated>2014-12-18T10:11:24Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* R9: Deducción natural en Isabelle/HOL *}  theory R9 imports Main  begin  text {*   Demostrar o refutar los siguientes lemas usando sólo las regl...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R9: Deducción natural en Isabelle/HOL *}&lt;br /&gt;
&lt;br /&gt;
theory R9&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Demostrar o refutar los siguientes lemas usando sólo las reglas&lt;br /&gt;
  básicas de deducción natural de la lógica proposicional, de los&lt;br /&gt;
  cuantificadores y de la igualdad: &lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
&lt;br /&gt;
  · allI:       ⟦∀x. P x; P x ⟹ R⟧ ⟹ R&lt;br /&gt;
  · allE:       (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
  · exI:        P x ⟹ ∃x. P x&lt;br /&gt;
  · exE:        ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&lt;br /&gt;
&lt;br /&gt;
  · refl:       t = t&lt;br /&gt;
  · subst:      ⟦s = t; P s⟧ ⟹ P t&lt;br /&gt;
  · trans:      ⟦r = s; s = t⟧ ⟹ r = t&lt;br /&gt;
  · sym:        s = t ⟹ t = s&lt;br /&gt;
  · not_sym:    t ≠ s ⟹ s ≠ t&lt;br /&gt;
  · ssubst:     ⟦t = s; P s⟧ ⟹ P t&lt;br /&gt;
  · box_equals: ⟦a = b; a = c; b = d⟧ ⟹ a: = d&lt;br /&gt;
  · arg_cong:   x = y ⟹ f x = f y&lt;br /&gt;
  · fun_cong:   f = g ⟹ f x = g x&lt;br /&gt;
  · cong:       ⟦f = g; x = y⟧ ⟹ f x = g y&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI, mt y not_ex que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma no_ex: &amp;quot;¬(∃x. P(x)) ⟹ ∀x. ¬P(x)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ∨ q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar&lt;br /&gt;
       P a ⟶ (∃x. Q x) ⊢ ∃x. P a ⟶ Q x &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar&lt;br /&gt;
       {∀x y z. R x y ∧ R y z ⟶ R x z, &lt;br /&gt;
        ∀x. ¬(R x x)}&lt;br /&gt;
       ⊢ ∀x y. R x y ⟶ ¬(R y x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
       (∀x. ∃y. P x y) ⟶ (∃y. ∀x. P x y)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
       (∃y. ∀x. P x y) ⟶ (∀x. ∃y. P x y)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     {∀x. P a x x, &lt;br /&gt;
      ∀x y z. P x y z ⟶ P (f x) y (f z)⟧&lt;br /&gt;
     ⊢ ∃z. P (f a) z (f (f a))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     {∀y. Q a y, &lt;br /&gt;
      ∀x y. Q x y ⟶ Q (s x) (s y)} &lt;br /&gt;
     ⊢ ∃z. Qa z ∧ Q z (s (s a))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=R9&amp;diff=241</id>
		<title>R9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=R9&amp;diff=241"/>
		<updated>2014-12-18T10:10:45Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Protegió «R9» ([edit=sysop] (indefinido) [move=sysop] (indefinido))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R9: Deducción natural en Isabelle/HOL *}&lt;br /&gt;
&lt;br /&gt;
theory R9&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Demostrar o refutar los siguientes lemas usando sólo las reglas&lt;br /&gt;
  básicas de deducción natural de la lógica proposicional, de los&lt;br /&gt;
  cuantificadores y de la igualdad: &lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
&lt;br /&gt;
  · allI:       ⟦∀x. P x; P x ⟹ R⟧ ⟹ R&lt;br /&gt;
  · allE:       (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
  · exI:        P x ⟹ ∃x. P x&lt;br /&gt;
  · exE:        ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&lt;br /&gt;
&lt;br /&gt;
  · refl:       t = t&lt;br /&gt;
  · subst:      ⟦s = t; P s⟧ ⟹ P t&lt;br /&gt;
  · trans:      ⟦r = s; s = t⟧ ⟹ r = t&lt;br /&gt;
  · sym:        s = t ⟹ t = s&lt;br /&gt;
  · not_sym:    t ≠ s ⟹ s ≠ t&lt;br /&gt;
  · ssubst:     ⟦t = s; P s⟧ ⟹ P t&lt;br /&gt;
  · box_equals: ⟦a = b; a = c; b = d⟧ ⟹ a: = d&lt;br /&gt;
  · arg_cong:   x = y ⟹ f x = f y&lt;br /&gt;
  · fun_cong:   f = g ⟹ f x = g x&lt;br /&gt;
  · cong:       ⟦f = g; x = y⟧ ⟹ f x = g y&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI, mt y not_ex que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma no_ex: &amp;quot;¬(∃x. P(x)) ⟹ ∀x. ¬P(x)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ∨ q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar&lt;br /&gt;
       P a ⟶ (∃x. Q x) ⊢ ∃x. P a ⟶ Q x &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar&lt;br /&gt;
       {∀x y z. R x y ∧ R y z ⟶ R x z, &lt;br /&gt;
        ∀x. ¬(R x x)}&lt;br /&gt;
       ⊢ ∀x y. R x y ⟶ ¬(R y x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
       (∀x. ∃y. P x y) ⟶ (∃y. ∀x. P x y)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
       (∃y. ∀x. P x y) ⟶ (∀x. ∃y. P x y)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     {∀x. P a x x, &lt;br /&gt;
      ∀x y z. P x y z ⟶ P (f x) y (f z)⟧&lt;br /&gt;
     ⊢ ∃z. P (f a) z (f (f a))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     {∀y. Q a y, &lt;br /&gt;
      ∀x y. Q x y ⟶ Q (s x) (s y)} &lt;br /&gt;
     ⊢ ∃z. Qa z ∧ Q z (s (s a))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=R9&amp;diff=240</id>
		<title>R9</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=R9&amp;diff=240"/>
		<updated>2014-12-18T10:10:28Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* R9: Deducción natural en Isabelle/HOL *}  theory R9 imports Main  begin  text {*   Demostrar o refutar los siguientes lemas usando sólo las regl...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R9: Deducción natural en Isabelle/HOL *}&lt;br /&gt;
&lt;br /&gt;
theory R9&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Demostrar o refutar los siguientes lemas usando sólo las reglas&lt;br /&gt;
  básicas de deducción natural de la lógica proposicional, de los&lt;br /&gt;
  cuantificadores y de la igualdad: &lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
&lt;br /&gt;
  · allI:       ⟦∀x. P x; P x ⟹ R⟧ ⟹ R&lt;br /&gt;
  · allE:       (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
  · exI:        P x ⟹ ∃x. P x&lt;br /&gt;
  · exE:        ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&lt;br /&gt;
&lt;br /&gt;
  · refl:       t = t&lt;br /&gt;
  · subst:      ⟦s = t; P s⟧ ⟹ P t&lt;br /&gt;
  · trans:      ⟦r = s; s = t⟧ ⟹ r = t&lt;br /&gt;
  · sym:        s = t ⟹ t = s&lt;br /&gt;
  · not_sym:    t ≠ s ⟹ s ≠ t&lt;br /&gt;
  · ssubst:     ⟦t = s; P s⟧ ⟹ P t&lt;br /&gt;
  · box_equals: ⟦a = b; a = c; b = d⟧ ⟹ a: = d&lt;br /&gt;
  · arg_cong:   x = y ⟹ f x = f y&lt;br /&gt;
  · fun_cong:   f = g ⟹ f x = g x&lt;br /&gt;
  · cong:       ⟦f = g; x = y⟧ ⟹ f x = g y&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI, mt y not_ex que demostramos a continuación.&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma no_ex: &amp;quot;¬(∃x. P(x)) ⟹ ∀x. ¬P(x)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
     p ∨ q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar&lt;br /&gt;
       P a ⟶ (∃x. Q x) ⊢ ∃x. P a ⟶ Q x &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar&lt;br /&gt;
       {∀x y z. R x y ∧ R y z ⟶ R x z, &lt;br /&gt;
        ∀x. ¬(R x x)}&lt;br /&gt;
       ⊢ ∀x y. R x y ⟶ ¬(R y x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
       (∀x. ∃y. P x y) ⟶ (∃y. ∀x. P x y)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
       (∃y. ∀x. P x y) ⟶ (∀x. ∃y. P x y)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     {∀x. P a x x, &lt;br /&gt;
      ∀x y z. P x y z ⟶ P (f x) y (f z)⟧&lt;br /&gt;
     ⊢ ∃z. P (f a) z (f (f a))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     {∀y. Q a y, &lt;br /&gt;
      ∀x y. Q x y ⟶ Q (s x) (s y)} &lt;br /&gt;
     ⊢ ∃z. Qa z ∧ Q z (s (s a))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Ejercicios&amp;diff=239</id>
		<title>Ejercicios</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Ejercicios&amp;diff=239"/>
		<updated>2014-12-18T10:07:14Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: /* Relaciones de ejercicios propuestos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Relaciones de ejercicios ==&lt;br /&gt;
&lt;br /&gt;
=== Relaciones de ejercicios propuestos ===&lt;br /&gt;
&lt;br /&gt;
En esta sección se publicarán las relaciones de ejercicios. Las soluciones se escriben de forma colaborativa por los alumnos del curso y no deben tomarse como definitivas.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 1&amp;#039;&amp;#039;&amp;#039;: Programación funcional en Isabelle/HOL. ([[R1 |Enunciado]] y [[Relación 1 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 2&amp;#039;&amp;#039;&amp;#039;: Razonamiento automático sobre programas en Isabelle/HOL. ([[R2 |Enunciado]] y [[Relación 2 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 3&amp;#039;&amp;#039;&amp;#039;: Razonamiento estructurado sobre programas en Isabelle/HOL. ([[R3 |Enunciado]] y [[Relación 3 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 4&amp;#039;&amp;#039;&amp;#039;: Cons inverso. ([[R4 |Enunciado]] y [[Relación 4 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 5&amp;#039;&amp;#039;&amp;#039;: Cuantificadores sobre listas. ([[R5 |Enunciado]] y [[Relación 5 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 6&amp;#039;&amp;#039;&amp;#039;: Sustitución, inversión y eliminación. ([[R6 |Enunciado]] y [[Relación 6 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 7&amp;#039;&amp;#039;&amp;#039;: Recorridos de árboles. ([[R7 |Enunciado]] y [[Relación 7 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 8&amp;#039;&amp;#039;&amp;#039;: Árboles binarios completos. ([[R8 |Enunciado]] y [[Relación 8 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 9&amp;#039;&amp;#039;&amp;#039;: Deducción natural en Isabelle/HOL. ([[R9 |Enunciado]] y [[Relación 9 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 10&amp;#039;&amp;#039;&amp;#039;: Formalización y argumentación en Isabelle/HOL. ([[R10 |Enunciado]] y [[Relación 10 | Solución colaborativa]]).&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 12&amp;#039;&amp;#039;&amp;#039;: Representación de fórmulas proposicionales mediante polinomios. ([[R12 |Enunciado]] y [[Relación 12 | Solución colaborativa]]).&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_8b:_Deducci%C3%B3n_natural_en_l%C3%B3gica_de_primer_orden_con_Isabelle/HOL&amp;diff=238</id>
		<title>Tema 8b: Deducción natural en lógica de primer orden con Isabelle/HOL</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_8b:_Deducci%C3%B3n_natural_en_l%C3%B3gica_de_primer_orden_con_Isabelle/HOL&amp;diff=238"/>
		<updated>2014-12-18T09:26:01Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* Tema 8: Deducción natural en lógica de primer orden *}  theory T8b imports Main  begin  text {*   El objetivo de este tema es presentar la deduc...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* Tema 8: Deducción natural en lógica de primer orden *}&lt;br /&gt;
&lt;br /&gt;
theory T8b&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El objetivo de este tema es presentar la deducción natural en &lt;br /&gt;
  lógica de primer orden con Isabelle/HOL. La presentación se &lt;br /&gt;
  basa en los ejemplos de tema 8 del curso LMF que se encuentra &lt;br /&gt;
  en http://goo.gl/uJj8d (que a su vez se basa en el libro de &lt;br /&gt;
  Huth y Ryan &amp;quot;Logic in Computer Science&amp;quot; http://goo.gl/qsVpY ). &lt;br /&gt;
&lt;br /&gt;
  La página al lado de cada ejemplo indica la página de las &lt;br /&gt;
  transparencias de LMF donde se encuentra la demostración. *}&lt;br /&gt;
&lt;br /&gt;
section {* Reglas del cuantificador universal *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Las reglas del cuantificador universal son&lt;br /&gt;
  · allE:    ⟦∀x. P x; P a ⟹ R⟧ ⟹ R&lt;br /&gt;
  · allI:    (⋀x. P x) ⟹ ∀x. P x&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 1 (p. 10). Demostrar que&lt;br /&gt;
     P(c), ∀x. (P(x) ⟶ ¬Q(x)) ⊢ ¬Q(c)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_1a: &lt;br /&gt;
  assumes 1: &amp;quot;P(c)&amp;quot; and&lt;br /&gt;
          2: &amp;quot;∀x. (P(x) ⟶ ¬Q(x))&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬Q(c)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 3: &amp;quot;P(c) ⟶ ¬Q(c)&amp;quot; using 2 by (rule allE)&lt;br /&gt;
  show 4: &amp;quot;¬Q(c)&amp;quot; using 3 1 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_1b: &lt;br /&gt;
  assumes &amp;quot;P(c)&amp;quot;&lt;br /&gt;
          &amp;quot;∀x. (P(x) ⟶ ¬Q(x))&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬Q(c)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;P(c) ⟶ ¬Q(c)&amp;quot; using assms(2) ..&lt;br /&gt;
  thus &amp;quot;¬Q(c)&amp;quot; using assms(1) ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_1c: &lt;br /&gt;
  assumes &amp;quot;P(c)&amp;quot;&lt;br /&gt;
          &amp;quot;∀x. (P(x) ⟶ ¬Q(x))&amp;quot;&lt;br /&gt;
  shows &amp;quot;¬Q(c)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 2 (p. 11). Demostrar que&lt;br /&gt;
     ∀x. (P x ⟶ ¬(Q x)), ∀x. P x ⊢ ∀x. ¬(Q x)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_2a: &lt;br /&gt;
  assumes 1: &amp;quot;∀x. (P x ⟶ ¬(Q x))&amp;quot; and&lt;br /&gt;
          2: &amp;quot;∀x. P x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. ¬(Q x)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { fix a&lt;br /&gt;
    have 3: &amp;quot;P a ⟶ ¬(Q a)&amp;quot; using 1 by (rule allE)&lt;br /&gt;
    have 4: &amp;quot;P a&amp;quot; using 2 by (rule allE)&lt;br /&gt;
    have 5: &amp;quot;¬(Q a)&amp;quot; using 3 4 by (rule mp) }&lt;br /&gt;
  thus &amp;quot;∀x. ¬(Q x)&amp;quot; by (rule allI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada hacia atrás es&amp;quot;&lt;br /&gt;
lemma ejemplo_2b: &lt;br /&gt;
  assumes 1: &amp;quot;∀x. (P x ⟶ ¬(Q x))&amp;quot; and&lt;br /&gt;
          2: &amp;quot;∀x. P x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. ¬(Q x)&amp;quot;&lt;br /&gt;
proof (rule allI)&lt;br /&gt;
  fix a&lt;br /&gt;
  have 3: &amp;quot;P a ⟶ ¬(Q a)&amp;quot; using 1 by (rule allE)&lt;br /&gt;
  have 4: &amp;quot;P a&amp;quot; using 2 by (rule allE)&lt;br /&gt;
  show 5: &amp;quot;¬(Q a)&amp;quot; using 3 4 by (rule mp) &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_2c: &lt;br /&gt;
  assumes &amp;quot;∀x. (P x ⟶ ¬(Q x))&amp;quot;&lt;br /&gt;
          &amp;quot;∀x. P x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∀x. ¬(Q x)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  fix a&lt;br /&gt;
  have &amp;quot;P a&amp;quot; using assms(2) ..&lt;br /&gt;
  have &amp;quot;P a ⟶ ¬(Q a)&amp;quot; using assms(1) ..&lt;br /&gt;
  thus &amp;quot;¬(Q a)&amp;quot; using `P a` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_2d: &lt;br /&gt;
  assumes &amp;quot;∀x. (P x ⟶ ¬(Q x))&amp;quot;&lt;br /&gt;
          &amp;quot;∀x. P x&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∀x. ¬(Q x)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Reglas del cuantificador existencial *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Las reglas del cuantificador existencial son&lt;br /&gt;
  · exI:     P a ⟹ ∃x. P x&lt;br /&gt;
  · exE:     ⟦∃x. P x; ⋀x. P x ⟹ Q⟧ ⟹ Q&lt;br /&gt;
&lt;br /&gt;
  En la regla exE la nueva variable se introduce mediante la declaración &lt;br /&gt;
  &amp;quot;obtain ... where ... by (rule exE)&amp;quot; &lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo  (p. 12). Demostrar que&lt;br /&gt;
     ∀x. P x ⊢ ∃x. P x&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_3a:&lt;br /&gt;
  assumes &amp;quot;∀x. P x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. P x&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  fix a&lt;br /&gt;
  have &amp;quot;P a&amp;quot; using assms by (rule allE)&lt;br /&gt;
  thus &amp;quot;∃x. P x&amp;quot; by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_3b:&lt;br /&gt;
  assumes &amp;quot;∀x. P x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. P x&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  fix a&lt;br /&gt;
  have &amp;quot;P a&amp;quot; using assms ..&lt;br /&gt;
  thus &amp;quot;∃x. P x&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada se puede simplificar&amp;quot;&lt;br /&gt;
lemma ejemplo_3c:&lt;br /&gt;
  assumes &amp;quot;∀x. P x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. P x&amp;quot;&lt;br /&gt;
proof (rule exI)&lt;br /&gt;
  fix a&lt;br /&gt;
  show &amp;quot;P a&amp;quot; using assms ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada se puede simplificar aún más&amp;quot;&lt;br /&gt;
lemma ejemplo_3d:&lt;br /&gt;
  assumes &amp;quot;∀x. P x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. P x&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  fix a&lt;br /&gt;
  show &amp;quot;P a&amp;quot; using assms ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_3e:&lt;br /&gt;
  assumes &amp;quot;∀x. P x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. P x&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 4 (p. 13). Demostrar&lt;br /&gt;
     ∀x. (P x ⟶ Q x), ∃x. P x ⊢ ∃x. Q x&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_4a:&lt;br /&gt;
  assumes 1: &amp;quot;∀x. (P x ⟶ Q x)&amp;quot; and&lt;br /&gt;
          2: &amp;quot;∃x. P x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. Q x&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  obtain a where 3: &amp;quot;P a&amp;quot; using 2 by (rule exE)&lt;br /&gt;
  have 4: &amp;quot;P a ⟶ Q a&amp;quot; using 1 by (rule allE)&lt;br /&gt;
  have 5: &amp;quot;Q a&amp;quot; using 4 3 by (rule mp)&lt;br /&gt;
  thus 6: &amp;quot;∃x. Q x&amp;quot; by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_4b:&lt;br /&gt;
  assumes &amp;quot;∀x. (P x ⟶ Q x)&amp;quot;&lt;br /&gt;
          &amp;quot;∃x. P x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. Q x&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  obtain a where &amp;quot;P a&amp;quot; using assms(2) ..&lt;br /&gt;
  have &amp;quot;P a ⟶ Q a&amp;quot; using assms(1) ..&lt;br /&gt;
  hence &amp;quot;Q a&amp;quot; using `P a` ..&lt;br /&gt;
  thus &amp;quot;∃x. Q x&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_4c:&lt;br /&gt;
  assumes &amp;quot;∀x. (P x ⟶ Q x)&amp;quot;&lt;br /&gt;
          &amp;quot;∃x. P x&amp;quot;&lt;br /&gt;
  shows &amp;quot;∃x. Q x&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Demostración de equivalencias *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 5.1 (p. 15). Demostrar&lt;br /&gt;
     ¬∀x. P x  ⊢ ∃x. ¬(P x) *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_5_1a:&lt;br /&gt;
  assumes &amp;quot;¬(∀x. P(x))&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃x. ¬P(x)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬(∃x. ¬P(x))&amp;quot;&lt;br /&gt;
  have &amp;quot;∀x. P(x)&amp;quot;&lt;br /&gt;
  proof (rule allI)&lt;br /&gt;
    fix a&lt;br /&gt;
    show &amp;quot;P(a)&amp;quot;&lt;br /&gt;
    proof (rule ccontr)&lt;br /&gt;
      assume &amp;quot;¬P(a)&amp;quot;&lt;br /&gt;
      hence &amp;quot;∃x. ¬P(x)&amp;quot; by (rule exI)&lt;br /&gt;
      with `¬(∃x. ¬P(x))` show False by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
  with assms show False by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_5_1b:&lt;br /&gt;
  assumes &amp;quot;¬(∀x. P(x))&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃x. ¬P(x)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬(∃x. ¬P(x))&amp;quot;&lt;br /&gt;
  have &amp;quot;∀x. P(x)&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    fix a&lt;br /&gt;
    show &amp;quot;P(a)&amp;quot;&lt;br /&gt;
    proof (rule ccontr)&lt;br /&gt;
      assume &amp;quot;¬P(a)&amp;quot;&lt;br /&gt;
      hence &amp;quot;∃x. ¬P(x)&amp;quot; ..&lt;br /&gt;
      with `¬(∃x. ¬P(x))` show False ..&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
  with assms show False ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_5_1c:&lt;br /&gt;
  assumes &amp;quot;¬(∀x. P(x))&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃x. ¬P(x)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 5.2 (p. 16). Demostrar&lt;br /&gt;
     ∃x. ¬(P x)  ⊢ ¬∀x. P x *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_5_2a:&lt;br /&gt;
  assumes &amp;quot;∃x. ¬P(x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(∀x. P(x))&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume &amp;quot;∀x. P(x)&amp;quot;&lt;br /&gt;
  obtain a where &amp;quot;¬P(a)&amp;quot; using assms by (rule exE)&lt;br /&gt;
  have &amp;quot;P(a)&amp;quot; using `∀x. P(x)` by (rule allE)&lt;br /&gt;
  with `¬P(a)` show False by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_5_2b:&lt;br /&gt;
  assumes &amp;quot;∃x. ¬P(x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(∀x. P(x))&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;∀x. P(x)&amp;quot;&lt;br /&gt;
  obtain a where &amp;quot;¬P(a)&amp;quot; using assms ..&lt;br /&gt;
  have &amp;quot;P(a)&amp;quot; using `∀x. P(x)` ..&lt;br /&gt;
  with `¬P(a)` show False ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_5_2c:&lt;br /&gt;
  assumes &amp;quot;∃x. ¬P(x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(∀x. P(x))&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 5.3 (p. 17). Demostrar&lt;br /&gt;
     ⊢ ¬∀x. P x  ⟷ ∃x. ¬(P x) *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_5_3a:&lt;br /&gt;
  &amp;quot;(¬(∀x. P(x))) ⟷ (∃x. ¬P(x))&amp;quot;&lt;br /&gt;
proof (rule iffI)&lt;br /&gt;
  assume &amp;quot;¬(∀x. P(x))&amp;quot;&lt;br /&gt;
  thus &amp;quot;∃x. ¬P(x)&amp;quot; by (rule ejemplo_5_1a)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;∃x. ¬P(x)&amp;quot;&lt;br /&gt;
  thus &amp;quot;¬(∀x. P(x))&amp;quot; by (rule ejemplo_5_2a)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_5_3b:&lt;br /&gt;
  &amp;quot;(¬(∀x. P(x))) ⟷ (∃x. ¬P(x))&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 6.1 (p. 18). Demostrar&lt;br /&gt;
     ∀x. P(x) ∧ Q(x) ⊢  (∀x. P(x)) ∧ (∀x. Q(x)) *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_6_1a:&lt;br /&gt;
  assumes &amp;quot;∀x. P(x) ∧ Q(x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(∀x. P(x)) ∧ (∀x. Q(x))&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show &amp;quot;∀x. P(x)&amp;quot;&lt;br /&gt;
  proof (rule allI)&lt;br /&gt;
    fix a&lt;br /&gt;
    have &amp;quot;P(a) ∧ Q(a)&amp;quot; using assms by (rule allE)&lt;br /&gt;
    thus &amp;quot;P(a)&amp;quot; by (rule conjunct1)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;∀x. Q(x)&amp;quot;&lt;br /&gt;
  proof (rule allI)&lt;br /&gt;
    fix a&lt;br /&gt;
    have &amp;quot;P(a) ∧ Q(a)&amp;quot; using assms by (rule allE)&lt;br /&gt;
    thus &amp;quot;Q(a)&amp;quot; by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_6_1b:&lt;br /&gt;
  assumes &amp;quot;∀x. P(x) ∧ Q(x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(∀x. P(x)) ∧ (∀x. Q(x))&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  show &amp;quot;∀x. P(x)&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    fix a&lt;br /&gt;
    have &amp;quot;P(a) ∧ Q(a)&amp;quot; using assms ..&lt;br /&gt;
    thus &amp;quot;P(a)&amp;quot; ..&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;∀x. Q(x)&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    fix a&lt;br /&gt;
    have &amp;quot;P(a) ∧ Q(a)&amp;quot; using assms ..&lt;br /&gt;
    thus &amp;quot;Q(a)&amp;quot; ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_6_1c:&lt;br /&gt;
  assumes &amp;quot;∀x. P(x) ∧ Q(x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(∀x. P(x)) ∧ (∀x. Q(x))&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 6.2 (p. 19). Demostrar&lt;br /&gt;
     (∀x. P(x)) ∧ (∀x. Q(x)) ⊢ ∀x. P(x) ∧ Q(x)  *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_6_2a:&lt;br /&gt;
  assumes &amp;quot;(∀x. P(x)) ∧ (∀x. Q(x))&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∀x. P(x) ∧ Q(x)&amp;quot;&lt;br /&gt;
proof (rule allI)&lt;br /&gt;
  fix a&lt;br /&gt;
  have &amp;quot;∀x. P(x)&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  hence &amp;quot;P(a)&amp;quot; by (rule allE)&lt;br /&gt;
  have &amp;quot;∀x. Q(x)&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  hence &amp;quot;Q(a)&amp;quot; by (rule allE)&lt;br /&gt;
  with `P(a)` show &amp;quot;P(a) ∧ Q(a)&amp;quot; by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_6_2b:&lt;br /&gt;
  assumes &amp;quot;(∀x. P(x)) ∧ (∀x. Q(x))&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∀x. P(x) ∧ Q(x)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  fix a&lt;br /&gt;
  have &amp;quot;∀x. P(x)&amp;quot; using assms ..&lt;br /&gt;
  hence &amp;quot;P(a)&amp;quot; by (rule allE)&lt;br /&gt;
  have &amp;quot;∀x. Q(x)&amp;quot; using assms ..&lt;br /&gt;
  hence &amp;quot;Q(a)&amp;quot; ..&lt;br /&gt;
  with `P(a)` show &amp;quot;P(a) ∧ Q(a)&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_6_2c:&lt;br /&gt;
  assumes &amp;quot;(∀x. P(x)) ∧ (∀x. Q(x))&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∀x. P(x) ∧ Q(x)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 6.3 (p. 20). Demostrar&lt;br /&gt;
     ⊢ ∀x. P(x) ∧ Q(x) ⟷ (∀x. P(x)) ∧ (∀x. Q(x)) *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_6_3a:&lt;br /&gt;
  &amp;quot;(∀x. P(x) ∧ Q(x)) ⟷ ((∀x. P(x)) ∧ (∀x. Q(x)))&amp;quot;&lt;br /&gt;
proof (rule iffI)&lt;br /&gt;
  assume &amp;quot;∀x. P(x) ∧ Q(x)&amp;quot;&lt;br /&gt;
  thus &amp;quot;(∀x. P(x)) ∧ (∀x. Q(x))&amp;quot; by (rule ejemplo_6_1a)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;(∀x. P(x)) ∧ (∀x. Q(x))&amp;quot;&lt;br /&gt;
  thus &amp;quot;∀x. P(x) ∧ Q(x)&amp;quot; by (rule ejemplo_6_2a)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 7.1 (p. 21). Demostrar&lt;br /&gt;
     (∃x. P(x)) ∨ (∃x. Q(x)) ⊢ ∃x. P(x) ∨ Q(x)  *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_7_1a:&lt;br /&gt;
  assumes &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃x. P(x) ∨ Q(x)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;∃x. P(x)&amp;quot;&lt;br /&gt;
  then obtain a where &amp;quot;P(a)&amp;quot; by (rule exE)&lt;br /&gt;
  hence &amp;quot;P(a) ∨ Q(a)&amp;quot; by (rule disjI1)&lt;br /&gt;
  thus &amp;quot;∃x. P(x) ∨ Q(x)&amp;quot; by (rule exI)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;∃x. Q(x)&amp;quot;&lt;br /&gt;
  then obtain a where &amp;quot;Q(a)&amp;quot; by (rule exE)&lt;br /&gt;
  hence &amp;quot;P(a) ∨ Q(a)&amp;quot; by (rule disjI2)&lt;br /&gt;
  thus &amp;quot;∃x. P(x) ∨ Q(x)&amp;quot; by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_7_1b:&lt;br /&gt;
  assumes &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃x. P(x) ∨ Q(x)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;∃x. P(x)&amp;quot;&lt;br /&gt;
  then obtain a where &amp;quot;P(a)&amp;quot; ..&lt;br /&gt;
  hence &amp;quot;P(a) ∨ Q(a)&amp;quot; ..&lt;br /&gt;
  thus &amp;quot;∃x. P(x) ∨ Q(x)&amp;quot; ..&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;∃x. Q(x)&amp;quot;&lt;br /&gt;
  then obtain a where &amp;quot;Q(a)&amp;quot; ..&lt;br /&gt;
  hence &amp;quot;P(a) ∨ Q(a)&amp;quot; ..&lt;br /&gt;
  thus &amp;quot;∃x. P(x) ∨ Q(x)&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_7_1c:&lt;br /&gt;
  assumes &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃x. P(x) ∨ Q(x)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 7.2 (p. 22). Demostrar&lt;br /&gt;
     ∃x. P(x) ∨ Q(x) ⊢ (∃x. P(x)) ∨ (∃x. Q(x))  *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_7_2a:&lt;br /&gt;
  assumes &amp;quot;∃x. P(x) ∨ Q(x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  obtain a where &amp;quot;P(a) ∨ Q(a)&amp;quot; using assms by (rule exE)&lt;br /&gt;
  thus &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot;&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;P(a)&amp;quot;&lt;br /&gt;
    hence &amp;quot;∃x. P(x)&amp;quot; by (rule exI)&lt;br /&gt;
    thus &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot; by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;Q(a)&amp;quot;&lt;br /&gt;
    hence &amp;quot;∃x. Q(x)&amp;quot; by (rule exI)&lt;br /&gt;
    thus &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot; by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejercicio_7_2b:&lt;br /&gt;
  assumes &amp;quot;∃x. P(x) ∨ Q(x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  obtain a where &amp;quot;P(a) ∨ Q(a)&amp;quot; using assms ..&lt;br /&gt;
  thus &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    assume &amp;quot;P(a)&amp;quot;&lt;br /&gt;
    hence &amp;quot;∃x. P(x)&amp;quot; ..&lt;br /&gt;
    thus &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot; ..&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;Q(a)&amp;quot;&lt;br /&gt;
    hence &amp;quot;∃x. Q(x)&amp;quot; ..&lt;br /&gt;
    thus &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot; ..&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejercicio_7_2c:&lt;br /&gt;
  assumes &amp;quot;∃x. P(x) ∨ Q(x)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 7.3 (p. 23). Demostrar&lt;br /&gt;
     ⊢ ((∃x. P(x)) ∨ (∃x. Q(x))) ⟷ (∃x. P(x) ∨ Q(x))  *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_7_3a:&lt;br /&gt;
  &amp;quot;((∃x. P(x)) ∨ (∃x. Q(x))) ⟷ (∃x. P(x) ∨ Q(x))&amp;quot;&lt;br /&gt;
proof (rule iffI)&lt;br /&gt;
  assume &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot;&lt;br /&gt;
  thus &amp;quot;∃x. P(x) ∨ Q(x)&amp;quot; by (rule ejemplo_7_1a)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;∃x. P(x) ∨ Q(x)&amp;quot;&lt;br /&gt;
  thus &amp;quot;(∃x. P(x)) ∨ (∃x. Q(x))&amp;quot; by (rule ejemplo_7_2a)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_7_3b:&lt;br /&gt;
  &amp;quot;((∃x. P(x)) ∨ (∃x. Q(x))) ⟷ (∃x. P(x) ∨ Q(x))&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 8.1 (p. 24). Demostrar&lt;br /&gt;
     ∃x y. P(x,y) ⊢ ∃y x. P(x,y)  *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_8_1a:&lt;br /&gt;
  assumes &amp;quot;∃x y. P(x,y)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃y x. P(x,y)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  obtain a where &amp;quot;∃y. P(a,y)&amp;quot; using assms by (rule exE)&lt;br /&gt;
  then obtain b where &amp;quot;P(a,b)&amp;quot; by (rule exE)&lt;br /&gt;
  hence &amp;quot;∃x. P(x,b)&amp;quot; by (rule exI)&lt;br /&gt;
  thus &amp;quot;∃y x. P(x,y)&amp;quot; by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_8_1b:&lt;br /&gt;
  assumes &amp;quot;∃x y. P(x,y)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃y x. P(x,y)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  obtain a where &amp;quot;∃y. P(a,y)&amp;quot; using assms ..&lt;br /&gt;
  then obtain b where &amp;quot;P(a,b)&amp;quot; ..&lt;br /&gt;
  hence &amp;quot;∃x. P(x,b)&amp;quot; ..&lt;br /&gt;
  thus &amp;quot;∃y x. P(x,y)&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_8_1c:&lt;br /&gt;
  assumes &amp;quot;∃x y. P(x,y)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃y x. P(x,y)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 8.2. Demostrar&lt;br /&gt;
     ∃y x. P(x,y) ⊢ ∃x y. P(x,y)  *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_8_2a:&lt;br /&gt;
  assumes &amp;quot;∃y x. P(x,y)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃x y. P(x,y)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  obtain b where &amp;quot;∃x. P(x,b)&amp;quot; using assms by (rule exE)&lt;br /&gt;
  then obtain a where &amp;quot;P(a,b)&amp;quot; by (rule exE)&lt;br /&gt;
  hence &amp;quot;∃y. P(a,y)&amp;quot; by (rule exI)&lt;br /&gt;
  thus &amp;quot;∃x y. P(x,y)&amp;quot; by (rule exI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_8_2b:&lt;br /&gt;
  assumes &amp;quot;∃y x. P(x,y)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃x y. P(x,y)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  obtain b where &amp;quot;∃x. P(x,b)&amp;quot; using assms ..&lt;br /&gt;
  then obtain a where &amp;quot;P(a,b)&amp;quot; ..&lt;br /&gt;
  hence &amp;quot;∃y. P(a,y)&amp;quot; ..&lt;br /&gt;
  thus &amp;quot;∃x y. P(x,y)&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_8_2c:&lt;br /&gt;
  assumes &amp;quot;∃y x. P(x,y)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;∃x y. P(x,y)&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 8.3 (p. 25). Demostrar&lt;br /&gt;
     ⊢ (∃x y. P(x,y)) ⟷ (∃y x. P(x,y))  *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_8_3a:&lt;br /&gt;
  &amp;quot;(∃x y. P(x,y)) ⟷ (∃y x. P(x,y))&amp;quot;&lt;br /&gt;
proof (rule iffI)&lt;br /&gt;
  assume &amp;quot;∃x y. P(x,y)&amp;quot;&lt;br /&gt;
  thus &amp;quot;∃y x. P(x,y)&amp;quot; by (rule ejemplo_8_1a)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;∃y x. P(x,y)&amp;quot;&lt;br /&gt;
  thus &amp;quot;∃x y. P(x,y)&amp;quot; by (rule ejemplo_8_2a)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_8_3b:&lt;br /&gt;
  &amp;quot;(∃x y. P(x,y)) ⟷ (∃y x. P(x,y))&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Reglas de la igualdad *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Las reglas básicas de la igualdad son:&lt;br /&gt;
  · refl:  t = t&lt;br /&gt;
  · subst: ⟦s = t; P s⟧ ⟹ P t&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 9 (p. 27). Demostrar&lt;br /&gt;
     x+1 = 1+x, x+1 &amp;gt; 1 ⟶ x+1 &amp;gt; 0 ⊢ 1+x &amp;gt; 1 ⟶ 1+x &amp;gt; 0&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_9a: &lt;br /&gt;
  assumes &amp;quot;x+1 = 1+x&amp;quot; &lt;br /&gt;
          &amp;quot;x+1 &amp;gt; 1 ⟶ x+1 &amp;gt; 0&amp;quot;&lt;br /&gt;
  shows   &amp;quot;1+x &amp;gt; 1 ⟶ 1+x &amp;gt; 0&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  show &amp;quot;1+x &amp;gt; 1 ⟶ 1+x &amp;gt; 0&amp;quot; using assms by (rule subst)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_9b: &lt;br /&gt;
  assumes &amp;quot;x+1 = 1+x&amp;quot; &lt;br /&gt;
          &amp;quot;x+1 &amp;gt; 1 ⟶ x+1 &amp;gt; 0&amp;quot;&lt;br /&gt;
  shows   &amp;quot;1+x &amp;gt; 1 ⟶ 1+x &amp;gt; 0&amp;quot;&lt;br /&gt;
using assms &lt;br /&gt;
by (rule subst)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_9c: &lt;br /&gt;
  assumes &amp;quot;x+1 = 1+x&amp;quot; &lt;br /&gt;
          &amp;quot;x+1 &amp;gt; 1 ⟶ x+1 &amp;gt; 0&amp;quot;&lt;br /&gt;
  shows   &amp;quot;1+x &amp;gt; 1 ⟶ 1+x &amp;gt; 0&amp;quot;&lt;br /&gt;
using assms &lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 10 (p. 27). Demostrar&lt;br /&gt;
     x = y, y = z ⊢ x = z&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_10a:&lt;br /&gt;
  assumes &amp;quot;x = y&amp;quot; &lt;br /&gt;
          &amp;quot;y = z&amp;quot;&lt;br /&gt;
  shows   &amp;quot;x = z&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  show &amp;quot;x = z&amp;quot; using assms(2,1) by (rule subst)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_10b: &lt;br /&gt;
  assumes &amp;quot;x = y&amp;quot; &lt;br /&gt;
          &amp;quot;y = z&amp;quot;&lt;br /&gt;
  shows   &amp;quot;x = z&amp;quot;&lt;br /&gt;
using assms(2,1)&lt;br /&gt;
by (rule subst)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_10c: &lt;br /&gt;
  assumes &amp;quot;x = y&amp;quot; &lt;br /&gt;
          &amp;quot;y = z&amp;quot;&lt;br /&gt;
  shows   &amp;quot;x = z&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 11 (p. 28). Demostrar&lt;br /&gt;
     s = t ⊢ t = s&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_11a:&lt;br /&gt;
  assumes &amp;quot;s = t&amp;quot;&lt;br /&gt;
  shows   &amp;quot;t = s&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;s = s&amp;quot; by (rule refl)&lt;br /&gt;
  with assms show &amp;quot;t = s&amp;quot; by (rule subst)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_11b:&lt;br /&gt;
  assumes &amp;quot;s = t&amp;quot;&lt;br /&gt;
  shows   &amp;quot;t = s&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_7b:_Deducci%C3%B3n_natural_proposicional_con_Isabelle/HOL&amp;diff=237</id>
		<title>Tema 7b: Deducción natural proposicional con Isabelle/HOL</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_7b:_Deducci%C3%B3n_natural_proposicional_con_Isabelle/HOL&amp;diff=237"/>
		<updated>2014-12-18T09:24:56Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* Tema 7b: Deducción natural proposicional con Isabelle/HOL *}  theory T7b imports Main  begin  text {*   En este tema se presentan los ejemplos de...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* Tema 7b: Deducción natural proposicional con Isabelle/HOL *}&lt;br /&gt;
&lt;br /&gt;
theory T7b&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  En este tema se presentan los ejemplos del tema de deducción natural&lt;br /&gt;
  proposicional siguiendo la presentación de Huth y Ryan en su libro&lt;br /&gt;
  &amp;quot;Logic in Computer Science&amp;quot; http://goo.gl/qsVpY y, más concretamente,&lt;br /&gt;
  a la forma como se explica en la asignatura de &amp;quot;Lógica informática&amp;quot; (LI) &lt;br /&gt;
  http://goo.gl/AwDiv&lt;br /&gt;
 &lt;br /&gt;
  La página al lado de cada ejemplo indica la página de las transparencias &lt;br /&gt;
  de LI donde se encuentra la demostración. *}&lt;br /&gt;
&lt;br /&gt;
subsection {* Reglas de la conjunción *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 1 (p. 4). Demostrar que&lt;br /&gt;
     p ∧ q, r ⊢ q ∧ r.&lt;br /&gt;
  *}     &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_1_1:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;r&amp;quot; &lt;br /&gt;
  shows &amp;quot;q ∧ r&amp;quot;     &lt;br /&gt;
proof -&lt;br /&gt;
  have 3: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  show 4: &amp;quot;q ∧ r&amp;quot; using 3 2 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
thm ejemplo_1_1&lt;br /&gt;
text {*&lt;br /&gt;
  Notas sobre el lenguaje: En la demostración anterior se ha usado&lt;br /&gt;
  · &amp;quot;assumes&amp;quot; para indicar las hipótesis,&lt;br /&gt;
  · &amp;quot;and&amp;quot; para separar las hipótesis,&lt;br /&gt;
  · &amp;quot;shows&amp;quot; para indicar la conclusión,&lt;br /&gt;
  · &amp;quot;proof&amp;quot; para iniciar la prueba,&lt;br /&gt;
  · &amp;quot;qed&amp;quot; para terminar la pruebas,&lt;br /&gt;
  · &amp;quot;-&amp;quot; (después de &amp;quot;proof&amp;quot;) para no usar el método por defecto,&lt;br /&gt;
  · &amp;quot;have&amp;quot; para establecer un paso,&lt;br /&gt;
  · &amp;quot;using&amp;quot; para usar hechos en un paso,&lt;br /&gt;
  · &amp;quot;by (rule ..)&amp;quot; para indicar la regla con la que se peueba un hecho,&lt;br /&gt;
  · &amp;quot;show&amp;quot; para establecer la conclusión.&lt;br /&gt;
&lt;br /&gt;
  Notas sobre la lógica: Las reglas de la conjunción son&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* Se pueden dejar implícitas las reglas como sigue *}&lt;br /&gt;
&lt;br /&gt;
lemma ejemplo_1_2:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;r&amp;quot; &lt;br /&gt;
  shows &amp;quot;q ∧ r&amp;quot;     &lt;br /&gt;
proof -&lt;br /&gt;
  have 3: &amp;quot;q&amp;quot; using 1 .. &lt;br /&gt;
  show 4: &amp;quot;q ∧ r&amp;quot; using 3 2 ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota sobre el lenguaje: En la demostración anterior se ha usado&lt;br /&gt;
  · &amp;quot;..&amp;quot; para indicar que se prueba por la regla correspondiente. *}&lt;br /&gt;
&lt;br /&gt;
text {* Se pueden eliminar las etiquetas como sigue *}&lt;br /&gt;
&lt;br /&gt;
lemma ejemplo_1_3:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
          &amp;quot;r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ∧ r&amp;quot;     &lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;q&amp;quot; using assms(1) ..&lt;br /&gt;
  thus &amp;quot;q ∧ r&amp;quot; using assms(2) ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota sobre el lenguaje: En la demostración anterior se ha usado&lt;br /&gt;
  · &amp;quot;assms(n)&amp;quot; para indicar la hipótesis n y&lt;br /&gt;
  · &amp;quot;thus&amp;quot; para demostrar la conclusión usando el hecho anterior.&lt;br /&gt;
  Además, no es necesario usar and entre las hipótesis. *}&lt;br /&gt;
&lt;br /&gt;
text {* Se puede automatizar la demostración como sigue *}&lt;br /&gt;
  &lt;br /&gt;
lemma ejemplo_1_4:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
          &amp;quot;r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ∧ r&amp;quot;     &lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota sobre el lenguaje: En la demostración anterior se ha usado&lt;br /&gt;
  · &amp;quot;assms&amp;quot; para indicar las hipótesis y&lt;br /&gt;
  · &amp;quot;by auto&amp;quot; para demostrar la conclusión automáticamente. *}&lt;br /&gt;
&lt;br /&gt;
text {* Se puede automatizar totalmente la demostración como sigue *}&lt;br /&gt;
&lt;br /&gt;
lemma ejemplo_1_5:&lt;br /&gt;
  &amp;quot;⟦p ∧ q; r⟧ ⟹ q ∧ r&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota sobre el lenguaje: En la demostración anterior se ha usado&lt;br /&gt;
  · &amp;quot;⟦ ... ⟧&amp;quot; para representar las hipótesis,&lt;br /&gt;
  · &amp;quot;;&amp;quot; para separar las hipótesis y&lt;br /&gt;
  · &amp;quot;⟹&amp;quot; para separar las hipótesis de la conclusión. *}&lt;br /&gt;
&lt;br /&gt;
text {* Se puede hacer la demostración por razonamiento hacia atrás,&lt;br /&gt;
  como sigue *}&lt;br /&gt;
&lt;br /&gt;
lemma ejemplo_1_6:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
      and &amp;quot;r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ∧ r&amp;quot;     &lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;r&amp;quot; using assms(2) by this&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota sobre el lenguaje: En la demostración anterior se ha usado&lt;br /&gt;
  · &amp;quot;proof (rule r)&amp;quot; para indicar que se hará la demostración con la&lt;br /&gt;
    regla r,&lt;br /&gt;
  · &amp;quot;next&amp;quot; para indicar el comienzo de la prueba del siguiente&lt;br /&gt;
    subobjetivo,&lt;br /&gt;
  · &amp;quot;this&amp;quot; para indicar el hecho actual. *}&lt;br /&gt;
&lt;br /&gt;
text {* Se pueden dejar implícitas las reglas como sigue *}&lt;br /&gt;
&lt;br /&gt;
lemma ejemplo_1_7:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
          &amp;quot;r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ∧ r&amp;quot;     &lt;br /&gt;
proof &lt;br /&gt;
  show &amp;quot;q&amp;quot; using assms(1) ..&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;r&amp;quot; using assms(2) . &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota sobre el lenguaje: En la demostración anterior se ha usado&lt;br /&gt;
  · &amp;quot;.&amp;quot; para indicar por el hecho actual. *}&lt;br /&gt;
&lt;br /&gt;
subsection {* Reglas de la doble negación *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de eliminación de la doble negación es&lt;br /&gt;
  · notnotD: ¬¬ P ⟹ P&lt;br /&gt;
&lt;br /&gt;
  Para ajustarnos al tema de LI vamos a introducir la siguiente regla de&lt;br /&gt;
  introducción de la doble negación&lt;br /&gt;
  · notnotI: P ⟹ ¬¬ P&lt;br /&gt;
  aunque, de momento, no detallamos su demostración.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI [intro!]: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo 2. (p. 5)&lt;br /&gt;
       p, ¬¬(q ∧ r) ⊢ ¬¬p ∧ r&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_2_1:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot; and&lt;br /&gt;
          2: &amp;quot;¬¬(q ∧ r)&amp;quot; &lt;br /&gt;
  shows      &amp;quot;¬¬p ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 3: &amp;quot;¬¬p&amp;quot; using 1 by (rule notnotI)&lt;br /&gt;
  have 4: &amp;quot;q ∧ r&amp;quot; using 2 by (rule notnotD)&lt;br /&gt;
  have 5: &amp;quot;r&amp;quot; using 4 by (rule conjunct2)&lt;br /&gt;
  show 6: &amp;quot;¬¬p ∧ r&amp;quot; using 3 5 by (rule conjI)&lt;br /&gt;
qed        &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_2_2:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot; &lt;br /&gt;
          &amp;quot;¬¬(q ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬¬p ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have  &amp;quot;¬¬p&amp;quot; using assms(1) ..&lt;br /&gt;
  have  &amp;quot;q ∧ r&amp;quot; using assms(2) by (rule notnotD)&lt;br /&gt;
  hence &amp;quot;r&amp;quot; ..&lt;br /&gt;
  with `¬¬p` show  &amp;quot;¬¬p ∧ r&amp;quot; ..&lt;br /&gt;
qed        &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota sobre el lenguaje: En la demostración anterior se ha usado&lt;br /&gt;
  · &amp;quot;hence&amp;quot; para indicar que se tiene por el hecho anterior,&lt;br /&gt;
  · `...` para referenciar un hecho y&lt;br /&gt;
  · &amp;quot;with P show Q&amp;quot; para indicar que con el hecho anterior junto con el&lt;br /&gt;
    hecho P se demuestra Q. *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_2_3:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot; &lt;br /&gt;
          &amp;quot;¬¬(q ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬¬p ∧ r&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* Se puede demostrar hacia atrás *}&lt;br /&gt;
&lt;br /&gt;
lemma ejemplo_2_4:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot; &lt;br /&gt;
          &amp;quot;¬¬(q ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬¬p ∧ r&amp;quot;&lt;br /&gt;
proof  (rule conjI)&lt;br /&gt;
  show &amp;quot;¬¬p&amp;quot; using assms(1) by (rule notnotI)&lt;br /&gt;
next&lt;br /&gt;
  have &amp;quot;q ∧ r&amp;quot; using assms(2) by (rule notnotD) &lt;br /&gt;
  thus &amp;quot;r&amp;quot; by (rule conjunct2)&lt;br /&gt;
qed &lt;br /&gt;
&lt;br /&gt;
text {* Se puede eliminar las reglas en la demostración anterior, como&lt;br /&gt;
  sigue: *}&lt;br /&gt;
&lt;br /&gt;
lemma ejemplo_2_5:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot; &lt;br /&gt;
          &amp;quot;¬¬(q ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬¬p ∧ r&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  show &amp;quot;¬¬p&amp;quot; using assms(1) ..&lt;br /&gt;
next&lt;br /&gt;
  have &amp;quot;q ∧ r&amp;quot; using assms(2) by (rule notnotD) &lt;br /&gt;
  thus &amp;quot;r&amp;quot; .. &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
subsection {* Regla de eliminación del condicional *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de eliminación del condicional es la regla del modus ponens&lt;br /&gt;
  · mp: ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 3. (p. 6) Demostrar que&lt;br /&gt;
     ¬p ∧ q, ¬p ∧ q ⟶ r ∨ ¬p ⊢ r ∨ ¬p&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_3_1:&lt;br /&gt;
  assumes 1: &amp;quot;¬p ∧ q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;¬p ∧ q ⟶ r ∨ ¬p&amp;quot; &lt;br /&gt;
  shows      &amp;quot;r ∨ ¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  show &amp;quot;r ∨ ¬p&amp;quot; using 2 1 by (rule mp)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_3_2:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬p ∧ q ⟶ r ∨ ¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;r ∨ ¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  show &amp;quot;r ∨ ¬p&amp;quot; using assms(2,1) ..&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_3_3:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬p ∧ q ⟶ r ∨ ¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;r ∨ ¬p&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 4 (p. 6) Demostrar que&lt;br /&gt;
     p, p ⟶ q, p ⟶ (q ⟶ r) ⊢ r&lt;br /&gt;
 *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_4_1:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p ⟶ q&amp;quot; and &lt;br /&gt;
          3: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 2 1 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;q ⟶ r&amp;quot; using 3 1 by (rule mp)&lt;br /&gt;
  show 6: &amp;quot;r&amp;quot; using 5 4 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_4_2:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
          &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;q&amp;quot; using assms(2,1) .. &lt;br /&gt;
  have &amp;quot;q ⟶ r&amp;quot; using assms(3,1) ..&lt;br /&gt;
  thus &amp;quot;r&amp;quot; using `q` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_4_3:&lt;br /&gt;
  &amp;quot;⟦p; p ⟶ q; p ⟶ (q ⟶ r)⟧ ⟹ r&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
subsection {* Regla derivada del modus tollens *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Para ajustarnos al tema de LI vamos a introducir la regla del modus&lt;br /&gt;
  tollens&lt;br /&gt;
  · mt: ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  aunque, de momento, sin detallar su demostración.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo 5 (p. 7). Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r), p, ¬r ⊢ ¬q&lt;br /&gt;
 *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_5_1:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p&amp;quot; and &lt;br /&gt;
          3: &amp;quot;¬r&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
  show &amp;quot;¬q&amp;quot; using 4 3 by (rule mt)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_5_2:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
          &amp;quot;¬r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;q ⟶ r&amp;quot; using assms(1,2) ..&lt;br /&gt;
  thus &amp;quot;¬q&amp;quot; using assms(3) by (rule mt)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_5_3:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
          &amp;quot;¬r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬q&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 6. (p. 7) Demostrar &lt;br /&gt;
     ¬p ⟶ q, ¬q ⊢ p&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_6_1:&lt;br /&gt;
  assumes 1: &amp;quot;¬p ⟶ q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 3: &amp;quot;¬¬p&amp;quot; using 1 2 by (rule mt)&lt;br /&gt;
  show &amp;quot;p&amp;quot; using 3 by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_6_2:&lt;br /&gt;
  assumes &amp;quot;¬p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬¬p&amp;quot; using assms(1,2) by (rule mt)&lt;br /&gt;
  thus &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_6_3:&lt;br /&gt;
  &amp;quot;⟦¬p ⟶ q; ¬q⟧ ⟹ p&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 7. (p. 7) Demostrar&lt;br /&gt;
     p ⟶ ¬q, q ⊢ ¬p&lt;br /&gt;
  *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_7_1:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ ¬q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 3: &amp;quot;¬¬q&amp;quot; using 2 by (rule notnotI)&lt;br /&gt;
  show &amp;quot;¬p&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_7_2:&lt;br /&gt;
  assumes &amp;quot;p ⟶ ¬q&amp;quot;&lt;br /&gt;
          &amp;quot;q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬¬q&amp;quot; using assms(2) by (rule notnotI)&lt;br /&gt;
  with assms(1) show &amp;quot;¬p&amp;quot; by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_7_3:&lt;br /&gt;
  &amp;quot;⟦p ⟶ ¬q; q⟧ ⟹ ¬p&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
subsection {* Regla de introducción del condicional *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de introducción del condicional es&lt;br /&gt;
  · impI: (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 8. (p. 8) Demostrar&lt;br /&gt;
     p ⟶ q ⊢ ¬q ⟶ ¬p&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_8_1:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 2: &amp;quot;¬q&amp;quot;&lt;br /&gt;
    have &amp;quot;¬p&amp;quot; using 1 2 by (rule mt) } &lt;br /&gt;
  thus &amp;quot;¬q ⟶ ¬p&amp;quot; by (rule impI)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota sobre el lenguaje: En la demostración anterior se ha usado&lt;br /&gt;
  · &amp;quot;{ ... }&amp;quot; para representar una caja. *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_8_2:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
  with assms show &amp;quot;¬p&amp;quot; by (rule mt)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_8_3:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 9. (p. 9) Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ ¬¬q&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_9_1: &lt;br /&gt;
  assumes 1: &amp;quot;¬q ⟶ ¬p&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ ¬¬q&amp;quot;   &lt;br /&gt;
proof -&lt;br /&gt;
  { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;¬¬p&amp;quot; using 2 by (rule notnotI)&lt;br /&gt;
    have &amp;quot;¬¬q&amp;quot; using 1 3 by (rule mt) } &lt;br /&gt;
  thus &amp;quot;p ⟶ ¬¬q&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_9_2:&lt;br /&gt;
  assumes &amp;quot;¬q ⟶ ¬p&amp;quot; &lt;br /&gt;
  shows    &amp;quot;p ⟶ ¬¬q&amp;quot;   &lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬¬p&amp;quot; by (rule notnotI)&lt;br /&gt;
  with assms show &amp;quot;¬¬q&amp;quot; by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_9_3:&lt;br /&gt;
  assumes &amp;quot;¬q ⟶ ¬p&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ ¬¬q&amp;quot;   &lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 10 (p. 9). Demostrar&lt;br /&gt;
     ⊢ p ⟶ p&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_10_1:&lt;br /&gt;
  &amp;quot;p ⟶ p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using 1 by this }&lt;br /&gt;
  thus &amp;quot;p ⟶ p&amp;quot; by (rule impI) &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_10_2:&lt;br /&gt;
  &amp;quot;p ⟶ p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_10_3:&lt;br /&gt;
  &amp;quot;p ⟶ p&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo 11 (p. 10) Demostrar&lt;br /&gt;
     ⊢ (q ⟶ r) ⟶ ((¬q ⟶ ¬p) ⟶ (p ⟶ r))&lt;br /&gt;
 *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_11_1:&lt;br /&gt;
  &amp;quot;(q ⟶ r) ⟶ ((¬q ⟶ ¬p) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 1: &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
    { assume 2: &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
      { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
        have 4: &amp;quot;¬¬p&amp;quot; using 3 by (rule notnotI)&lt;br /&gt;
        have 5: &amp;quot;¬¬q&amp;quot; using 2 4 by (rule mt)&lt;br /&gt;
        have 6: &amp;quot;q&amp;quot; using 5 by (rule notnotD)&lt;br /&gt;
        have &amp;quot;r&amp;quot; using 1 6 by (rule mp) } &lt;br /&gt;
      hence &amp;quot;p ⟶ r&amp;quot; by (rule impI) } &lt;br /&gt;
    hence &amp;quot;(¬q ⟶ ¬p) ⟶ p ⟶ r&amp;quot; by (rule impI) } &lt;br /&gt;
  thus &amp;quot;(q ⟶ r) ⟶ ((¬q ⟶ ¬p) ⟶ p ⟶ r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración hacia atrás es&amp;quot;&lt;br /&gt;
lemma ejemplo_11_2:&lt;br /&gt;
  &amp;quot;(q ⟶ r) ⟶ ((¬q ⟶ ¬p) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;(¬q ⟶ ¬p) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;¬¬p&amp;quot; using 3 by (rule notnotI)&lt;br /&gt;
      have 5: &amp;quot;¬¬q&amp;quot; using 2 4 by (rule mt)&lt;br /&gt;
      have 6: &amp;quot;q&amp;quot; using 5 by (rule notnotD)&lt;br /&gt;
      show &amp;quot;r&amp;quot; using 1 6 by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración hacia atrás con reglas implícitas es&amp;quot;&lt;br /&gt;
lemma ejemplo_11_3:&lt;br /&gt;
  &amp;quot;(q ⟶ r) ⟶ ((¬q ⟶ ¬p) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume 1: &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;(¬q ⟶ ¬p) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume 2: &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;¬¬p&amp;quot; using 3 ..&lt;br /&gt;
      have 5: &amp;quot;¬¬q&amp;quot; using 2 4 by (rule mt)&lt;br /&gt;
      have 6: &amp;quot;q&amp;quot; using 5 by (rule notnotD)&lt;br /&gt;
      show &amp;quot;r&amp;quot; using 1 6 ..&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración sin etiquetas es&amp;quot; &lt;br /&gt;
lemma ejemplo_11_4:&lt;br /&gt;
  &amp;quot;(q ⟶ r) ⟶ ((¬q ⟶ ¬p) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;(¬q ⟶ ¬p) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      hence &amp;quot;¬¬p&amp;quot; ..&lt;br /&gt;
      with `¬q ⟶ ¬p` have &amp;quot;¬¬q&amp;quot; by (rule mt)&lt;br /&gt;
      hence &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
      with `q ⟶ r` show &amp;quot;r&amp;quot; ..&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_11_5:&lt;br /&gt;
  &amp;quot;(q ⟶ r) ⟶ ((¬q ⟶ ¬p) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
subsection {* Reglas de la disyunción *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Las reglas de la introducción de la disyunción son&lt;br /&gt;
  · disjI1: P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2: Q ⟹ P ∨ Q&lt;br /&gt;
  La regla de elimación de la disyunción es&lt;br /&gt;
  · disjE:  ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 12 (p. 11). Demostrar&lt;br /&gt;
     p ∨ q ⊢ q ∨ p&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_12_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ q&amp;quot; using assms by this&lt;br /&gt;
  moreover&lt;br /&gt;
  { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
    have &amp;quot;q ∨ p&amp;quot; using 2 by (rule disjI2) }&lt;br /&gt;
  moreover&lt;br /&gt;
  { assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;q ∨ p&amp;quot; using 3 by (rule disjI1) }&lt;br /&gt;
  ultimately show &amp;quot;q ∨ p&amp;quot; by (rule disjE) &lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota sobre el lenguaje: En la demostración anterior se ha usado&lt;br /&gt;
  · &amp;quot;moreover&amp;quot; para separar los bloques y&lt;br /&gt;
  · &amp;quot;ultimately&amp;quot; para unir los resultados de los bloques. *}&lt;br /&gt;
 &lt;br /&gt;
-- &amp;quot;La demostración detallada con reglas implícitas es&amp;quot;&lt;br /&gt;
lemma ejemplo_12_2:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  note `p ∨ q`&lt;br /&gt;
  moreover&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;q ∨ p&amp;quot; .. }&lt;br /&gt;
  moreover&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    hence &amp;quot;q ∨ p&amp;quot; .. }&lt;br /&gt;
  ultimately show &amp;quot;q ∨ p&amp;quot; ..&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota sobre el lenguaje: En la demostración anterior se ha usado&lt;br /&gt;
  · &amp;quot;note&amp;quot; para copiar un hecho. *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración hacia atrás es&amp;quot;&lt;br /&gt;
lemma ejemplo_12_3:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
using 1&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
    show &amp;quot;q ∨ p&amp;quot; using 2 by (rule disjI2) }&lt;br /&gt;
next&lt;br /&gt;
  { assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;q ∨ p&amp;quot; using 3 by (rule disjI1) }&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración hacia atrás con reglas implícitas es&amp;quot;&lt;br /&gt;
lemma ejemplo_12_4:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
proof &lt;br /&gt;
  { assume  &amp;quot;p&amp;quot;&lt;br /&gt;
    thus &amp;quot;q ∨ p&amp;quot; .. }&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    thus &amp;quot;q ∨ p&amp;quot; .. }&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_12_5:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 13. (p. 12) Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot; &lt;br /&gt;
lemma ejemplo_13_1:&lt;br /&gt;
  assumes 1: &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  thus &amp;quot;p ∨ r&amp;quot;&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      show &amp;quot;p ∨ r&amp;quot; using 3 by (rule disjI1) }&lt;br /&gt;
  next&lt;br /&gt;
    { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
      have 5: &amp;quot;r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
      show &amp;quot;p ∨ r&amp;quot; using 5 by (rule disjI2) }&lt;br /&gt;
  qed&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot; &lt;br /&gt;
lemma ejemplo_13_2:&lt;br /&gt;
  assumes &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  thus &amp;quot;p ∨ r&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      thus &amp;quot;p ∨ r&amp;quot; .. }&lt;br /&gt;
  next&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      have &amp;quot;r&amp;quot; using assms `q` ..&lt;br /&gt;
      thus &amp;quot;p ∨ r&amp;quot; .. }&lt;br /&gt;
  qed&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot; &lt;br /&gt;
lemma ejemplo_13_3:&lt;br /&gt;
  assumes &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  shows &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
subsection {* Regla de copia *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 14 (p. 13). Demostrar&lt;br /&gt;
     ⊢ p ⟶ (q ⟶ p)&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_14_1:&lt;br /&gt;
  &amp;quot;p ⟶ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ p&amp;quot; &lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p&amp;quot; using 1 by this&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_14_2:&lt;br /&gt;
  &amp;quot;p ⟶ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  thus &amp;quot;q ⟶ p&amp;quot; ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_14_3:&lt;br /&gt;
  &amp;quot;p ⟶ (q ⟶ p)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
subsection {* Reglas de la negación *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de eliminación de lo falso es&lt;br /&gt;
  · FalseE: False ⟹ P&lt;br /&gt;
  La regla de eliminación de la negación es&lt;br /&gt;
  · notE: ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  La regla de introducción de la negación es&lt;br /&gt;
  · notI: (P ⟹ False) ⟹ ¬P&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo 15 (p. 15). Demostrar&lt;br /&gt;
     ¬p ∨ q ⊢ p ⟶ q&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_15_1:&lt;br /&gt;
  assumes 1: &amp;quot;¬p ∨ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  note 1&lt;br /&gt;
  thus &amp;quot;q&amp;quot;&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    { assume 3: &amp;quot;¬p&amp;quot;&lt;br /&gt;
      show &amp;quot;q&amp;quot; using 3 2 by (rule notE) }&lt;br /&gt;
  next&lt;br /&gt;
    { assume 4: &amp;quot;q&amp;quot;&lt;br /&gt;
      show &amp;quot;q&amp;quot; using 4 by this}&lt;br /&gt;
  qed&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_15_2:&lt;br /&gt;
  assumes &amp;quot;¬p ∨ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  note `¬p ∨ q`&lt;br /&gt;
  thus &amp;quot;q&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
      thus &amp;quot;q&amp;quot; using `p` .. }&lt;br /&gt;
  next&lt;br /&gt;
    { assume &amp;quot;q&amp;quot;&lt;br /&gt;
      thus &amp;quot;q&amp;quot; . }&lt;br /&gt;
  qed&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_15_3:&lt;br /&gt;
  assumes &amp;quot;¬p ∨ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 16 (p. 16). Demostrar&lt;br /&gt;
     p ⟶ q, p ⟶ ¬q ⊢ ¬p&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_16_1:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p ⟶ ¬q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬p&amp;quot;    &lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;¬q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
  show False using 5 4 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_16_2:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p ⟶ ¬q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬p&amp;quot;    &lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  have &amp;quot;q&amp;quot; using assms(1) `p` ..&lt;br /&gt;
  have &amp;quot;¬q&amp;quot; using assms(2) `p` ..&lt;br /&gt;
  thus False using `q` ..&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_16_3:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p ⟶ ¬q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬p&amp;quot;    &lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
subsection {* Reglas del bicondicional *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de introducción del bicondicional es&lt;br /&gt;
  · iffI: ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P ⟷ Q&lt;br /&gt;
  Las reglas de eliminación del bicondicional son&lt;br /&gt;
  · iffD1: ⟦Q ⟷ P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2: ⟦P ⟷ Q; Q⟧ ⟹ P&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 17 (p. 17) Demostrar&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_17_1:&lt;br /&gt;
  &amp;quot;(p ∧ q) ⟷ (q ∧ p)&amp;quot;&lt;br /&gt;
proof (rule iffI)&lt;br /&gt;
  { assume 1: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
    have 3: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    show &amp;quot;q ∧ p&amp;quot; using 3 2 by (rule conjI) }&lt;br /&gt;
next&lt;br /&gt;
  { assume 4: &amp;quot;q ∧ p&amp;quot;&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot; using 4 by (rule conjunct1)&lt;br /&gt;
    have 6: &amp;quot;p&amp;quot; using 4 by (rule conjunct2)&lt;br /&gt;
    show &amp;quot;p ∧ q&amp;quot; using 6 5 by (rule conjI) }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_17_2:&lt;br /&gt;
  &amp;quot;(p ∧ q) ⟷ (q ∧ p)&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  { assume 1: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
    have &amp;quot;p&amp;quot; using 1 ..&lt;br /&gt;
    have &amp;quot;q&amp;quot; using 1 ..&lt;br /&gt;
    show &amp;quot;q ∧ p&amp;quot; using `q` `p` .. }&lt;br /&gt;
next&lt;br /&gt;
  { assume 2: &amp;quot;q ∧ p&amp;quot;&lt;br /&gt;
    have &amp;quot;q&amp;quot; using 2 ..&lt;br /&gt;
    have &amp;quot;p&amp;quot; using 2 ..&lt;br /&gt;
    show &amp;quot;p ∧ q&amp;quot; using `p` `q`  .. }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_17_3:&lt;br /&gt;
  &amp;quot;(p ∧ q) ⟷ (q ∧ p)&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo 18 (p. 18). Demostrar&lt;br /&gt;
     p ⟷ q, p ∨ q ⊢ p ∧ q&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_18_1:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟷ q&amp;quot; and &lt;br /&gt;
          2: &amp;quot;p ∨ q&amp;quot;  &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
using 2&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 1 3 by (rule iffD1)&lt;br /&gt;
    show &amp;quot;p ∧ q&amp;quot; using 3 4 by (rule conjI) }&lt;br /&gt;
next&lt;br /&gt;
  { assume 5: &amp;quot;q&amp;quot;&lt;br /&gt;
    have 6: &amp;quot;p&amp;quot; using 1 5 by (rule iffD2)&lt;br /&gt;
    show &amp;quot;p ∧ q&amp;quot; using 6 5 by (rule conjI) }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_18_2:&lt;br /&gt;
  assumes &amp;quot;p ⟷ q&amp;quot;&lt;br /&gt;
          &amp;quot;p ∨ q&amp;quot;  &lt;br /&gt;
  shows  &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
using assms(2)&lt;br /&gt;
proof&lt;br /&gt;
  { assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with assms(1) have &amp;quot;q&amp;quot; ..&lt;br /&gt;
    with `p` show &amp;quot;p ∧ q&amp;quot; .. }&lt;br /&gt;
next&lt;br /&gt;
  { assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with assms(1) have &amp;quot;p&amp;quot; ..&lt;br /&gt;
    thus &amp;quot;p ∧ q&amp;quot; using `q` .. }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_18_3:&lt;br /&gt;
  assumes &amp;quot;p ⟷ q&amp;quot;&lt;br /&gt;
          &amp;quot;p ∨ q&amp;quot;  &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
subsection {* Reglas derivadas *}&lt;br /&gt;
&lt;br /&gt;
subsubsection {* Regla del modus tollens *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 19 (p. 20) Demostrar la regla del modus tollens a partir de&lt;br /&gt;
  las reglas básicas. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_20_1:&lt;br /&gt;
  assumes 1: &amp;quot;F ⟶ G&amp;quot; and &lt;br /&gt;
          2: &amp;quot;¬G&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬F&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 3: &amp;quot;F&amp;quot;&lt;br /&gt;
  have 4: &amp;quot;G&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  show False using 2 4 by (rule notE)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_20_2:&lt;br /&gt;
  assumes &amp;quot;F ⟶ G&amp;quot;&lt;br /&gt;
          &amp;quot;¬G&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬F&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;F&amp;quot;&lt;br /&gt;
  with assms(1) have &amp;quot;G&amp;quot; ..&lt;br /&gt;
  with assms(2) show False ..&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_20_3:&lt;br /&gt;
  assumes &amp;quot;F ⟶ G&amp;quot;&lt;br /&gt;
          &amp;quot;¬G&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬F&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
subsubsection {* Regla de la introducción de la doble negación *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo 21 (p. 21) Demostrar la regla de introducción de la doble&lt;br /&gt;
  negación a partir de las reglas básicas.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_21_1:&lt;br /&gt;
  assumes 1: &amp;quot;F&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬¬F&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 2: &amp;quot;¬F&amp;quot;&lt;br /&gt;
  show False using 2 1 by (rule notE)&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_21_2:&lt;br /&gt;
  assumes &amp;quot;F&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬¬F&amp;quot;&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;¬F&amp;quot;&lt;br /&gt;
  thus False using assms ..&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_21_3:&lt;br /&gt;
  assumes &amp;quot;F&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬¬F&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
subsubsection {* Regla de reducción al absurdo *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La regla de reducción al absurdo en Isabelle se correponde con la&lt;br /&gt;
  regla clásica de contradicción &lt;br /&gt;
  · ccontr: (¬P ⟹ False) ⟹ P&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
subsubsection {* Ley del tercio excluso *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La ley del tercio excluso es &lt;br /&gt;
  · excluded_middle: ¬P ∨ P&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo 22 (p. 23). Demostrar la ley del tercio excluso a partir de&lt;br /&gt;
  las reglas básicas.  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_22_1:&lt;br /&gt;
  &amp;quot;F ∨ ¬F&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 1: &amp;quot;¬(F ∨ ¬F)&amp;quot;&lt;br /&gt;
  thus False&lt;br /&gt;
  proof (rule notE)&lt;br /&gt;
    show &amp;quot;F ∨ ¬F&amp;quot;&lt;br /&gt;
    proof (rule disjI2)&lt;br /&gt;
      show &amp;quot;¬F&amp;quot;&lt;br /&gt;
      proof (rule notI)&lt;br /&gt;
        assume 2: &amp;quot;F&amp;quot;&lt;br /&gt;
        hence 3: &amp;quot;F ∨ ¬F&amp;quot; by (rule disjI1)&lt;br /&gt;
        show False using 1 3 by (rule notE)&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
    &lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_22_2:&lt;br /&gt;
  &amp;quot;F ∨ ¬F&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬(F ∨ ¬F)&amp;quot;&lt;br /&gt;
  thus False&lt;br /&gt;
  proof (rule notE)&lt;br /&gt;
    show &amp;quot;F ∨ ¬F&amp;quot;&lt;br /&gt;
    proof (rule disjI2)&lt;br /&gt;
      show &amp;quot;¬F&amp;quot;&lt;br /&gt;
      proof (rule notI)&lt;br /&gt;
        assume &amp;quot;F&amp;quot;&lt;br /&gt;
        hence &amp;quot;F ∨ ¬F&amp;quot; ..&lt;br /&gt;
        with `¬(F ∨ ¬F)`show False ..&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
    &lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_22_3:&lt;br /&gt;
  &amp;quot;F ∨ ¬F&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 23 (p. 24). Demostrar&lt;br /&gt;
     p ⟶ q ⊢ ¬p ∨ q&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_23_1:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬p ∨ p&amp;quot; by (rule excluded_middle)&lt;br /&gt;
  thus &amp;quot;¬p ∨ q&amp;quot;&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
      thus &amp;quot;¬p ∨ q&amp;quot; by (rule disjI1) }&lt;br /&gt;
  next&lt;br /&gt;
    { assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
      have &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
      thus &amp;quot;¬p ∨ q&amp;quot; by (rule disjI2) }&lt;br /&gt;
  qed&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_23_2:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬p ∨ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬p ∨ p&amp;quot; ..&lt;br /&gt;
  thus &amp;quot;¬p ∨ q&amp;quot;&lt;br /&gt;
  proof &lt;br /&gt;
    { assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
      thus &amp;quot;¬p ∨ q&amp;quot; .. }&lt;br /&gt;
  next&lt;br /&gt;
    { assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with assms have &amp;quot;q&amp;quot; ..&lt;br /&gt;
      thus &amp;quot;¬p ∨ q&amp;quot; .. }&lt;br /&gt;
  qed&lt;br /&gt;
qed    &lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_23_3:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows &amp;quot;¬p ∨ q&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
subsection {* Demostraciones por contradicción *}&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  Ejemplo 24. Demostrar que &lt;br /&gt;
     ¬p, p ∨ q ⊢ q&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot;&lt;br /&gt;
lemma ejemplo_24_1:&lt;br /&gt;
  assumes &amp;quot;¬p&amp;quot;&lt;br /&gt;
          &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
using `p ∨ q`&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  with assms(1) show &amp;quot;q&amp;quot; by contradiction &lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  thus &amp;quot;q&amp;quot; by assumption&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ejemplo_24_2:&lt;br /&gt;
  assumes &amp;quot;¬p&amp;quot;&lt;br /&gt;
          &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
using `p ∨ q`&lt;br /&gt;
proof &lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  with assms(1) show &amp;quot;q&amp;quot; ..&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  thus &amp;quot;q&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ejemplo_24_3:&lt;br /&gt;
  assumes &amp;quot;¬p&amp;quot;&lt;br /&gt;
          &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Temas&amp;diff=236</id>
		<title>Temas</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Temas&amp;diff=236"/>
		<updated>2014-12-18T09:23:59Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: /* Temas de Razonamiento automático (2014-15) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Temas de &amp;#039;&amp;#039;Razonamiento automático (2014-15)&amp;#039;&amp;#039; ==&lt;br /&gt;
* [[Tema 1: Programación funcional en Isabelle]].&lt;br /&gt;
* [http://www.cs.us.es/~jalonso/cursos/i1m/temas/tema-8t.pdf Tema 2a: Razonamiento sobre programas Haskell]&lt;br /&gt;
* [[Tema 2b: Razonamiento automático sobre programas en Isabelle/HOL]].&lt;br /&gt;
* [[Tema 3: Razonamiento estructurado sobre programas en Isabelle/HOL]].&lt;br /&gt;
* [[Tema 4: Razonamiento por casos y por inducción]].&lt;br /&gt;
* [[Tema 5a: Verificación de la ordenación por inserción]].&lt;br /&gt;
* [[Tema 5b: Verificación de la ordenación por mezcla]].&lt;br /&gt;
* [[Tema 6: Caso de estudio: Compilación de expresiones]].&lt;br /&gt;
* [http://www.cs.us.es/~jalonso/cursos/li/temas/tema-2.pdf Tema 7a: Deducción natural proposicional]].&lt;br /&gt;
* [[Tema 7b: Deducción natural proposicional con Isabelle/HOL]].&lt;br /&gt;
* [http://www.cs.us.es/~jalonso/cursos/li/temas/tema-8.pdf Tema 8a: Deducción natural en lógica de primer orden]].&lt;br /&gt;
* [[Tema 8b: Deducción natural en lógica de primer orden con Isabelle/HOL]].&amp;lt;!--&lt;br /&gt;
* Tema 9: Panorama de la demostración asistida por ordenador.&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Relaci%C3%B3n_8&amp;diff=212</id>
		<title>Relación 8</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Relaci%C3%B3n_8&amp;diff=212"/>
		<updated>2014-12-04T12:56:00Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* R8: Árboles binarios completos *}  theory R8_Arboles_binarios_completos imports Main  begin   text {*     ---------------------------------------...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R8: Árboles binarios completos *}&lt;br /&gt;
&lt;br /&gt;
theory R8_Arboles_binarios_completos&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que no tienen información ni en los nodos y ni en las&lt;br /&gt;
  hojas. Por ejemplo, el árbol&lt;br /&gt;
          ·&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       ·     ·&lt;br /&gt;
      / \   / \&lt;br /&gt;
     ·   · ·   · &lt;br /&gt;
  se representa por &amp;quot;N (N H H) (N H H)&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype arbol = H | N arbol arbol&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N (N H H) (N H H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (hojas a) es el número de hojas del árbol a. Por ejemplo,&lt;br /&gt;
     hojas (N (N H H) (N H H)) = 4&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;hojas t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;hojas (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (profundidad a) es la profundidad del árbol a. Por ejemplo,&lt;br /&gt;
     profundidad (N (N H H) (N H H)) = 2&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;profundidad (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     abc :: &amp;quot;nat ⇒ arbol&amp;quot; &lt;br /&gt;
  tal que (abc n) es el árbol binario completo de profundidad n. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     abc 3 = N (N (N H H) (N H H)) (N (N H H) (N H H))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun abc :: &amp;quot;nat ⇒ arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;abc 0 = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;abc 3&amp;quot; -- &amp;quot;= N (N (N H H) (N H H)) (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un árbol binario a es completo respecto de la medida f si&lt;br /&gt;
  a es una hoja o bien a es de la forma (N i d) y se cumple que tanto i&lt;br /&gt;
  como d son árboles binarios completos respecto de f y, además, &lt;br /&gt;
  f(i) = f(r).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&lt;br /&gt;
  tal que (es_abc f a) se verifica si a es un árbol binario completo&lt;br /&gt;
  respecto de f.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&amp;quot; where&lt;br /&gt;
  &amp;quot;es_abc f t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. (size a) es el número de nodos del árbol a. Por ejemplo,&lt;br /&gt;
     size (N (N H H) (N H H)) = 3&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;size (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
value &amp;quot;size (N (N (N H H) (N H H)) (N (N H H) (N H H)))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. Tenemos 3 funciones de medida sobre los árboles: número de&lt;br /&gt;
  hojas, número de nodos y profundidad. A cada una le corresponde un&lt;br /&gt;
  concepto de completitud. En los siguientes ejercicios demostraremos&lt;br /&gt;
  que los tres conceptos de completitud son iguales.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de hojas.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que un árbol binario a es completo respecto del&lt;br /&gt;
  número de hojas syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que (abc n) es un árbol binario completo.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que si a es un árbolo binario completo&lt;br /&gt;
  respecto de la profundidad, entonces a es (abc (profundidad a)).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Encontrar una medida f tal que (es_abc f) es distinto de &lt;br /&gt;
  (es_abc size).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=R8&amp;diff=211</id>
		<title>R8</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=R8&amp;diff=211"/>
		<updated>2014-12-04T12:55:45Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Protegió «R8» ([edit=sysop] (indefinido) [move=sysop] (indefinido))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R8: Árboles binarios completos *}&lt;br /&gt;
&lt;br /&gt;
theory R8_Arboles_binarios_completos&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que no tienen información ni en los nodos y ni en las&lt;br /&gt;
  hojas. Por ejemplo, el árbol&lt;br /&gt;
          ·&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       ·     ·&lt;br /&gt;
      / \   / \&lt;br /&gt;
     ·   · ·   · &lt;br /&gt;
  se representa por &amp;quot;N (N H H) (N H H)&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype arbol = H | N arbol arbol&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N (N H H) (N H H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (hojas a) es el número de hojas del árbol a. Por ejemplo,&lt;br /&gt;
     hojas (N (N H H) (N H H)) = 4&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;hojas t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;hojas (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (profundidad a) es la profundidad del árbol a. Por ejemplo,&lt;br /&gt;
     profundidad (N (N H H) (N H H)) = 2&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;profundidad (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     abc :: &amp;quot;nat ⇒ arbol&amp;quot; &lt;br /&gt;
  tal que (abc n) es el árbol binario completo de profundidad n. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     abc 3 = N (N (N H H) (N H H)) (N (N H H) (N H H))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun abc :: &amp;quot;nat ⇒ arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;abc 0 = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;abc 3&amp;quot; -- &amp;quot;= N (N (N H H) (N H H)) (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un árbol binario a es completo respecto de la medida f si&lt;br /&gt;
  a es una hoja o bien a es de la forma (N i d) y se cumple que tanto i&lt;br /&gt;
  como d son árboles binarios completos respecto de f y, además, &lt;br /&gt;
  f(i) = f(r).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&lt;br /&gt;
  tal que (es_abc f a) se verifica si a es un árbol binario completo&lt;br /&gt;
  respecto de f.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&amp;quot; where&lt;br /&gt;
  &amp;quot;es_abc f t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. (size a) es el número de nodos del árbol a. Por ejemplo,&lt;br /&gt;
     size (N (N H H) (N H H)) = 3&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;size (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
value &amp;quot;size (N (N (N H H) (N H H)) (N (N H H) (N H H)))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. Tenemos 3 funciones de medida sobre los árboles: número de&lt;br /&gt;
  hojas, número de nodos y profundidad. A cada una le corresponde un&lt;br /&gt;
  concepto de completitud. En los siguientes ejercicios demostraremos&lt;br /&gt;
  que los tres conceptos de completitud son iguales.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de hojas.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que un árbol binario a es completo respecto del&lt;br /&gt;
  número de hojas syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que (abc n) es un árbol binario completo.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que si a es un árbolo binario completo&lt;br /&gt;
  respecto de la profundidad, entonces a es (abc (profundidad a)).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Encontrar una medida f tal que (es_abc f) es distinto de &lt;br /&gt;
  (es_abc size).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=R8&amp;diff=210</id>
		<title>R8</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=R8&amp;diff=210"/>
		<updated>2014-12-04T12:55:16Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* R8: Árboles binarios completos *}  theory R8_Arboles_binarios_completos imports Main  begin   text {*     ---------------------------------------...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R8: Árboles binarios completos *}&lt;br /&gt;
&lt;br /&gt;
theory R8_Arboles_binarios_completos&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que no tienen información ni en los nodos y ni en las&lt;br /&gt;
  hojas. Por ejemplo, el árbol&lt;br /&gt;
          ·&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       ·     ·&lt;br /&gt;
      / \   / \&lt;br /&gt;
     ·   · ·   · &lt;br /&gt;
  se representa por &amp;quot;N (N H H) (N H H)&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype arbol = H | N arbol arbol&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N (N H H) (N H H)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (hojas a) es el número de hojas del árbol a. Por ejemplo,&lt;br /&gt;
     hojas (N (N H H) (N H H)) = 4&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun hojas :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;hojas t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;hojas (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; &lt;br /&gt;
  tal que (profundidad a) es la profundidad del árbol a. Por ejemplo,&lt;br /&gt;
     profundidad (N (N H H) (N H H)) = 2&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun profundidad :: &amp;quot;arbol =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;profundidad t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;profundidad (N (N H H) (N H H))&amp;quot; -- &amp;quot;= 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     abc :: &amp;quot;nat ⇒ arbol&amp;quot; &lt;br /&gt;
  tal que (abc n) es el árbol binario completo de profundidad n. Por&lt;br /&gt;
  ejemplo,  &lt;br /&gt;
     abc 3 = N (N (N H H) (N H H)) (N (N H H) (N H H))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun abc :: &amp;quot;nat ⇒ arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;abc 0 = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;abc 3&amp;quot; -- &amp;quot;= N (N (N H H) (N H H)) (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Un árbol binario a es completo respecto de la medida f si&lt;br /&gt;
  a es una hoja o bien a es de la forma (N i d) y se cumple que tanto i&lt;br /&gt;
  como d son árboles binarios completos respecto de f y, además, &lt;br /&gt;
  f(i) = f(r).&lt;br /&gt;
&lt;br /&gt;
  Definir la función&lt;br /&gt;
     es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&lt;br /&gt;
  tal que (es_abc f a) se verifica si a es un árbol binario completo&lt;br /&gt;
  respecto de f.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun es_abc :: &amp;quot;(arbol =&amp;gt; &amp;#039;a) =&amp;gt; arbol =&amp;gt; bool&amp;quot; where&lt;br /&gt;
  &amp;quot;es_abc f t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. (size a) es el número de nodos del árbol a. Por ejemplo,&lt;br /&gt;
     size (N (N H H) (N H H)) = 3&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;size (N (N H H) (N H H))&amp;quot;&lt;br /&gt;
value &amp;quot;size (N (N (N H H) (N H H)) (N (N H H) (N H H)))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. Tenemos 3 funciones de medida sobre los árboles: número de&lt;br /&gt;
  hojas, número de nodos y profundidad. A cada una le corresponde un&lt;br /&gt;
  concepto de completitud. En los siguientes ejercicios demostraremos&lt;br /&gt;
  que los tres conceptos de completitud son iguales.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de hojas.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que un árbol binario a es completo respecto del&lt;br /&gt;
  número de hojas syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar que un árbol binario a es completo respecto de&lt;br /&gt;
  la profundidad syss es completo respecto del número de nodos&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que (abc n) es un árbol binario completo.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que si a es un árbolo binario completo&lt;br /&gt;
  respecto de la profundidad, entonces a es (abc (profundidad a)).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Encontrar una medida f tal que (es_abc f) es distinto de &lt;br /&gt;
  (es_abc size).&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Ejercicios&amp;diff=209</id>
		<title>Ejercicios</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Ejercicios&amp;diff=209"/>
		<updated>2014-12-04T12:54:31Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Relaciones de ejercicios ==&lt;br /&gt;
&lt;br /&gt;
=== Relaciones de ejercicios propuestos ===&lt;br /&gt;
&lt;br /&gt;
En esta sección se publicarán las relaciones de ejercicios. Las soluciones se escriben de forma colaborativa por los alumnos del curso y no deben tomarse como definitivas.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 1&amp;#039;&amp;#039;&amp;#039;: Programación funcional en Isabelle/HOL. ([[R1 |Enunciado]] y [[Relación 1 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 2&amp;#039;&amp;#039;&amp;#039;: Razonamiento automático sobre programas en Isabelle/HOL. ([[R2 |Enunciado]] y [[Relación 2 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 3&amp;#039;&amp;#039;&amp;#039;: Razonamiento estructurado sobre programas en Isabelle/HOL. ([[R3 |Enunciado]] y [[Relación 3 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 4&amp;#039;&amp;#039;&amp;#039;: Cons inverso. ([[R4 |Enunciado]] y [[Relación 4 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 5&amp;#039;&amp;#039;&amp;#039;: Cuantificadores sobre listas. ([[R5 |Enunciado]] y [[Relación 5 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 6&amp;#039;&amp;#039;&amp;#039;: Sustitución, inversión y eliminación. ([[R6 |Enunciado]] y [[Relación 6 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 7&amp;#039;&amp;#039;&amp;#039;: Recorridos de árboles. ([[R7 |Enunciado]] y [[Relación 7 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 8&amp;#039;&amp;#039;&amp;#039;: Árboles binarios completos. ([[R8 |Enunciado]] y [[Relación 8 | Solución colaborativa]]).&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 9&amp;#039;&amp;#039;&amp;#039;: Deducción natural proposicional (1). ([[R9 |Enunciado]] y [[Relación 9 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 10&amp;#039;&amp;#039;&amp;#039;: Deducción natural proposicional (2). ([[R10 |Enunciado]] y [[Relación 10 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 11&amp;#039;&amp;#039;&amp;#039;: Deducción natural proposicional de primer orden. ([[R11 |Enunciado]] y [[Relación 11 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 12&amp;#039;&amp;#039;&amp;#039;: Representación de fórmulas proposicionales mediante polinomios. ([[R12 |Enunciado]] y [[Relación 12 | Solución colaborativa]]).&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_6:_Caso_de_estudio:_Compilaci%C3%B3n_de_expresiones&amp;diff=205</id>
		<title>Tema 6: Caso de estudio: Compilación de expresiones</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_6:_Caso_de_estudio:_Compilaci%C3%B3n_de_expresiones&amp;diff=205"/>
		<updated>2014-12-04T10:52:05Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* Tema 6: Caso de estudio: Compilación de expresiones *}  theory T6 imports Main begin  text {*   El objetivo de este tema es contruir un compilado...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* Tema 6: Caso de estudio: Compilación de expresiones *}&lt;br /&gt;
&lt;br /&gt;
theory T6&lt;br /&gt;
imports Main&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El objetivo de este tema es contruir un compilador de expresiones&lt;br /&gt;
  genéricas (construidas con variables, constantes y operaciones&lt;br /&gt;
  binarias) a una máquina de pila y demostrar su corrección.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
section {* Las expresiones y el intérprete *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Definición. Las expresiones son las constantes, las variables&lt;br /&gt;
  (representadas por números naturales) y las aplicaciones de operadores&lt;br /&gt;
  binarios a dos expresiones. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
type_synonym &amp;#039;v binop = &amp;quot;&amp;#039;v ⇒ &amp;#039;v ⇒ &amp;#039;v&amp;quot;&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;v expr = &lt;br /&gt;
  Const &amp;#039;v &lt;br /&gt;
| Var nat &lt;br /&gt;
| App &amp;quot;&amp;#039;v binop&amp;quot; &amp;quot;&amp;#039;v expr&amp;quot; &amp;quot;&amp;#039;v expr&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Definición. [Intérprete] &lt;br /&gt;
  La función &amp;quot;valor&amp;quot; toma como argumentos una expresión y un entorno&lt;br /&gt;
  (i.e. una aplicación de las variables en elementos del lenguaje) y&lt;br /&gt;
  devuelve el valor de la expresión en el entorno.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun valor :: &amp;quot;&amp;#039;v expr ⇒ (nat ⇒ &amp;#039;v) ⇒ &amp;#039;v&amp;quot; where&lt;br /&gt;
  &amp;quot;valor (Const b)     ent = b&amp;quot;&lt;br /&gt;
| &amp;quot;valor (Var x)       ent = ent x&amp;quot;&lt;br /&gt;
| &amp;quot;valor (App f e1 e2) ent = (f (valor e1 ent) (valor e2 ent))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Ejemplo. A continuación mostramos algunos ejemplos de evaluación con&lt;br /&gt;
  el intérprete. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
  &amp;quot;valor (Const 3) id = 3 ∧&lt;br /&gt;
   valor (Var 2) id = 2 ∧&lt;br /&gt;
   valor (Var 2) (λx. x+1) = 3 ∧ &lt;br /&gt;
   valor (App (op +) (Const 3) (Var 2)) (λx. x+1) = 6 ∧&lt;br /&gt;
   valor (App (op +) (Const 3) (Var 2)) (λx. x+4) = 9&amp;quot; &lt;br /&gt;
by simp&lt;br /&gt;
&lt;br /&gt;
section {* La máquina de pila *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota. La máquina de pila tiene tres clases de intrucciones:&lt;br /&gt;
  · cargar en la pila una constante,&lt;br /&gt;
  · cargar en la pila el contenido de una dirección y&lt;br /&gt;
  · aplicar un operador binario a los dos elementos superiores de la pila.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;v instr = &lt;br /&gt;
  IConst &amp;#039;v &lt;br /&gt;
| ILoad nat &lt;br /&gt;
| IApp &amp;quot;&amp;#039;v binop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Definición. [Ejecución]&lt;br /&gt;
  La ejecución de la máquina de pila se modeliza mediante la función &lt;br /&gt;
  &amp;quot;ejec&amp;quot; que toma una lista de intrucciones, una memoria (representada &lt;br /&gt;
  como una función de las direcciones a los valores, análogamente a los &lt;br /&gt;
  entornos) y una pila (representada como una lista) y devuelve la pila&lt;br /&gt;
  al final de la ejecución.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun ejec :: &amp;quot;&amp;#039;v instr list ⇒ (nat ⇒ &amp;#039;v) ⇒ &amp;#039;v list ⇒ &amp;#039;v list&amp;quot; where&lt;br /&gt;
  &amp;quot;ejec []     ent vs = vs&amp;quot;&lt;br /&gt;
| &amp;quot;ejec (i#is) ent vs = &lt;br /&gt;
     (case i of&lt;br /&gt;
        IConst v ⇒ ejec is ent (v#vs)&lt;br /&gt;
      | ILoad x  ⇒ ejec is ent ((ent x)#vs)&lt;br /&gt;
      | IApp f   ⇒ ejec is ent ((f (hd vs) (hd (tl vs)))#(tl(tl vs))))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  A continuación se muestran ejemplos de ejecución.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma&lt;br /&gt;
  &amp;quot;ejec [IConst 3]          id                     [7] = [3,7] ∧&lt;br /&gt;
   ejec [ILoad 2, IConst 3] id                     [7] = [3,2,7] ∧&lt;br /&gt;
   ejec [ILoad 2, IConst 3] (λx. x+4)              [7] = [3,6,7] ∧&lt;br /&gt;
   ejec [ILoad 2, IConst 3, IApp (op +)] (λx. x+4) [7] = [9,7]&amp;quot;&lt;br /&gt;
by simp&lt;br /&gt;
&lt;br /&gt;
section {* El compilador *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Definición. El compilador &amp;quot;comp&amp;quot; traduce una expresión en una lista de&lt;br /&gt;
  instrucciones. &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun comp :: &amp;quot;&amp;#039;v expr ⇒ &amp;#039;v instr list&amp;quot; where&lt;br /&gt;
  &amp;quot;comp (Const v)     = [IConst v]&amp;quot;&lt;br /&gt;
| &amp;quot;comp (Var x)       = [ILoad x]&amp;quot;&lt;br /&gt;
| &amp;quot;comp (App f e1 e2) = (comp e2) @ (comp e1) @ [IApp f]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  A continuación se muestran ejemplos de compilación.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma&lt;br /&gt;
  &amp;quot;comp (Const 3)                      = [IConst 3] ∧&lt;br /&gt;
   comp (Var 2)                        = [ILoad 2] ∧&lt;br /&gt;
   comp (App (op +) (Const 3) (Var 2)) = [ILoad 2, IConst 3, IApp (op +)]&amp;quot;&lt;br /&gt;
by simp&lt;br /&gt;
&lt;br /&gt;
section {* Corrección del compilador *}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Para demostrar que el compilador es correcto, probamos que el&lt;br /&gt;
  resultado de compilar una expresión y a continuación ejecutarla es lo&lt;br /&gt;
  mismo que interpretarla; es decir, &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;ejec (comp e) ent [] = [valor e ent]&amp;quot; &lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  El teorema anterior no puede demostrarse por inducción en e. Para&lt;br /&gt;
  demostrarlo, lo generalizamos a&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;∀vs. ejec (comp e) ent vs = (valor e ent)#vs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  En la demostración del teorema anterior usaremos el siguiente lema.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma ejec_append:&lt;br /&gt;
  &amp;quot;∀ vs. ejec (xs@ys) ent vs = ejec ys ent (ejec xs ent vs)&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume &amp;quot;?P xs&amp;quot;&lt;br /&gt;
  thus &amp;quot;?P (a#xs)&amp;quot; by (cases &amp;quot;a&amp;quot;, auto)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración detallada es&amp;quot; &lt;br /&gt;
lemma ejec_append_1:&lt;br /&gt;
  &amp;quot;∀ vs. ejec (xs@ys) ent vs = ejec ys ent (ejec xs ent vs)&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs&amp;quot;&lt;br /&gt;
  thus &amp;quot;?P (a#xs)&amp;quot;&lt;br /&gt;
  proof (cases &amp;quot;a&amp;quot;)&lt;br /&gt;
    case IConst thus ?thesis using HI by simp&lt;br /&gt;
  next&lt;br /&gt;
    case ILoad thus ?thesis using HI by simp&lt;br /&gt;
  next&lt;br /&gt;
    case IApp thus ?thesis using HI by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Una demostración más detallada del lema es la siguiente:&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma ejec_append_2:&lt;br /&gt;
  &amp;quot;∀vs. ejec (xs@ys) ent vs = ejec ys ent (ejec xs ent vs)&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs&amp;quot;&lt;br /&gt;
  thus &amp;quot;?P (a#xs)&amp;quot;&lt;br /&gt;
  proof (cases &amp;quot;a&amp;quot;)&lt;br /&gt;
    fix v assume C1: &amp;quot;a=IConst v&amp;quot;&lt;br /&gt;
    show &amp;quot; ∀vs. ejec ((a#xs)@ys) ent vs = ejec ys ent (ejec (a#xs) ent vs)&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      fix vs&lt;br /&gt;
      have &amp;quot;ejec ((a#xs)@ys) ent vs = ejec (((IConst v)#xs)@ys) ent vs&amp;quot;&lt;br /&gt;
        using C1 by simp&lt;br /&gt;
      also have &amp;quot;… = ejec (xs@ys) ent (v#vs)&amp;quot; by simp&lt;br /&gt;
      also have &amp;quot;… = ejec ys ent (ejec xs ent (v#vs))&amp;quot; using HI by simp&lt;br /&gt;
      also have &amp;quot;… = ejec ys ent (ejec ((IConst v)#xs) ent vs)&amp;quot; by simp&lt;br /&gt;
      also have &amp;quot;… = ejec ys ent (ejec (a#xs) ent vs)&amp;quot; using C1 by simp&lt;br /&gt;
      finally show &amp;quot;ejec ((a#xs)@ys) ent vs = &lt;br /&gt;
                    ejec ys ent (ejec (a#xs) ent vs)&amp;quot; .&lt;br /&gt;
    qed&lt;br /&gt;
  next&lt;br /&gt;
    fix n assume C2: &amp;quot;a=ILoad n&amp;quot;&lt;br /&gt;
    show &amp;quot; ∀vs. ejec ((a#xs)@ys) ent vs = ejec ys ent (ejec (a#xs) ent vs)&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      fix vs&lt;br /&gt;
      have &amp;quot;ejec ((a#xs)@ys) ent vs = ejec (((ILoad n)#xs)@ys) ent vs&amp;quot;&lt;br /&gt;
        using C2 by simp&lt;br /&gt;
      also have &amp;quot;… = ejec (xs@ys) ent ((ent n)#vs)&amp;quot; by simp&lt;br /&gt;
      also have &amp;quot;… = ejec ys ent (ejec xs ent ((ent n)#vs))&amp;quot; using HI by simp&lt;br /&gt;
      also have &amp;quot;… = ejec ys ent (ejec ((ILoad n)#xs) ent vs)&amp;quot; by simp&lt;br /&gt;
      also have &amp;quot;… = ejec ys ent (ejec (a#xs) ent vs)&amp;quot; using C2 by simp&lt;br /&gt;
      finally show &amp;quot;ejec ((a#xs)@ys) ent vs = &lt;br /&gt;
                    ejec ys ent (ejec (a#xs) ent vs)&amp;quot; .&lt;br /&gt;
    qed&lt;br /&gt;
  next&lt;br /&gt;
    fix f assume C3: &amp;quot;a=IApp f&amp;quot;&lt;br /&gt;
    show &amp;quot;∀vs. ejec ((a#xs)@ys) ent vs = ejec ys ent (ejec (a#xs) ent vs)&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      fix vs&lt;br /&gt;
      have &amp;quot;ejec ((a#xs)@ys) ent vs = ejec (((IApp f)#xs)@ys) ent vs&amp;quot;&lt;br /&gt;
        using C3 by simp&lt;br /&gt;
      also have &amp;quot;… = ejec (xs@ys) ent ((f (hd vs) (hd (tl vs)))#(tl(tl vs)))&amp;quot; &lt;br /&gt;
        by simp&lt;br /&gt;
      also have &amp;quot;… = ejec ys &lt;br /&gt;
                          ent &lt;br /&gt;
                          (ejec xs ent ((f (hd vs) (hd (tl vs)))#(tl(tl vs))))&amp;quot; &lt;br /&gt;
        using HI by simp&lt;br /&gt;
      also have &amp;quot;… = ejec ys ent (ejec ((IApp f)#xs) ent vs)&amp;quot; by simp&lt;br /&gt;
      also have &amp;quot;… = ejec ys ent (ejec (a#xs) ent vs)&amp;quot; using C3 by simp&lt;br /&gt;
      finally show &amp;quot;ejec ((a#xs)@ys) ent vs = &lt;br /&gt;
                    ejec ys ent (ejec (a#xs) ent vs)&amp;quot; .&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La demostración automática del teorema es&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;∀vs. ejec (comp e) ent vs = (valor e ent)#vs&amp;quot;&lt;br /&gt;
by (induct e) (auto simp add:ejec_append)&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  La demostración estructurada del teorema es&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;∀vs. ejec (comp e) ent vs = (valor e ent)#vs&amp;quot;&lt;br /&gt;
proof (induct e)&lt;br /&gt;
  fix v&lt;br /&gt;
  show &amp;quot;∀vs. ejec (comp (Const v)) ent vs = (valor (Const v) ent)#vs&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;∀vs. ejec (comp (Var x)) ent vs = (valor (Var x) ent) # vs&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix f e1 e2&lt;br /&gt;
  assume HI1: &amp;quot;∀vs. ejec (comp e1) ent vs = (valor e1 ent) # vs&amp;quot;&lt;br /&gt;
    and HI2: &amp;quot;∀vs. ejec (comp e2) ent vs = (valor e2 ent) # vs&amp;quot;&lt;br /&gt;
  show &amp;quot;∀vs. ejec (comp (App f e1 e2)) ent vs = (valor (App f e1 e2) ent) # vs&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    fix vs&lt;br /&gt;
    have &amp;quot;ejec (comp (App f e1 e2)) ent vs&lt;br /&gt;
          = ejec ((comp e2) @ (comp e1) @ [IApp f]) ent vs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = ejec ((comp e1) @ [IApp f]) ent (ejec (comp e2) ent vs)&amp;quot;&lt;br /&gt;
      using ejec_append by blast&lt;br /&gt;
    also have &amp;quot;… = ejec [IApp f] &lt;br /&gt;
                         ent &lt;br /&gt;
                         (ejec (comp e1) ent (ejec (comp e2) ent vs))&amp;quot; &lt;br /&gt;
      using ejec_append by blast&lt;br /&gt;
    also have &amp;quot;… =  ejec [IApp f] ent (ejec (comp e1) ent ((valor e2 ent)#vs))&amp;quot;&lt;br /&gt;
      using HI2 by simp&lt;br /&gt;
    also have &amp;quot;… = ejec [IApp f] ent ((valor e1 ent)#((valor e2 ent)#vs))&amp;quot;&lt;br /&gt;
      using HI1 by simp&lt;br /&gt;
    also have &amp;quot;… = (f (valor e1 ent) (valor e2 ent))#vs&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = (valor (App f e1 e2) ent) # vs&amp;quot; by simp&lt;br /&gt;
    finally &lt;br /&gt;
    show &amp;quot;ejec (comp (App f e1 e2)) ent vs = (valor (App f e1 e2) ent) # vs&amp;quot; &lt;br /&gt;
      by blast&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Temas&amp;diff=204</id>
		<title>Temas</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Temas&amp;diff=204"/>
		<updated>2014-12-04T10:51:43Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Temas de &amp;#039;&amp;#039;Razonamiento automático (2014-15)&amp;#039;&amp;#039; ==&lt;br /&gt;
* [[Tema 1: Programación funcional en Isabelle]].&lt;br /&gt;
* [http://www.cs.us.es/~jalonso/cursos/i1m/temas/tema-8t.pdf Tema 2a: Razonamiento sobre programas Haskell]&lt;br /&gt;
* [[Tema 2b: Razonamiento automático sobre programas en Isabelle/HOL]].&lt;br /&gt;
* [[Tema 3: Razonamiento estructurado sobre programas en Isabelle/HOL]].&lt;br /&gt;
* [[Tema 4: Razonamiento por casos y por inducción]].&lt;br /&gt;
* [[Tema 5a: Verificación de la ordenación por inserción]].&lt;br /&gt;
* [[Tema 5b: Verificación de la ordenación por mezcla]].&lt;br /&gt;
* [[Tema 6: Caso de estudio: Compilación de expresiones]].&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* Tema 6: Deducción natural proposicional con Isabelle/HOL.&lt;br /&gt;
* Tema 7: Deducción natural en lógica de primer orden con Isabelle/HOL.&lt;br /&gt;
* Tema 9: Panorama de la demostración asistida por ordenador.&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Relaci%C3%B3n_7&amp;diff=182</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Relaci%C3%B3n_7&amp;diff=182"/>
		<updated>2014-11-28T13:04:52Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* R7: Recorridos de árboles *}  theory R7 imports Main  begin   text {*     ---------------------------------------------------------------------  ...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R7: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R7&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,d,c,f,h,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=R7&amp;diff=181</id>
		<title>R7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=R7&amp;diff=181"/>
		<updated>2014-11-28T13:04:35Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Protegió «R7» ([edit=sysop] (indefinido) [move=sysop] (indefinido))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R7: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R7&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,d,c,f,h,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=R7&amp;diff=180</id>
		<title>R7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=R7&amp;diff=180"/>
		<updated>2014-11-28T13:04:24Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* R7: Recorridos de árboles *}  theory R7 imports Main  begin   text {*     ---------------------------------------------------------------------  ...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R7: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R7&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;= [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,d,c,f,h,g,e]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;[a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; &lt;br /&gt;
-- &amp;quot;N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha t = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h)))&amp;quot; -- &amp;quot;= h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Ejercicios&amp;diff=179</id>
		<title>Ejercicios</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Ejercicios&amp;diff=179"/>
		<updated>2014-11-28T13:03:53Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: /* Relaciones de ejercicios propuestos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Relaciones de ejercicios ==&lt;br /&gt;
&lt;br /&gt;
=== Relaciones de ejercicios propuestos ===&lt;br /&gt;
&lt;br /&gt;
En esta sección se publicarán las relaciones de ejercicios. Las soluciones se escriben de forma colaborativa por los alumnos del curso y no deben tomarse como definitivas.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 1&amp;#039;&amp;#039;&amp;#039;: Programación funcional en Isabelle/HOL. ([[R1 |Enunciado]] y [[Relación 1 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 2&amp;#039;&amp;#039;&amp;#039;: Razonamiento automático sobre programas en Isabelle/HOL. ([[R2 |Enunciado]] y [[Relación 2 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 3&amp;#039;&amp;#039;&amp;#039;: Razonamiento estructurado sobre programas en Isabelle/HOL. ([[R3 |Enunciado]] y [[Relación 3 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 4&amp;#039;&amp;#039;&amp;#039;: Cons inverso. ([[R4 |Enunciado]] y [[Relación 4 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 5&amp;#039;&amp;#039;&amp;#039;: Cuantificadores sobre listas. ([[R5 |Enunciado]] y [[Relación 5 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 6&amp;#039;&amp;#039;&amp;#039;: Sustitución, inversión y eliminación. ([[R6 |Enunciado]] y [[Relación 6 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 7&amp;#039;&amp;#039;&amp;#039;: Recorridos de árboles. ([[R7 |Enunciado]] y [[Relación 7 | Solución colaborativa]]).&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 8&amp;#039;&amp;#039;&amp;#039;: Árboles binarios completos. ([[R8 |Enunciado]] y [[Relación 8 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 9&amp;#039;&amp;#039;&amp;#039;: Deducción natural proposicional (1). ([[R9 |Enunciado]] y [[Relación 9 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 10&amp;#039;&amp;#039;&amp;#039;: Deducción natural proposicional (2). ([[R10 |Enunciado]] y [[Relación 10 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 11&amp;#039;&amp;#039;&amp;#039;: Deducción natural proposicional de primer orden. ([[R11 |Enunciado]] y [[Relación 11 | Solución colaborativa]]).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Relación 12&amp;#039;&amp;#039;&amp;#039;: Representación de fórmulas proposicionales mediante polinomios. ([[R12 |Enunciado]] y [[Relación 12 | Solución colaborativa]]).&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_5b:_Verificaci%C3%B3n_de_la_ordenaci%C3%B3n_por_mezcla&amp;diff=178</id>
		<title>Tema 5b: Verificación de la ordenación por mezcla</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_5b:_Verificaci%C3%B3n_de_la_ordenaci%C3%B3n_por_mezcla&amp;diff=178"/>
		<updated>2014-11-27T12:02:20Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* T5b: Verificación de la ordenación por mezcla *}  theory T5b_Verificacion_de_la_ordenacion_por_mezcla_sol imports Main begin  text {*   En esta ...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* T5b: Verificación de la ordenación por mezcla *}&lt;br /&gt;
&lt;br /&gt;
theory T5b_Verificacion_de_la_ordenacion_por_mezcla_sol&lt;br /&gt;
imports Main&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  En esta relación de ejercicios se define el algoritmo de ordenación de&lt;br /&gt;
  listas por mezcla y se demuestra que es correcto.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función&lt;br /&gt;
     menor :: int ⇒ int list ⇒ bool&lt;br /&gt;
  tal que (menor a xs) se verifica si a es menor o igual que todos los&lt;br /&gt;
  elementos de xs.Por ejemplo,  &lt;br /&gt;
     menor 2 [3,2,5] = True&lt;br /&gt;
     menor 2 [3,0,5] = False&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun menor :: &amp;quot;int ⇒ int list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;menor a []     = True&amp;quot;&lt;br /&gt;
| &amp;quot;menor a (x#xs) = (a ≤ x ∧ menor a xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;menor 2 [3,2,5]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;menor 2 [3,0,5]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     ordenada :: int list ⇒ bool&lt;br /&gt;
  tal que (ordenada xs) se verifica si xs es una lista ordenada de&lt;br /&gt;
  manera creciente. Por ejemplo,  &lt;br /&gt;
     ordenada [2,3,3,5] = True &lt;br /&gt;
     ordenada [2,4,3,5] = False &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun ordenada :: &amp;quot;int list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;ordenada []     = True&amp;quot;&lt;br /&gt;
| &amp;quot;ordenada (x#xs) = (menor x xs &amp;amp; ordenada xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;ordenada [2,3,3,5]&amp;quot; -- &amp;quot;= True&amp;quot; &lt;br /&gt;
value &amp;quot;ordenada [2,4,3,5]&amp;quot; -- &amp;quot;= False&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     cuenta :: int list =&amp;gt; int =&amp;gt; nat&lt;br /&gt;
  tal que (cuenta xs y) es el número de veces que aparece el elemento y&lt;br /&gt;
  en la lista xs. Por ejemplo, &lt;br /&gt;
     cuenta [1,3,4,3,5] 3 = 2&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun cuenta :: &amp;quot;int list =&amp;gt; int =&amp;gt; nat&amp;quot; where&lt;br /&gt;
  &amp;quot;cuenta []     y = 0&amp;quot;&lt;br /&gt;
| &amp;quot;cuenta (x#xs) y = (if x=y then Suc(cuenta xs y) else cuenta xs y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;cuenta [1,3,4,3,5] 3&amp;quot; -- &amp;quot;= 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
section {* Ordenación por mezcla *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     mezcla :: int list ⇒ int list ⇒ int list&lt;br /&gt;
  tal que (mezcla xs ys) es la lista obtenida mezclando las listas&lt;br /&gt;
  ordenadas xs e ys. Por ejemplo, &lt;br /&gt;
     mezcla [1,2,5] [3,5,7] = [1,2,3,5,5,7]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun mezcla :: &amp;quot;int list ⇒ int list ⇒ int list&amp;quot; where&lt;br /&gt;
  &amp;quot;mezcla [] ys = ys&amp;quot; &lt;br /&gt;
| &amp;quot;mezcla xs [] = xs&amp;quot; &lt;br /&gt;
| &amp;quot;mezcla (x # xs) (y # ys) = (if x ≤ y&lt;br /&gt;
                               then x # mezcla xs (y # ys)&lt;br /&gt;
                               else y # mezcla (x # xs) ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;mezcla [1,2,5] [3,5,7]&amp;quot; -- &amp;quot;= [1,2,3,5,5,7]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     ordenaM :: int list ⇒ int list&lt;br /&gt;
  tal que (ordenaM xs) es la lista obtenida ordenando la lista xs&lt;br /&gt;
  mediante mezclas; es decir, la divide en dos mitades, las ordena y las&lt;br /&gt;
  mezcla. Por ejemplo, &lt;br /&gt;
     ordenaM [3,2,5,2] = [2,2,3,5]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun ordenaM :: &amp;quot;int list ⇒ int list&amp;quot; where&lt;br /&gt;
  &amp;quot;ordenaM [] = []&amp;quot; &lt;br /&gt;
| &amp;quot;ordenaM [x] = [x]&amp;quot; &lt;br /&gt;
| &amp;quot;ordenaM xs = &lt;br /&gt;
     (let mitad = length xs div 2 in&lt;br /&gt;
      mezcla (ordenaM (take mitad xs)) &lt;br /&gt;
             (ordenaM (drop mitad xs)))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;ordenaM [3,2,5,2]&amp;quot; -- &amp;quot;= [2,2,3,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Sea x ≤ y. Si y es menor o igual que todos los elementos&lt;br /&gt;
  de xs, entonces x es menor o igual que todos los elementos de xs&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma menor_menor: &lt;br /&gt;
  &amp;quot;x ≤ y ⟹ menor y xs ⟶ menor x xs&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que el número de veces que aparece n en la&lt;br /&gt;
  mezcla de dos listas es igual a la suma del número de apariciones en&lt;br /&gt;
  cada una de las listas&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma cuenta_mezcla: &lt;br /&gt;
  &amp;quot;cuenta (mezcla xs ys) n = cuenta xs n + cuenta ys n&amp;quot;&lt;br /&gt;
by (induct xs ys rule: mezcla.induct) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que si x es menor que todos los elementos de&lt;br /&gt;
  ys y de zs, entonces también lo es de su mezcla.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma menor_mezcla:&lt;br /&gt;
  assumes &amp;quot;menor x ys&amp;quot; &lt;br /&gt;
          &amp;quot;menor x zs&amp;quot; &lt;br /&gt;
  shows   &amp;quot;menor x (mezcla ys zs)&amp;quot;&lt;br /&gt;
using assms &lt;br /&gt;
by (induct ys zs rule: mezcla.induct) simp_all&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar que la mezcla de dos listas ordenadas es una&lt;br /&gt;
  lista ordenada. &lt;br /&gt;
  Indicación: Usar los siguientes lemas&lt;br /&gt;
  · linorder_not_le: (¬ x ≤ y) = (y &amp;lt; x)&lt;br /&gt;
  · order_less_le:   (x &amp;lt; y) = (x ≤ y ∧ x ≠ y)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma ordenada_mezcla:&lt;br /&gt;
  assumes &amp;quot;ordenada xs&amp;quot; &lt;br /&gt;
          &amp;quot;ordenada ys&amp;quot; &lt;br /&gt;
  shows   &amp;quot;ordenada (mezcla xs ys)&amp;quot;&lt;br /&gt;
using assms &lt;br /&gt;
by (induct xs ys rule: mezcla.induct) &lt;br /&gt;
   (auto simp add: menor_mezcla&lt;br /&gt;
                   menor_menor&lt;br /&gt;
                   linorder_not_le &lt;br /&gt;
                   order_less_le)&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que si x es mayor que 1, entonces el mínimo de&lt;br /&gt;
  x y su mitad es menor que x.&lt;br /&gt;
  Indicación: Usar los siguientes lemas&lt;br /&gt;
  · min_def:         min a b = (if a ≤ b then a else b)&lt;br /&gt;
  · linorder_not_le: (¬ x ≤ y) = (y &amp;lt; x)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma min_mitad: &lt;br /&gt;
  &amp;quot;1 &amp;lt; x ⟹ min x (x div 2::int) &amp;lt; x&amp;quot;&lt;br /&gt;
by (simp add: min_def linorder_not_le)&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que si x es mayor que 1, entonces x menos su&lt;br /&gt;
  mitad es menor que x. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma menos_mitad: &lt;br /&gt;
  &amp;quot;1 &amp;lt; x ⟹ x - x div (2::int) &amp;lt; x&amp;quot;&lt;br /&gt;
by arith&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar que (ordenaM xs) está ordenada.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
theorem ordenada_ordenaM:&lt;br /&gt;
  &amp;quot;ordenada (ordenaM xs)&amp;quot;&lt;br /&gt;
by (induct xs rule: ordenaM.induct) &lt;br /&gt;
   (auto simp add: ordenada_mezcla)&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar que el número de apariciones de un elemento en&lt;br /&gt;
  la concatenación de dos listas es la suma del número de apariciones en&lt;br /&gt;
  cada una.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
lemma cuenta_conc: &lt;br /&gt;
  &amp;quot;cuenta (xs @ ys) x = cuenta xs x + cuenta ys x&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar que las listas xs y (ordenaM xs) tienen los&lt;br /&gt;
  mismos elementos.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
theorem cuenta_ordenaM: &lt;br /&gt;
  &amp;quot;cuenta (ordenaM xs) x = cuenta xs x&amp;quot;&lt;br /&gt;
by (induct xs rule: ordenaM.induct) &lt;br /&gt;
   (auto simp add: cuenta_mezcla &lt;br /&gt;
                   cuenta_conc [symmetric])&lt;br /&gt;
   &lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_5a:_Verificaci%C3%B3n_de_la_ordenaci%C3%B3n_por_inserci%C3%B3n&amp;diff=177</id>
		<title>Tema 5a: Verificación de la ordenación por inserción</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Tema_5a:_Verificaci%C3%B3n_de_la_ordenaci%C3%B3n_por_inserci%C3%B3n&amp;diff=177"/>
		<updated>2014-11-27T12:01:52Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* T5a: Verificación de la ordenación por inserción *}  theory T5a_Verificacion_de_la_ordenacion_por_insercion imports Main begin  text {*   En es...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* T5a: Verificación de la ordenación por inserción *}&lt;br /&gt;
&lt;br /&gt;
theory T5a_Verificacion_de_la_ordenacion_por_insercion&lt;br /&gt;
imports Main&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  En este de tema se define el algoritmo de ordenación de listas &lt;br /&gt;
  por inserción y se demuestra que es correcto. Se plantea como una &lt;br /&gt;
  ❙sucesión de ejercicios.&lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función&lt;br /&gt;
     inserta :: int ⇒ int list ⇒ int list&lt;br /&gt;
  tal que (inserta a xs) es la lista obtenida insertando a delante del&lt;br /&gt;
  primer elemento de xs que es mayor o igual que a. Por ejemplo,&lt;br /&gt;
     inserta 3 [2,5,1,7] = [2,3,5,1,7]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun inserta :: &amp;quot;int ⇒ int list ⇒ int list&amp;quot; where&lt;br /&gt;
  &amp;quot;inserta a []     = [a]&amp;quot;&lt;br /&gt;
| &amp;quot;inserta a (x#xs) = (if a ≤ x then a#x#xs &lt;br /&gt;
                                else x # inserta a xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inserta 3 [2,5,1,7]&amp;quot; -- &amp;quot;= [2,3,5,1,7]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     ordena :: int list ⇒ int list&lt;br /&gt;
  tal que (ordena xs) es la lista obtenida ordenando xs por inserción. &lt;br /&gt;
  Por ejemplo, &lt;br /&gt;
     ordena [3,2,5,3] = [2,3,3,5]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun ordena :: &amp;quot;int list ⇒ int list&amp;quot; where&lt;br /&gt;
  &amp;quot;ordena []     = []&amp;quot;&lt;br /&gt;
| &amp;quot;ordena (x#xs) = inserta x (ordena xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;ordena [3,2,5,3]&amp;quot; -- &amp;quot;[2,3,3,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función&lt;br /&gt;
     menor :: int ⇒ int list ⇒ bool&lt;br /&gt;
  tal que (menor a xs) se verifica si a es menor o igual que todos los&lt;br /&gt;
  elementos de xs.Por ejemplo,  &lt;br /&gt;
     menor 2 [3,2,5] = True&lt;br /&gt;
     menor 2 [3,0,5] = False&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun menor :: &amp;quot;int ⇒ int list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;menor a []     = True&amp;quot;&lt;br /&gt;
| &amp;quot;menor a (x#xs) = (a ≤ x ∧ menor a xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;menor 2 [3,2,5]&amp;quot; -- &amp;quot;= True&amp;quot;&lt;br /&gt;
value &amp;quot;menor 2 [3,0,5]&amp;quot; -- &amp;quot;= False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     ordenada :: int list ⇒ bool&lt;br /&gt;
  tal que (ordenada xs) se verifica si xs es una lista ordenada de&lt;br /&gt;
  manera creciente. Por ejemplo,  &lt;br /&gt;
     ordenada [2,3,3,5] = True &lt;br /&gt;
     ordenada [2,4,3,5] = False &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun ordenada :: &amp;quot;int list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;ordenada []     = True&amp;quot;&lt;br /&gt;
| &amp;quot;ordenada (x#xs) = (menor x xs &amp;amp; ordenada xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;ordenada [2,3,3,5]&amp;quot; -- &amp;quot;= True&amp;quot; &lt;br /&gt;
value &amp;quot;ordenada [2,4,3,5]&amp;quot; -- &amp;quot;= False&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar que si y es una cota inferior de zs y x ≤ y,&lt;br /&gt;
  entonces x es una cota inferior de zs.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma menor_menor: &lt;br /&gt;
  assumes &amp;quot;x ≤ y&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;menor y zs ⟶ menor x zs&amp;quot;&lt;br /&gt;
using assms&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma menor_menor_2: &lt;br /&gt;
  assumes &amp;quot;x ≤ y&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;menor y zs ⟶ menor x zs&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;menor y [] ⟶ menor x []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix z zs&lt;br /&gt;
  assume HI: &amp;quot;menor y zs ⟶ menor x zs&amp;quot;  &lt;br /&gt;
  show &amp;quot;menor y (z # zs) ⟶ menor x (z # zs)&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume sup: &amp;quot;menor y (z # zs)&amp;quot;&lt;br /&gt;
    show &amp;quot;menor x (z # zs)&amp;quot;&lt;br /&gt;
    proof (simp only: menor.simps(2))&lt;br /&gt;
      show &amp;quot;x ≤ z ∧ menor x zs&amp;quot;&lt;br /&gt;
      proof&lt;br /&gt;
          have &amp;quot;x ≤ y&amp;quot; using assms .&lt;br /&gt;
          also have &amp;quot;y ≤ z&amp;quot; using sup by simp&lt;br /&gt;
          finally show &amp;quot;x ≤ z&amp;quot; .&lt;br /&gt;
      next&lt;br /&gt;
        have &amp;quot;menor y zs&amp;quot; using sup by simp&lt;br /&gt;
        with HI show &amp;quot;menor x zs&amp;quot; by simp&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar el siguiente teorema de corrección: x es una&lt;br /&gt;
  cota inferior de la lista obtenida insertando y en zs syss x ≤ y y x&lt;br /&gt;
  es una cota inferior de zs.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma menor_inserta:&lt;br /&gt;
  &amp;quot;menor x (inserta y zs) = (x ≤ y ∧ menor x zs)&amp;quot;&lt;br /&gt;
by (induct zs) auto&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma menor_inserta_2: &lt;br /&gt;
  &amp;quot;menor x (inserta y zs) = (x ≤ y ∧ menor x zs)&amp;quot;&lt;br /&gt;
proof (induct zs)&lt;br /&gt;
  show &amp;quot;menor x (inserta y []) = (x ≤ y ∧ menor x [])&amp;quot; by simp&lt;br /&gt;
next &lt;br /&gt;
  fix z zs&lt;br /&gt;
  assume HI: &amp;quot;menor x (inserta y zs) = (x ≤ y ∧ menor x zs)&amp;quot;&lt;br /&gt;
  show &amp;quot;menor x (inserta y (z#zs)) = (x ≤ y ∧ menor x (z#zs))&amp;quot; &lt;br /&gt;
  proof (cases &amp;quot;y ≤ z&amp;quot;)&lt;br /&gt;
    assume &amp;quot;y ≤ z&amp;quot;&lt;br /&gt;
    hence &amp;quot;menor x (inserta y (z#zs)) = menor x (y#z#zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = (x ≤ y ∧ menor x (z#zs))&amp;quot; by simp&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬(y ≤ z)&amp;quot;&lt;br /&gt;
    hence &amp;quot;menor x (inserta y (z#zs)) = &lt;br /&gt;
           menor x (z # inserta y zs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = (x ≤ z ∧ menor x (inserta y zs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = (x ≤ z ∧ x ≤ y ∧ menor x zs)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;… = (x ≤ y ∧ menor x (z#zs))&amp;quot; by auto&lt;br /&gt;
    finally show ?thesis by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que al insertar un elemento la lista obtenida&lt;br /&gt;
  está ordenada syss lo estaba la original.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma ordenada_inserta:&lt;br /&gt;
  &amp;quot;ordenada (inserta a xs) = ordenada xs&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: menor_menor menor_inserta)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
lemma ordenada_inserta_2:&lt;br /&gt;
  &amp;quot;ordenada (inserta a xs) = ordenada xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;ordenada (inserta a []) = ordenada []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x xs&lt;br /&gt;
  assume HI: &amp;quot;ordenada (inserta a xs) = ordenada xs&amp;quot; &lt;br /&gt;
  show &amp;quot;ordenada (inserta a (x # xs)) = ordenada (x # xs)&amp;quot; &lt;br /&gt;
  proof (cases &amp;quot;a ≤ x&amp;quot;)&lt;br /&gt;
    assume &amp;quot;a ≤ x&amp;quot;&lt;br /&gt;
    hence &amp;quot;ordenada (inserta a (x # xs)) = &lt;br /&gt;
           ordenada (a # x # xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = (menor a (x#xs) ∧ ordenada (x # xs))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = ordenada (x # xs)&amp;quot;  &lt;br /&gt;
      using `a ≤ x`  by (auto simp add: menor_menor)&lt;br /&gt;
    finally show &amp;quot;ordenada (inserta a (x # xs)) = ordenada (x # xs)&amp;quot; &lt;br /&gt;
      by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬(a ≤ x)&amp;quot;&lt;br /&gt;
    hence &amp;quot;ordenada (inserta a (x # xs)) = &lt;br /&gt;
           ordenada (x # inserta a xs)&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = (menor x (inserta a xs) ∧ ordenada (inserta a xs))&amp;quot; &lt;br /&gt;
      by simp&lt;br /&gt;
    also have &amp;quot;… = (menor x (inserta a xs) ∧ ordenada xs)&amp;quot; &lt;br /&gt;
      using HI by simp&lt;br /&gt;
    also have &amp;quot;… = (menor x xs ∧ ordenada xs)&amp;quot; &lt;br /&gt;
      using `¬(a ≤ x)` by (simp add: menor_inserta)&lt;br /&gt;
    also have &amp;quot;… = ordenada (x # xs)&amp;quot; by simp&lt;br /&gt;
    finally show &amp;quot;ordenada (inserta a (x # xs)) = ordenada (x # xs)&amp;quot; &lt;br /&gt;
      by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que, para toda lista xs, (ordena xs) está&lt;br /&gt;
  ordenada. &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
theorem ordenada_ordena:&lt;br /&gt;
  &amp;quot;ordenada (ordena xs)&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: ordenada_inserta)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
theorem ordenada_ordena_2:&lt;br /&gt;
  &amp;quot;ordenada (ordena xs)&amp;quot;&lt;br /&gt;
proof (induct xs) &lt;br /&gt;
  show &amp;quot;ordenada (ordena [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x xs&lt;br /&gt;
  assume &amp;quot;ordenada (ordena xs)&amp;quot; &lt;br /&gt;
  then have &amp;quot;ordenada (inserta x (ordena xs))&amp;quot; &lt;br /&gt;
    by (simp add: ordenada_inserta)  &lt;br /&gt;
  then show &amp;quot;ordenada (ordena (x # xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Nota. El teorema anterior no garantiza que ordena sea correcta, ya que&lt;br /&gt;
  puede que (ordena xs) no tenga los mismos elementos que xs. Por&lt;br /&gt;
  ejemplo, si se define (ordena xs) como [] se tiene que (ordena xs)&lt;br /&gt;
  está ordenada pero no es una ordenación de xs. &lt;br /&gt;
&lt;br /&gt;
  Para garantizarlo, definimos la función cuenta.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Definir la función&lt;br /&gt;
     cuenta :: int list ⇒ int ⇒ nat&lt;br /&gt;
  tal que (cuenta xs y) es el número de veces que aparece el elemento y&lt;br /&gt;
  en la lista xs. Por ejemplo, &lt;br /&gt;
     cuenta [1,3,4,3,5] 3 = 2&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun cuenta :: &amp;quot;int list ⇒ int ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;cuenta []     y = 0&amp;quot;&lt;br /&gt;
| &amp;quot;cuenta (x#xs) y = (if x=y then Suc(cuenta xs y) else cuenta xs y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;cuenta [1,3,4,3,5] 3&amp;quot; -- &amp;quot;= 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar que el número de veces que aparece y en &lt;br /&gt;
  (inserta x xs) es &lt;br /&gt;
  * uno más el número de veces que aparece en xs, si y = x; &lt;br /&gt;
  * el número de veces que aparece en xs, si y ≠ x; &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
lemma cuenta_inserta:&lt;br /&gt;
  &amp;quot;cuenta (inserta x xs) y =&lt;br /&gt;
   (if x=y then Suc (cuenta xs y) else cuenta xs y)&amp;quot;&lt;br /&gt;
by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar que el número de veces que aparece y en &lt;br /&gt;
  (ordena xs) es el número de veces que aparece en xs.&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración automática es&amp;quot;&lt;br /&gt;
theorem cuenta_ordena:&lt;br /&gt;
  &amp;quot;cuenta (ordena xs) y = cuenta xs y&amp;quot;&lt;br /&gt;
by (induct xs) (auto simp add: cuenta_inserta)&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;La demostración estructurada es&amp;quot;&lt;br /&gt;
theorem cuenta_ordena_2:&lt;br /&gt;
  &amp;quot;cuenta (ordena xs) y = cuenta xs y&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;cuenta (ordena []) y = cuenta [] y&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x xs&lt;br /&gt;
  assume HI: &amp;quot;cuenta (ordena xs) y = cuenta xs y&amp;quot;&lt;br /&gt;
  show &amp;quot;cuenta (ordena (x # xs)) y = cuenta (x # xs) y&amp;quot; &lt;br /&gt;
  proof (cases &amp;quot;x = y&amp;quot;)&lt;br /&gt;
    assume &amp;quot;x = y&amp;quot;&lt;br /&gt;
    have &amp;quot;cuenta (ordena (x # xs)) y = cuenta (inserta x (ordena xs)) y&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = Suc (cuenta (ordena xs) y)&amp;quot; using `x = y` by (simp add: cuenta_inserta) &lt;br /&gt;
    also have &amp;quot;… = Suc (cuenta xs y)&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;… = cuenta (x # xs) y&amp;quot; using `x = y` by simp&lt;br /&gt;
    finally show &amp;quot;cuenta (ordena (x # xs)) y = cuenta (x # xs) y&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;x ≠ y&amp;quot;&lt;br /&gt;
    have &amp;quot;cuenta (ordena (x # xs)) y = cuenta (inserta x (ordena xs)) y&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;… = cuenta (ordena xs) y&amp;quot; using `x ≠ y` by (simp add: cuenta_inserta) &lt;br /&gt;
    also have &amp;quot;… = cuenta xs y&amp;quot; using HI by simp&lt;br /&gt;
    also have &amp;quot;… = cuenta (x # xs) y&amp;quot; using `x ≠ y` by simp&lt;br /&gt;
    finally show &amp;quot;cuenta (ordena (x # xs)) y = cuenta (x # xs) y&amp;quot; by simp&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Temas&amp;diff=176</id>
		<title>Temas</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Temas&amp;diff=176"/>
		<updated>2014-11-27T12:01:26Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: /* Temas de Razonamiento automático (2014-15) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Temas de &amp;#039;&amp;#039;Razonamiento automático (2014-15)&amp;#039;&amp;#039; ==&lt;br /&gt;
* [[Tema 1: Programación funcional en Isabelle]].&lt;br /&gt;
* [http://www.cs.us.es/~jalonso/cursos/i1m/temas/tema-8t.pdf Tema 2a: Razonamiento sobre programas Haskell]&lt;br /&gt;
* [[Tema 2b: Razonamiento automático sobre programas en Isabelle/HOL]].&lt;br /&gt;
* [[Tema 3: Razonamiento estructurado sobre programas en Isabelle/HOL]].&lt;br /&gt;
* [[Tema 4: Razonamiento por casos y por inducción]].&lt;br /&gt;
* [[Tema 5a: Verificación de la ordenación por inserción]].&lt;br /&gt;
* [[Tema 5b: Verificación de la ordenación por mezcla]].&lt;br /&gt;
* Tema 6: Deducción natural proposicional con Isabelle/HOL.&lt;br /&gt;
* Tema 7: Deducción natural en lógica de primer orden con Isabelle/HOL.&lt;br /&gt;
* Tema 8: Caso de estudio: Compilación de expresiones.&lt;br /&gt;
* Tema 9: Panorama de la demostración asistida por ordenador.&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Temas&amp;diff=175</id>
		<title>Temas</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Temas&amp;diff=175"/>
		<updated>2014-11-27T11:59:49Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: /* Temas de Razonamiento automático (2014-15) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Temas de &amp;#039;&amp;#039;Razonamiento automático (2014-15)&amp;#039;&amp;#039; ==&lt;br /&gt;
* [[Tema 1: Programación funcional en Isabelle]].&lt;br /&gt;
* [http://www.cs.us.es/~jalonso/cursos/i1m/temas/tema-8t.pdf Tema 2a: Razonamiento sobre programas Haskell]&lt;br /&gt;
* [[Tema 2b: Razonamiento automático sobre programas en Isabelle/HOL]].&lt;br /&gt;
* [[Tema 3: Razonamiento estructurado sobre programas en Isabelle/HOL]].&lt;br /&gt;
* [[Tema 4: Razonamiento por casos y por inducción]].&lt;br /&gt;
* [[Tema 5: Verificación de algoritmos de ordenación]].&lt;br /&gt;
* Tema 6: Deducción natural proposicional con Isabelle/HOL.&lt;br /&gt;
* Tema 7: Deducción natural en lógica de primer orden con Isabelle/HOL.&lt;br /&gt;
* Tema 8: Caso de estudio: Compilación de expresiones.&lt;br /&gt;
* Tema 9: Panorama de la demostración asistida por ordenador.&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=Relaci%C3%B3n_6&amp;diff=160</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=Relaci%C3%B3n_6&amp;diff=160"/>
		<updated>2014-11-22T06:25:02Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt; header {* R6: Sustitución, inversión y eliminación *}  theory R6_Sustitucion_inversion_y_eliminacion imports Main  begin  text {*   Nota: En esta relaci...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6_Sustitucion_inversion_y_eliminacion&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota: En esta relación se pide hacer las demostraciones de forma &lt;br /&gt;
  automática. *} &lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::int) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y zs = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::int) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;= [2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar o refutar &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar o refutar &lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::int) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x ys = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borra (2::int) [1,2,3,2]&amp;quot; -- &amp;quot;= [1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::int) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x ys = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borraTodas (2::int) [1,2,3,2]&amp;quot; -- &amp;quot;= [1,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar o refutar &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar o refutar &lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_borra: &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar o refutar &lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar:&lt;br /&gt;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar &lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar o refutar &lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_append:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar o refutar &lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=R6&amp;diff=159</id>
		<title>R6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=R6&amp;diff=159"/>
		<updated>2014-11-22T06:24:46Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: Protegió «R6» ([edit=sysop] (indefinido) [move=sysop] (indefinido))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6_Sustitucion_inversion_y_eliminacion&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota: En esta relación se pide hacer las demostraciones de forma &lt;br /&gt;
  automática. *} &lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::int) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y zs = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::int) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;= [2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar o refutar &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar o refutar &lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::int) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x ys = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borra (2::int) [1,2,3,2]&amp;quot; -- &amp;quot;= [1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::int) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x ys = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borraTodas (2::int) [1,2,3,2]&amp;quot; -- &amp;quot;= [1,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar o refutar &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar o refutar &lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_borra: &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar o refutar &lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar:&lt;br /&gt;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar &lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar o refutar &lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_append:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar o refutar &lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2014/index.php?title=R6&amp;diff=158</id>
		<title>R6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2014/index.php?title=R6&amp;diff=158"/>
		<updated>2014-11-22T06:23:57Z</updated>

		<summary type="html">&lt;p&gt;Jalonso: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isar&amp;quot;&amp;gt;&lt;br /&gt;
header {* R6: Sustitución, inversión y eliminación *}&lt;br /&gt;
&lt;br /&gt;
theory R6_Sustitucion_inversion_y_eliminacion&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Nota: En esta relación se pide hacer las demostraciones de forma &lt;br /&gt;
  automática. *} &lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (sust x y zs) es la lista obtenida sustituyendo cada&lt;br /&gt;
  occurrencia de x por y en la lista zs. Por ejemplo,&lt;br /&gt;
     sust (1::int) 2 [1,2,3,4,1,2,3,4] = [2,2,3,4,2,2,3,4]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun sust :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;sust x y zs = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sust (1::int) 2 [1,2,3,4,1,2,3,4]&amp;quot; -- &amp;quot;= [2,2,3,4,2,2,3,4]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar o refutar &lt;br /&gt;
     sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
  ---------------------------------------------------------------------  &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma sust_append: &lt;br /&gt;
  &amp;quot;sust x y (xs@ys) = (sust x y xs)@(sust x y ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar o refutar &lt;br /&gt;
     rev (sust x y zs) = sust x y (rev zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma rev_sust: &lt;br /&gt;
  &amp;quot;rev(sust x y zs) = sust x y (rev zs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar o refutar:&lt;br /&gt;
     sust x y (sust u v zs) = sust u v (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sust x y (sust u v zs) = sust u v (sust x y zs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar o refutar:&lt;br /&gt;
     sust y z (sust x y zs) = sust x z zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sust y z (sust x y zs) = sust x z zs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borra x ys) es la lista obtenida borrando la primera&lt;br /&gt;
  ocurrencia del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borra (2::int) [1,2,3,2] = [1,3,2]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función borra es equivalente a la predefinida remove1. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun borra :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borra x ys = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borra (2::int) [1,2,3,2]&amp;quot; -- &amp;quot;= [1,3,2]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (borraTodas x ys) es la lista obtenida borrando todas las&lt;br /&gt;
  ocurrencias del elemento x en la lista ys. Por ejemplo,&lt;br /&gt;
     borraTodas (2::int) [1,2,3,2] = [1,3]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
fun borraTodas :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;borraTodas x ys = undefined&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;borraTodas (2::int) [1,2,3,2]&amp;quot; -- &amp;quot;= [1,3]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar o refutar &lt;br /&gt;
     borra x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borra x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar o refutar &lt;br /&gt;
     borraTodas x (borraTodas x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borraTodas x (borraTodas x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra x xs) = borraTodas x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_borra: &lt;br /&gt;
  &amp;quot;borraTodas x (borra x xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar o refutar &lt;br /&gt;
     borra x (borra y xs) = borra y (borra x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borra x (borra y xs) = borra y (borra x xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar automáticamente&lt;br /&gt;
     borraTodas x (borra y xs) = borra y (borraTodas x xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borraTodas x (borra y xs) = borra y (borraTodas x xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar:&lt;br /&gt;
     borra y (sust x y xs) = borra x xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borra y (sust x y xs) = borra x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar:&lt;br /&gt;
     borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;borraTodas y (sust x y xs) = borraTodas x xs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar &lt;br /&gt;
     sust x y (borraTodas x zs) = borraTodas x zs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sust x y (borraTodas x zs) = borraTodas x zs&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;sust x y (borraTodas z zs) = borraTodas z (sust x y zs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar:&lt;br /&gt;
     rev (borra x xs) = borra x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;rev (borra x xs) = borra x (rev xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar o refutar &lt;br /&gt;
     borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma borraTodas_append:&lt;br /&gt;
  &amp;quot;borraTodas x (xs@ys) = (borraTodas x xs)@(borraTodas x ys)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar o refutar &lt;br /&gt;
     rev (borraTodas x xs) = borraTodas x (rev xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;rev (borraTodas x xs) = borraTodas x (rev xs)&amp;quot;&lt;br /&gt;
oops&lt;br /&gt;
&lt;br /&gt;
end &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
</feed>