Unión con la imagen
Demostrar que
1 |
f[s ∪ f⁻¹[v]] ⊆ f[s] ∪ v |
Para ello, completar la siguiente teoría de Lean:
1 2 3 4 5 6 7 8 9 10 11 12 |
import data.set.basic import tactic open set variables {α : Type*} {β : Type*} variable f : α → β variable s : set α variable v : set β example : f '' (s ∪ f ⁻¹' v) ⊆ f '' s ∪ v := 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 |
import data.set.basic import tactic open set variables {α : Type*} {β : Type*} variable f : α → β variable s : set α variable v : set β -- 1ª demostración -- =============== example : f '' (s ∪ f ⁻¹' v) ⊆ f '' s ∪ v := begin intros y hy, cases hy with x hx, cases hx with hx1 fxy, cases hx1 with xs xv, { left, use x, split, { exact xs, }, { exact fxy, }}, { right, rw ← fxy, exact xv, }, end -- 2ª demostración -- =============== example : f '' (s ∪ f ⁻¹' v) ⊆ f '' s ∪ v := begin rintros y ⟨x, xs | xv, fxy⟩, { left, use [x, xs, fxy], }, { right, rw ← fxy, exact xv, }, end -- 3ª demostración -- =============== example : f '' (s ∪ f ⁻¹' v) ⊆ f '' s ∪ v := begin rintros y ⟨x, xs | xv, fxy⟩; finish, end |
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="isar"> 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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
theory Union_con_la_imagen imports Main begin (* 1ª demostración *) lemma "f ` (s ∪ f -` v) ⊆ f ` s ∪ v" proof (rule subsetI) fix y assume "y ∈ f ` (s ∪ f -` v)" then show "y ∈ f ` s ∪ v" proof (rule imageE) fix x assume "y = f x" assume "x ∈ s ∪ f -` v" then show "y ∈ f ` s ∪ v" proof (rule UnE) assume "x ∈ s" then have "f x ∈ f ` s" by (rule imageI) with ‹y = f x› have "y ∈ f ` s" by (rule ssubst) then show "y ∈ f ` s ∪ v" by (rule UnI1) next assume "x ∈ f -` v" then have "f x ∈ v" by (rule vimageD) with ‹y = f x› have "y ∈ v" by (rule ssubst) then show "y ∈ f ` s ∪ v" by (rule UnI2) qed qed qed (* 2ª demostración *) lemma "f ` (s ∪ f -` v) ⊆ f ` s ∪ v" proof fix y assume "y ∈ f ` (s ∪ f -` v)" then show "y ∈ f ` s ∪ v" proof fix x assume "y = f x" assume "x ∈ s ∪ f -` v" then show "y ∈ f ` s ∪ v" proof assume "x ∈ s" then have "f x ∈ f ` s" by simp with ‹y = f x› have "y ∈ f ` s" by simp then show "y ∈ f ` s ∪ v" by simp next assume "x ∈ f -` v" then have "f x ∈ v" by simp with ‹y = f x› have "y ∈ v" by simp then show "y ∈ f ` s ∪ v" by simp qed qed qed (* 3ª demostración *) lemma "f ` (s ∪ f -` v) ⊆ f ` s ∪ v" proof fix y assume "y ∈ f ` (s ∪ f -` v)" then show "y ∈ f ` s ∪ v" proof fix x assume "y = f x" assume "x ∈ s ∪ f -` v" then show "y ∈ f ` s ∪ v" proof assume "x ∈ s" then show "y ∈ f ` s ∪ v" by (simp add: ‹y = f x›) next assume "x ∈ f -` v" then show "y ∈ f ` s ∪ v" by (simp add: ‹y = f x›) qed qed qed (* 4ª demostración *) lemma "f ` (s ∪ f -` v) ⊆ f ` s ∪ v" proof fix y assume "y ∈ f ` (s ∪ f -` v)" then show "y ∈ f ` s ∪ v" proof fix x assume "y = f x" assume "x ∈ s ∪ f -` v" then show "y ∈ f ` s ∪ v" using ‹y = f x› by blast qed qed (* 5ª demostración *) lemma "f ` (s ∪ f -` u) ⊆ f ` s ∪ u" by auto 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]