<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/LMF2020/index.php?action=history&amp;feed=atom&amp;title=T4_sol</id>
	<title>T4 sol - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/LMF2020/index.php?action=history&amp;feed=atom&amp;title=T4_sol"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2020/index.php?title=T4_sol&amp;action=history"/>
	<updated>2026-07-18T23:50:35Z</updated>
	<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2020/index.php?title=T4_sol&amp;diff=1253&amp;oldid=prev</id>
		<title>Mjoseh: Protegió «T4 sol» ([Editar=Solo administradores] (indefinido) [Trasladar=Solo administradores] (indefinido))</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2020/index.php?title=T4_sol&amp;diff=1253&amp;oldid=prev"/>
		<updated>2020-06-01T10:33:40Z</updated>

		<summary type="html">&lt;p&gt;Protegió «&lt;a href=&quot;/~jalonso/LMF2020/index.php/T4_sol&quot; title=&quot;T4 sol&quot;&gt;T4 sol&lt;/a&gt;» ([Editar=Solo administradores] (indefinido) [Trasladar=Solo administradores] (indefinido))&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;es&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Revisión anterior&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revisión del 10:33 1 jun 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;es&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Sin diferencias)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Mjoseh</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2020/index.php?title=T4_sol&amp;diff=1250&amp;oldid=prev</id>
		<title>Mjoseh: Página creada con «&lt;source lang = &quot;isabelle&quot;&gt; theory T4_sol imports Main  begin  lemma notnotI: &quot;P ⟹ ¬¬ P&quot;   by auto  lemma mt: &quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&quot;   by auto  text ‹-----------…»</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2020/index.php?title=T4_sol&amp;diff=1250&amp;oldid=prev"/>
		<updated>2020-06-01T10:29:44Z</updated>

		<summary type="html">&lt;p&gt;Página creada con «&amp;lt;source lang = &amp;quot;isabelle&amp;quot;&amp;gt; theory T4_sol imports Main  begin  lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;   by auto  lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;   by auto  text ‹-----------…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;source lang = &amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
theory T4_sol&lt;br /&gt;
imports Main &lt;br /&gt;
begin&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;
text ‹-----------------------------------------------------------------&lt;br /&gt;
  Se define la función&lt;br /&gt;
     elimina :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (elimina n xs) es la lista obtenida eliminando los n primeros&lt;br /&gt;
  elementos de xs. Por ejemplo, &lt;br /&gt;
     elimina 2 [a,c,d,b,e] = [d,b,e]&lt;br /&gt;
  ---------------------------------------------------------------------›&lt;br /&gt;
