<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/SLC2018/index.php?action=history&amp;feed=atom&amp;title=Relaci%C3%B3n_2</id>
	<title>Relación 2 - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/SLC2018/index.php?action=history&amp;feed=atom&amp;title=Relaci%C3%B3n_2"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/SLC2018/index.php?title=Relaci%C3%B3n_2&amp;action=history"/>
	<updated>2026-07-20T03:17:09Z</updated>
	<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://www.glc.us.es/~jalonso/SLC2018/index.php?title=Relaci%C3%B3n_2&amp;diff=52&amp;oldid=prev</id>
		<title>Jalonso: Página creada con &#039;&lt;source lang=&quot;ocaml&quot;&gt; (* T2: Demostraciones por inducción en Coq *)  Require Export Basics Induction.  (* --------------------------------------------------------------------- ...&#039;</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/SLC2018/index.php?title=Relaci%C3%B3n_2&amp;diff=52&amp;oldid=prev"/>
		<updated>2018-03-05T18:21:54Z</updated>

		<summary type="html">&lt;p&gt;Página creada con &amp;#039;&amp;lt;source lang=&amp;quot;ocaml&amp;quot;&amp;gt; (* T2: Demostraciones por inducción en Coq *)  Require Export Basics Induction.  (* --------------------------------------------------------------------- ...&amp;#039;&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;ocaml&amp;quot;&amp;gt;&lt;br /&gt;
(* T2: Demostraciones por inducción en Coq *)&lt;br /&gt;
&lt;br /&gt;
Require Export Basics Induction.&lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 1.1. Demostrar que &lt;br /&gt;
      forall n:nat, n * 0 = 0.&lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Theorem mult_0_r : forall n:nat,&lt;br /&gt;
  n * 0 = 0.&lt;br /&gt;
