Las clases de equivalencia de elementos relacionados son iguales
Demostrar que las clases de equivalencia de elementos relacionados son iguales.
Para ello, completar la siguiente teoría de Lean:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14  | 
						import tactic variable  {X : Type} variables {x y: X} variable  {R : X → X → Prop} def clase (R : X → X → Prop) (x : X) :=   {y : X | R x y} example   (h : equivalence R)   (hxy : R x y)   : clase R x = clase R y := sorry  | 
					
[expand title=»Soluciones con Lean»]
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75  | 
						import tactic variable  {X : Type} variables {x y: X} variable  {R : X → X → Prop} def clase (R : X → X → Prop) (x : X) :=   {y : X | R x y} -- En la demostración se usará el siguiente lema del que se presentan -- varias demostraciones. -- 1ª demostración del lema auxiliar example   (h : equivalence R)   (hxy : R x y)   : clase R y ⊆ clase R x := begin   intros z hz,   have hyz : R y z := hz,   have htrans : transitive R := h.2.2,   have hxz : R x z := htrans hxy hyz,   exact hxz, end -- 2ª demostración del lema auxiliar example   (h : equivalence R)   (hxy : R x y)   : clase R y ⊆ clase R x := begin   intros z hz,   exact h.2.2 hxy hz, end -- 3ª demostración del lema auxiliar lemma aux   (h : equivalence R)   (hxy : R x y)   : clase R y ⊆ clase R x := λ z hz, h.2.2 hxy hz -- A continuación se presentan varias demostraciones del ejercicio -- usando el lema auxiliar -- 1ª demostración example   (h : equivalence R)   (hxy : R x y)   : clase R x = clase R y := begin   apply le_antisymm,   { have hs : symmetric R := h.2.1,     have hyx : R y x := hs hxy,     exact aux h hyx, },   { exact aux h hxy, }, end -- 2ª demostración example   (h : equivalence R)   (hxy : R x y)   : clase R x = clase R y := begin   apply le_antisymm,   { exact aux h (h.2.1 hxy), },   { exact aux h hxy, }, end -- 3ª demostración example   (h : equivalence R)   (hxy : R x y)   : clase R x = clase R y := le_antisymm (aux h (h.2.1 hxy)) (aux h hxy)  | 
					
Se puede interactuar con la prueba anterior en esta sesión con Lean.
En los comentarios se pueden escribir otras soluciones, escribiendo el código entre una línea con <pre lang="lean"> y otra con </pre>
[/expand]
[expand title=»Soluciones con Isabelle/HOL»]
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67  | 
						theory Las_clases_de_equivalencia_de_elementos_relacionados_son_iguales imports Main begin definition clase :: "('a ⇒ 'a ⇒ bool) ⇒ 'a ⇒ 'a set"   where "clase R x = {y. R x y}" (* En la demostración se usará el siguiente lema del que se presentan    varias demostraciones. *) (* 1ª demostración del lema auxiliar *) lemma   assumes "equivp R"           "R x y"   shows "clase R y ⊆ clase R x" proof (rule subsetI)   fix z   assume "z ∈ clase R y"   then have "R y z"     by (simp add: clase_def)   have "transp R"     using assms(1) by (rule equivp_imp_transp)   then have "R x z"     using ‹R x y› ‹R y z› by (rule transpD)   then show "z ∈ clase R x"     by (simp add: clase_def) qed (* 2ª demostración del lema auxiliar *) lemma aux :   assumes "equivp R"           "R x y"   shows "clase R y ⊆ clase R x"   using assms   by (metis clase_def eq_refl equivp_def) (* A continuación se presentan demostraciones del ejercicio *) (* 1ª demostración *) lemma   assumes "equivp R"           "R x y"   shows "clase R y = clase R x" proof (rule equalityI)   show "clase R y ⊆ clase R x"     using assms by (rule aux) next   show "clase R x ⊆ clase R y"   proof -     have "symp R"       using assms(1) equivpE by blast     have "R y x"       using ‹R x y› by (simp add: ‹symp R› sympD)     with assms(1) show "clase R x ⊆ clase R y"        by (rule aux)   qed qed (* 2ª demostración *) lemma   assumes "equivp R"           "R x y"   shows "clase R y = clase R x"   using assms   by (metis clase_def equivp_def) end  | 
					
En los comentarios se pueden escribir otras soluciones, escribiendo el código entre una línea con <pre lang="isar"> y otra con </pre>
[/expand]