&lt;br /&gt;
fun elimina :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina n []           = []&amp;quot;&lt;br /&gt;
| &amp;quot;elimina 0 xs           = xs&amp;quot;&lt;br /&gt;
| &amp;quot;elimina (Suc n) (x#xs) = elimina n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text ‹------------------------------------------------------------------&lt;br /&gt;
  Ejercicio. Demostrar que &lt;br /&gt;
     length (elimina n xs) ≤ length xs - n&lt;br /&gt;
  ---------------------------------------------------------------------›&lt;br /&gt;
&lt;br /&gt;
― ‹Por inducción en n y xs según el esquema elimina.induct›&lt;br /&gt;
&lt;br /&gt;
― ‹Estructurada›&lt;br /&gt;
lemma  &amp;quot;length (elimina n xs) ≤ length xs&amp;quot;&lt;br /&gt;
proof(induct n xs rule :elimina.induct)&lt;br /&gt;
  show &amp;quot;⋀n. length (elimina n []) ≤ length []&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
  show &amp;quot;⋀v va. length (elimina 0 (v # va)) ≤ length (v # va)&amp;quot;&lt;br /&gt;
  by simp&lt;br /&gt;
  next&lt;br /&gt;
  show &amp;quot;⋀n x xs.&lt;br /&gt;
       length (elimina n xs) ≤ length xs ⟹&lt;br /&gt;
       length (elimina (Suc n) (x # xs)) ≤ length (x # xs)&amp;quot;&lt;br /&gt;
       by simp&lt;br /&gt;
 qed&lt;br /&gt;
&lt;br /&gt;
― ‹Automática›&lt;br /&gt;
lemma  &amp;quot;length (elimina n xs) ≤ length xs&amp;quot;&lt;br /&gt;
  by (induct n xs rule :elimina.induct) simp_all&lt;br /&gt;
&lt;br /&gt;
― ‹Declarativa detallada›&lt;br /&gt;
&lt;br /&gt;
lemma  &amp;quot;length (elimina n xs) ≤ length xs&amp;quot;&lt;br /&gt;
proof(induct n xs rule :elimina.induct)&lt;br /&gt;
  fix n ::&amp;quot;nat&amp;quot;&lt;br /&gt;
  show &amp;quot;length (elimina n []) ≤ length []&amp;quot; &lt;br /&gt;
    by (simp only: elimina.simps(1) list.size(3))&lt;br /&gt;
next&lt;br /&gt;
  fix x::&amp;quot;&amp;#039;a&amp;quot; and xs::&amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  show &amp;quot;length (elimina 0 (x # xs)) ≤ length (x #xs)&amp;quot;&lt;br /&gt;
    by (simp only: elimina.simps(2) list.size(2))&lt;br /&gt;
next&lt;br /&gt;
  fix n ::&amp;quot;nat&amp;quot; and x::&amp;quot;&amp;#039;a&amp;quot; and xs::&amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  assume H:&amp;quot;length (elimina n xs) ≤ length xs&amp;quot;&lt;br /&gt;
  have &amp;quot;length(elimina (Suc n) (x#xs)) = length(elimina n xs)&amp;quot;&lt;br /&gt;
    by (simp only: elimina.simps(3))&lt;br /&gt;
  also have &amp;quot;… ≤ length xs&amp;quot;&lt;br /&gt;
    using H by (simp only:)&lt;br /&gt;
  also have &amp;quot;… ≤ length (x#xs)&amp;quot;&lt;br /&gt;
    by (simp only: list.size(4))&lt;br /&gt;
  finally show &amp;quot;length(elimina (Suc n) (x#xs)) ≤ length (x#xs)&amp;quot;.&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
― ‹Aplicativa detallada›&lt;br /&gt;
&lt;br /&gt;
lemma  &amp;quot;length (elimina n xs) ≤ length xs&amp;quot;&lt;br /&gt;
  apply (induct n xs rule :elimina.induct)&lt;br /&gt;
  apply (simp only: elimina.simps(1))&lt;br /&gt;
  apply (simp only: elimina.simps(2))&lt;br /&gt;
  apply (simp only: elimina.simps(3))&lt;br /&gt;
  apply (simp only: list.size)&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
― ‹Por inducción en n con xs arbitrario›  &lt;br /&gt;
&lt;br /&gt;
― ‹Auxiliar›&lt;br /&gt;
lemma elimina0: &amp;quot;elimina 0 xs = xs&amp;quot;&lt;br /&gt;
  apply (cases xs) &lt;br /&gt;
  apply (simp only: elimina.simps(1))&lt;br /&gt;
  apply (simp only: elimina.simps(2))&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
― ‹Estructurada›  &lt;br /&gt;
lemma &amp;quot;length (elimina n xs) ≤ length xs - n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: xs)&lt;br /&gt;
   show &amp;quot;⋀xs. length (elimina 0 xs) ≤ length xs - 0&amp;quot; &lt;br /&gt;
   by (simp only: elimina0)&lt;br /&gt;
   next &lt;br /&gt;
    fix n :: nat and xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  assume HI: &amp;quot;⋀xs:: &amp;#039;a list. length (elimina n xs) ≤ length xs - n&amp;quot; &lt;br /&gt;
  show &amp;quot;length (elimina (Suc n) xs) ≤ length xs - (Suc n)&amp;quot;&lt;br /&gt;
  proof (cases xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  then show ?thesis by simp&lt;br /&gt;
  next&lt;br /&gt;
  case (Cons a list)&lt;br /&gt;
  then show ?thesis using HI by simp&lt;br /&gt;
  qed&lt;br /&gt;
 qed &lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
― ‹Declarativa detallada›&lt;br /&gt;
lemma &amp;quot;length (elimina n xs) ≤ length xs - n&amp;quot;&lt;br /&gt;
proof (induct n arbitrary: xs)&lt;br /&gt;
  fix xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  show &amp;quot;length (elimina 0 xs) ≤ length xs - 0&amp;quot; &lt;br /&gt;
    by (simp only: elimina0 list.size(3))&lt;br /&gt;
next&lt;br /&gt;
  fix n :: nat and xs :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  assume HI: &amp;quot;⋀xs:: &amp;#039;a list. length (elimina n xs) ≤ length xs - n&amp;quot; &lt;br /&gt;
  show &amp;quot;length (elimina (Suc n) xs) ≤ length xs - (Suc n)&amp;quot;&lt;br /&gt;
  proof (cases xs)&lt;br /&gt;
    assume &amp;quot;xs = []&amp;quot; &lt;br /&gt;
    then have &amp;quot;elimina (Suc n) xs = elimina (Suc n) []&amp;quot;&lt;br /&gt;
      by (rule arg_cong)&lt;br /&gt;
    also have &amp;quot;… = []&amp;quot; &lt;br /&gt;
      by (simp only: elimina.simps(1))&lt;br /&gt;
    finally have &amp;quot;elimina (Suc n) xs = []&amp;quot; &lt;br /&gt;
      by this&lt;br /&gt;
    then have &amp;quot;length (elimina (Suc n) xs) = 0&amp;quot; &lt;br /&gt;
      by (simp only: list.size(3)) &lt;br /&gt;
    then show &amp;quot;length (elimina (Suc n) xs) ≤ length xs - (Suc n)&amp;quot; &lt;br /&gt;
      by (simp only: list.size(3))&lt;br /&gt;
  next&lt;br /&gt;
    fix y:: &amp;quot;&amp;#039;a&amp;quot; and  ys :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
    assume 1: &amp;quot;xs = y # ys&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;length (elimina n ys) ≤ length ys - n&amp;quot;&lt;br /&gt;
      using HI by this&lt;br /&gt;
    have &amp;quot;length (elimina (Suc n) xs) = length (elimina (Suc n) (y#ys))&amp;quot; &lt;br /&gt;
      using 1 by (rule arg_cong)&lt;br /&gt;
    also have &amp;quot;… = length (elimina n ys)&amp;quot; &lt;br /&gt;
      by (simp only: elimina.simps(3))&lt;br /&gt;
    also have &amp;quot;… ≤  length ys - n&amp;quot; &lt;br /&gt;
      using 2 by (simp only:)&lt;br /&gt;
    also have &amp;quot;… = 1 + length ys - (Suc n)&amp;quot; &lt;br /&gt;
      by (simp only: diff_Suc_Suc)&lt;br /&gt;
    also have &amp;quot;… = length (y#ys) - (Suc n)&amp;quot; &lt;br /&gt;
      by (simp only: list.size(4))&lt;br /&gt;
    also have &amp;quot;… = length xs - (Suc n)&amp;quot; &lt;br /&gt;
      using 1 by (simp only: list.size(4))&lt;br /&gt;
    finally show &amp;quot;length (elimina (Suc n) xs) ≤ length xs - (Suc n)&amp;quot; &lt;br /&gt;
      by this    &lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
― ‹Aplicativa detallada›&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;length (elimina n xs) ≤ length xs - n&amp;quot;&lt;br /&gt;
  apply (induct n arbitrary: xs)&lt;br /&gt;
   apply (simp only: elimina0)&lt;br /&gt;
  apply (case_tac xs)&lt;br /&gt;
   apply (simp only: elimina.simps)&lt;br /&gt;
   apply (simp only: list.size(3))&lt;br /&gt;
  apply (simp only: elimina.simps(3))&lt;br /&gt;
  apply (simp only: list.size(4))&lt;br /&gt;
  apply (simp only: add_Suc_right)&lt;br /&gt;
  apply (simp only: add.right_neutral)&lt;br /&gt;
  apply (simp only: diff_Suc_Suc)&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
― ‹Demostración por inducción en xs con n arbitrario›&lt;br /&gt;
&lt;br /&gt;
― ‹Estructurada›&lt;br /&gt;
&lt;br /&gt;
lemma  &amp;quot;length (elimina n xs) ≤ length xs&amp;quot;&lt;br /&gt;
proof (induct xs arbitrary: n)&lt;br /&gt;
  show &amp;quot;⋀n. length (elimina n []) ≤ length []&amp;quot; by simp&lt;br /&gt;
  next&lt;br /&gt;
  fix n::&amp;quot;nat&amp;quot; and x::&amp;#039;a and xs:: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  assume HI: &amp;quot;  ⋀n. length (elimina n xs) ≤ length xs&amp;quot;&lt;br /&gt;
  show &amp;quot;length (elimina n (x# xs)) ≤ length (x#xs)&amp;quot;&lt;br /&gt;
  proof(cases n)&lt;br /&gt;
  case 0&lt;br /&gt;
  then show ?thesis by simp&lt;br /&gt;
  next&lt;br /&gt;
  case (Suc nat)&lt;br /&gt;
  then show ?thesis using HI&lt;br /&gt;
  by (metis elimina.simps(3) list.size(4) trans_le_add1)&lt;br /&gt;
  qed&lt;br /&gt;
  qed&lt;br /&gt;
&lt;br /&gt;
― ‹Declarativa detallada›&lt;br /&gt;
&lt;br /&gt;
lemma  &amp;quot;length (elimina n xs) ≤ length xs&amp;quot;&lt;br /&gt;
proof (induct xs arbitrary: n)&lt;br /&gt;
  fix n::&amp;quot;nat&amp;quot;&lt;br /&gt;
  show &amp;quot;length (elimina n []) ≤ length []&amp;quot; &lt;br /&gt;
     by (simp only: elimina.simps(1) list.size)&lt;br /&gt;
next&lt;br /&gt;
  fix n::&amp;quot;nat&amp;quot; and x::&amp;#039;a and xs:: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  assume HI: &amp;quot;  ⋀n. length (elimina n xs) ≤ length xs&amp;quot;&lt;br /&gt;
  show &amp;quot;length (elimina n (x# xs)) ≤ length (x#xs)&amp;quot;&lt;br /&gt;
  proof(cases n)&lt;br /&gt;
    assume &amp;quot;n=0&amp;quot;&lt;br /&gt;
    then have &amp;quot;(elimina n (x# xs)) =(x#xs)&amp;quot; &lt;br /&gt;
      by (simp only: elimina.simps(2))&lt;br /&gt;
      then have &amp;quot;length (elimina n (x# xs)) = length (x#xs)&amp;quot;  &lt;br /&gt;
        by (rule arg_cong)&lt;br /&gt;
        then show  &amp;quot;length (elimina n (x# xs)) ≤ length (x#xs)&amp;quot; &lt;br /&gt;
          by (simp only: order_refl)&lt;br /&gt;
  next&lt;br /&gt;
    fix m:: nat&lt;br /&gt;
    assume &amp;quot;n=(Suc m)&amp;quot;&lt;br /&gt;
    then have &amp;quot;length (elimina n (x# xs)) = &lt;br /&gt;
               length (elimina (Suc m) (x# xs))&amp;quot; &lt;br /&gt;
                by (rule arg_cong)&lt;br /&gt;
    also have &amp;quot;… =length (elimina m xs)&amp;quot; &lt;br /&gt;
                by (simp only: elimina.simps(3))&lt;br /&gt;
    also have &amp;quot;… ≤ length xs&amp;quot; using HI by (simp only:)&lt;br /&gt;
    also have &amp;quot;… ≤ 1+length xs &amp;quot; by (simp only: le_add1)&lt;br /&gt;
    also have &amp;quot;…≤ length (x#xs)&amp;quot; by (simp only: list.size)&lt;br /&gt;
    finally show &amp;quot;length (elimina n (x# xs))≤length (x#xs)&amp;quot; &lt;br /&gt;
      by (simp only:)&lt;br /&gt;
  qed&lt;br /&gt;
  qed  &lt;br /&gt;
 &lt;br /&gt;
― ‹Aplicativa detallada›&lt;br /&gt;
&lt;br /&gt;
lemma &amp;quot;length (elimina n xs) ≤ length xs - n&amp;quot;&lt;br /&gt;
  apply (induct xs arbitrary: n)&lt;br /&gt;
  apply (simp only: elimina.simps(1) list.size)&lt;br /&gt;
  apply (case_tac n)&lt;br /&gt;
  apply (simp only: elimina.simps(2) list.size)&lt;br /&gt;
  apply (simp only: elimina.simps(3) list.size)&lt;br /&gt;
  apply (simp only:add_Suc_right)&lt;br /&gt;
  apply (simp only:add.right_neutral)&lt;br /&gt;
  apply (simp only: diff_Suc_Suc)&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
text ‹------------------------------------------------------------------ &lt;br /&gt;
  Ejercicio 2. Demostrar que si se verifica &lt;br /&gt;
     ∀x. (P x ⟶ (∃y. Q y))&lt;br /&gt;
  entonces se verifica &lt;br /&gt;
     ∀x. ∃y. (P x ⟶ Q y)&lt;br /&gt;
&lt;br /&gt;
  Nota: Hacer la demostración de forma detallada. Es opcional hacerla &lt;br /&gt;
  de forma declarativa o aplicativa.&lt;br /&gt;
  --------------------------------------------------------------------›&lt;br /&gt;
&lt;br /&gt;
― ‹Demostración declarativa detallada›&lt;br /&gt;
  &lt;br /&gt;
lemma &lt;br /&gt;
    fixes P Q :: &amp;quot;&amp;#039;b ⇒ bool&amp;quot; &lt;br /&gt;
    assumes &amp;quot;∀x. ∃y. (P x ⟶ Q y)&amp;quot;&lt;br /&gt;
    shows   &amp;quot;∀x. (P x ⟶ (∃y. Q y))&amp;quot;&lt;br /&gt;
proof (rule allI)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;P x ⟶ (∃y. Q y)&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume &amp;quot;P x&amp;quot;&lt;br /&gt;
    have &amp;quot; ∃y. (P x ⟶ Q y)&amp;quot; &lt;br /&gt;
      using assms by (rule allE)&lt;br /&gt;
    then obtain b where &amp;quot;P x ⟶ Q b&amp;quot; &lt;br /&gt;
      by (rule exE)&lt;br /&gt;
    then have &amp;quot;Q b&amp;quot; &lt;br /&gt;
      using ‹P x› by (rule mp)&lt;br /&gt;
    then show &amp;quot;∃y. Q y&amp;quot; &lt;br /&gt;
      by (rule exI) &lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
― ‹Demostración aplicativa detallada›&lt;br /&gt;
&lt;br /&gt;
lemma &lt;br /&gt;
 &amp;quot;∀x. (P x ⟶ (∃y. Q y)) ⟹ ∀x. ∃y. (P x ⟶ Q y)&amp;quot;&lt;br /&gt;
  apply(rule allI)&lt;br /&gt;
  apply(erule_tac x = x in allE)&lt;br /&gt;
  apply(case_tac &amp;quot;P x&amp;quot;)&lt;br /&gt;
  apply(drule mp, assumption)&lt;br /&gt;
  apply(erule exE)&lt;br /&gt;
  apply (rule_tac x = y in exI)&lt;br /&gt;
  apply(rule impI, assumption)&lt;br /&gt;
  apply (rule exI)&lt;br /&gt;
  apply(rule impI)&lt;br /&gt;
  apply(erule notE, assumption)&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mjoseh</name></author>
		
	</entry>
</feed>