Proof.&lt;br /&gt;
 intros n. induction n as [| n&amp;#039; IHn&amp;#039;].&lt;br /&gt;
  - reflexivity.&lt;br /&gt;
  - simpl. rewrite IHn&amp;#039;. reflexivity. Qed.&lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 1.2. Demostrar que &lt;br /&gt;
      forall n m : nat, S (n + m) = n + (S m).&lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Theorem plus_n_Sm : forall n m : nat,&lt;br /&gt;
  S (n + m) = n + (S m).&lt;br /&gt;
Proof.&lt;br /&gt;
 intros n m. induction n as [|n&amp;#039; IHn&amp;#039;].&lt;br /&gt;
  - simpl. reflexivity.&lt;br /&gt;
  - simpl. rewrite IHn&amp;#039;. reflexivity. Qed.&lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 1.3. Demostrar que &lt;br /&gt;
      forall n m : nat, n + m = m + n.&lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Theorem plus_comm : forall n m : nat,&lt;br /&gt;
  n + m = m + n.&lt;br /&gt;
Proof.&lt;br /&gt;
  intros  n m. induction n as [|n&amp;#039; IHn&amp;#039;].&lt;br /&gt;
  - simpl. rewrite &amp;lt;- plus_n_O. reflexivity.&lt;br /&gt;
  - simpl. rewrite IHn&amp;#039;. rewrite &amp;lt;- plus_n_Sm. reflexivity. Qed.&lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 1.4. Demostrar que &lt;br /&gt;
      forall n m p : nat, n + (m + p) = (n + m) + p.&lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Theorem plus_assoc : forall n m p : nat,&lt;br /&gt;
  n + (m + p) = (n + m) + p.&lt;br /&gt;
Proof.&lt;br /&gt;
 intros n m p. induction n as [|n&amp;#039; IHn&amp;#039;].&lt;br /&gt;
 -  reflexivity.&lt;br /&gt;
 -simpl. rewrite IHn&amp;#039;. reflexivity. Qed.&lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 2. Se considera la siguiente función que dobla su argumento. &lt;br /&gt;
      Fixpoint double (n:nat) :=&lt;br /&gt;
        match n with&lt;br /&gt;
        | O =&amp;gt; O&lt;br /&gt;
        | S n&amp;#039; =&amp;gt; S (S (double n&amp;#039;))&lt;br /&gt;
        end.&lt;br /&gt;
&lt;br /&gt;
   Demostrar que &lt;br /&gt;
      forall n, double n = n + n. &lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
Fixpoint double (n:nat) :=&lt;br /&gt;
  match n with&lt;br /&gt;
  | O =&amp;gt; O&lt;br /&gt;
  | S n&amp;#039; =&amp;gt; S (S (double n&amp;#039;))&lt;br /&gt;
  end.&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Lemma double_plus : forall n, double n = n + n .&lt;br /&gt;
Proof.&lt;br /&gt;
  intros n. induction n as [|n&amp;#039; IHn&amp;#039;].&lt;br /&gt;
  - reflexivity.&lt;br /&gt;
  - simpl. rewrite IHn&amp;#039;. rewrite plus_n_Sm. reflexivity. Qed. &lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 3. Demostrar que&lt;br /&gt;
       forall n : nat, evenb (S n) = negb (evenb n).&lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Theorem evenb_S : forall n : nat,&lt;br /&gt;
  evenb (S n) = negb (evenb n).&lt;br /&gt;
Proof.&lt;br /&gt;
  intros n. induction n as [|n&amp;#039; IHn&amp;#039;].&lt;br /&gt;
  - simpl. reflexivity.&lt;br /&gt;
  - rewrite IHn&amp;#039;. simpl. rewrite negb_involutive. reflexivity. Qed.&lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 7. Demostrar, usando assert pero no induct,&lt;br /&gt;
      forall n m p : nat, n + (m + p) = m + (n + p).&lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Theorem plus_swap : forall n m p : nat,&lt;br /&gt;
  n + (m + p) = m + (n + p).&lt;br /&gt;
Proof. &lt;br /&gt;
  intros n m p. rewrite plus_assoc. rewrite plus_assoc.&lt;br /&gt;
  assert (H : n + m = m+n). {rewrite plus_comm. reflexivity. } &lt;br /&gt;
  rewrite H. reflexivity.&lt;br /&gt;
Qed.&lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 8. Demostrar que la multiplicación es conmutativa.&lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Theorem one_id : forall n: nat,&lt;br /&gt;
    n = n*1.&lt;br /&gt;
Proof.&lt;br /&gt;
  intro n. induction n as [|n IHn&amp;#039;].&lt;br /&gt;
  -reflexivity.&lt;br /&gt;
  - simpl. rewrite &amp;lt;- IHn&amp;#039;. reflexivity.&lt;br /&gt;
Qed.&lt;br /&gt;
&lt;br /&gt;
Theorem one_S : forall n : nat,&lt;br /&gt;
    S n = n+1.&lt;br /&gt;
Proof.&lt;br /&gt;
  intro n. induction n as [|n&amp;#039; HIn&amp;#039;].&lt;br /&gt;
  - reflexivity.&lt;br /&gt;
  - simpl. rewrite &amp;lt;-HIn&amp;#039;. reflexivity.&lt;br /&gt;
Qed.&lt;br /&gt;
&lt;br /&gt;
Theorem mult_n_Sm : forall n m : nat, &lt;br /&gt;
    n * (m+1) = n*m+n.&lt;br /&gt;
Proof.&lt;br /&gt;
  intros n m. induction n as [|n&amp;#039; IHn&amp;#039;].&lt;br /&gt;
  - rewrite &amp;lt;- plus_n_O. rewrite &amp;lt;- one_S. reflexivity.&lt;br /&gt;
  - simpl. rewrite IHn&amp;#039;. rewrite plus_swap. rewrite &amp;lt;- plus_assoc.&lt;br /&gt;
    rewrite one_S. rewrite &amp;lt;- one_S. rewrite plus_swap.&lt;br /&gt;
    rewrite plus_assoc. reflexivity.&lt;br /&gt;
Qed.&lt;br /&gt;
&lt;br /&gt;
Theorem mult_comm : forall m n : nat,&lt;br /&gt;
  m * n = n * m.&lt;br /&gt;
Proof.&lt;br /&gt;
  intros n m. induction n as [|n&amp;#039; HIn&amp;#039;].&lt;br /&gt;
 -  rewrite mult_0_r. reflexivity.&lt;br /&gt;
 - simpl. rewrite HIn&amp;#039;. rewrite one_S. rewrite mult_n_Sm. rewrite plus_comm.&lt;br /&gt;
   reflexivity.&lt;br /&gt;
Qed.&lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 9.1. Demostrar que &lt;br /&gt;
      forall n:nat, true = leb n n.  &lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Theorem leb_refl : forall n:nat,&lt;br /&gt;
  true = leb n n.&lt;br /&gt;
Proof. intro n. induction n as [| n&amp;#039; HIn&amp;#039;].&lt;br /&gt;
  - reflexivity.&lt;br /&gt;
  - rewrite HIn&amp;#039;. simpl. reflexivity.&lt;br /&gt;
Qed.&lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 9.2. Demostrar que &lt;br /&gt;
      forall n:nat, beq_nat 0 (S n) = false. &lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Theorem zero_nbeq_S : forall n:nat,&lt;br /&gt;
  beq_nat 0 (S n) = false.&lt;br /&gt;
Proof.&lt;br /&gt;
 intros n. simpl. reflexivity. Qed.&lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 9.3. Demostrar que &lt;br /&gt;
      forall b : bool, andb b false = false.&lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Theorem andb_false_r : forall b : bool,&lt;br /&gt;
  andb b false = false.&lt;br /&gt;
Proof. intros b. destruct b.&lt;br /&gt;
  - simpl. reflexivity.&lt;br /&gt;
  - simpl. reflexivity. &lt;br /&gt;
Qed. &lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 9.4. Demostrar que &lt;br /&gt;
      forall n m p : nat, leb n m = true -&amp;gt; leb (p + n) (p + m) = true.&lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Theorem plus_ble_compat_l : forall n m p : nat,&lt;br /&gt;
  leb n m = true -&amp;gt; leb (p + n) (p + m) = true.&lt;br /&gt;
Proof.&lt;br /&gt;
  intros n m p H. rewrite &amp;lt;- H. induction p as [|p&amp;#039; HIn&amp;#039;].&lt;br /&gt;
  - simpl. reflexivity.&lt;br /&gt;
  - simpl. rewrite HIn&amp;#039;. reflexivity.&lt;br /&gt;
Qed.&lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 9.5. Demostrar que &lt;br /&gt;
      forall n:nat, beq_nat (S n) 0 = false.&lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Theorem S_nbeq_0 : forall n:nat,&lt;br /&gt;
  beq_nat (S n) 0 = false.&lt;br /&gt;
Proof.&lt;br /&gt;
  intro n. simpl. reflexivity.&lt;br /&gt;
Qed.&lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 9.6. Demostrar que &lt;br /&gt;
       forall n:nat, 1 * n = n.&lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Theorem mult_1_l : forall n:nat, 1 * n = n.&lt;br /&gt;
Proof.&lt;br /&gt;
  intro n. simpl. rewrite plus_n_O. reflexivity.&lt;br /&gt;
Qed.&lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 9.7. Demostrar que &lt;br /&gt;
       forall b c : bool, orb (andb b c)&lt;br /&gt;
                              (orb (negb b)&lt;br /&gt;
                                   (negb c))&lt;br /&gt;
                          = true.&lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Theorem all3_spec : forall b c : bool,&lt;br /&gt;
    orb&lt;br /&gt;
      (andb b c)&lt;br /&gt;
      (orb (negb b)&lt;br /&gt;
           (negb c))&lt;br /&gt;
    = true.&lt;br /&gt;
Proof.&lt;br /&gt;
  intros [] [].&lt;br /&gt;
  -  reflexivity.&lt;br /&gt;
  - reflexivity.&lt;br /&gt;
  - reflexivity.&lt;br /&gt;
  - reflexivity.&lt;br /&gt;
Qed.&lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 9.8. Demostrar que &lt;br /&gt;
      forall n m p : nat, (n + m) * p = (n * p) + (m * p).&lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Theorem mult_plus_distr_r : forall n m p : nat,&lt;br /&gt;
  (n + m) * p = (n * p) + (m * p).&lt;br /&gt;
Proof.&lt;br /&gt;
  intros n m p. induction p as [| p&amp;#039; HIp&amp;#039;].&lt;br /&gt;
  - rewrite -&amp;gt; mult_0_r. rewrite mult_0_r. rewrite mult_0_r. reflexivity.&lt;br /&gt;
  - rewrite one_S. rewrite mult_comm.&lt;br /&gt;
    rewrite mult_n_Sm. rewrite mult_n_Sm.&lt;br /&gt;
    rewrite plus_assoc. rewrite mult_comm.&lt;br /&gt;
    rewrite mult_n_Sm. rewrite HIp&amp;#039;.&lt;br /&gt;
    rewrite plus_swap. rewrite plus_assoc.&lt;br /&gt;
    rewrite plus_assoc. rewrite &amp;lt;- plus_assoc.&lt;br /&gt;
    rewrite plus_rearrange. rewrite plus_assoc. reflexivity.&lt;br /&gt;
Qed.&lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 9.9. Demostrar que &lt;br /&gt;
      forall n m p : nat, n * (m * p) = (n * m) * p.&lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Theorem mult_assoc : forall n m p : nat,&lt;br /&gt;
  n * (m * p) = (n * m) * p.&lt;br /&gt;
Proof.&lt;br /&gt;
  intros n m p. induction n as [|n&amp;#039; HIn&amp;#039;].&lt;br /&gt;
  - simpl. reflexivity.&lt;br /&gt;
  - simpl. rewrite HIn&amp;#039;. rewrite mult_plus_distr_r. reflexivity.&lt;br /&gt;
Qed.&lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 10. Demostrar que&lt;br /&gt;
       forall n : nat, true = beq_nat n n.&lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Theorem beq_nat_refl : forall n : nat,&lt;br /&gt;
  true = beq_nat n n.&lt;br /&gt;
Proof.&lt;br /&gt;
  intro n. induction n as [| n&amp;#039; HIn&amp;#039;].&lt;br /&gt;
  - simpl. reflexivity.&lt;br /&gt;
  - simpl. rewrite HIn&amp;#039;. reflexivity.&lt;br /&gt;
Qed.&lt;br /&gt;
&lt;br /&gt;
(* ---------------------------------------------------------------------&lt;br /&gt;
   Ejercicio 11. La táctica replace permite especificar el subtérmino&lt;br /&gt;
   que se desea reescribir y su sustituto: [replace (t) with (u)]&lt;br /&gt;
   sustituye todas las copias de la expresión t en el objetivo por la&lt;br /&gt;
   expresión u y añade la ecuación (t = u) como un nuevo subojetivo. &lt;br /&gt;
 &lt;br /&gt;
   El uso de la táctica replace es especialmente útil cuando la táctica &lt;br /&gt;
   rewrite actúa sobre una parte del objetivo que no es la que se desea. &lt;br /&gt;
&lt;br /&gt;
   Demostrar, usando la táctica replace y sin usar &lt;br /&gt;
   [assert (n + m = m + n)], que&lt;br /&gt;
      forall n m p : nat, n + (m + p) = m + (n + p).&lt;br /&gt;
   ------------------------------------------------------------------ *)&lt;br /&gt;
&lt;br /&gt;
(* alerodrod5 *)&lt;br /&gt;
Theorem plus_swap&amp;#039; : forall n m p : nat,&lt;br /&gt;
  n + (m + p) = m + (n + p).&lt;br /&gt;
Proof.&lt;br /&gt;
  intros n m p. rewrite plus_assoc. rewrite plus_assoc.&lt;br /&gt;
  replace (n+m) with (m+n). &lt;br /&gt;
  - reflexivity.&lt;br /&gt;
  - rewrite plus_comm. reflexivity.&lt;br /&gt;
Qed. &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jalonso</name></author>
		
	</entry>
</feed>