{"id":7797,"date":"2022-09-18T07:39:05","date_gmt":"2022-09-18T05:39:05","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=7797"},"modified":"2022-09-18T07:39:05","modified_gmt":"2022-09-18T05:39:05","slug":"dao-la-semana-en-calculemus-16-de-septiembre-de-2022","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/dao-la-semana-en-calculemus-16-de-septiembre-de-2022\/","title":{"rendered":"DAO: La semana en Calculemus (16 de septiembre de 2022)"},"content":{"rendered":"<p>Esta semana he publicado en <a href=\"https:\/\/www.glc.us.es\/~jalonso\/calculemus\/\">Calculemus<\/a> las demostraciones con Lean de las siguientes propiedades:<\/p>\n<ul>\n<li><a href=\"#ej1\">1. Si R es un anillo y a, b \u2208 R, entonces a &#8211; b = a + -b<\/a><\/li>\n<li><a href=\"#ej2\">2. Si R es un anillo y a \u2208 R, entonces 2 * a = a + a<\/a><\/li>\n<li><a href=\"#ej3\">3. Si G es un grupo y a \u2208 G, entonces a * a\u207b\u00b9 = 1<\/a><\/li>\n<li><a href=\"#ej4\">4. Si G es un grupo y a \u2208 G, entonces a * 1 = a<\/a><\/li>\n<li><a href=\"#ej5\">5. Si G es un grupo y a, b \u2208 G tales que b * a = 1, entonces a\u207b\u00b9 = b<\/a><\/li>\n<\/ul>\n<p>A continuaci\u00f3n se muestran las soluciones.<br \/>\n<!--more--><br \/>\n<a name=\"ej1\"><\/a><\/p>\n<h3>1. Si R es un anillo y a, b \u2208 R, entonces a &#8211; b = a + -b<\/h3>\n<p>Demostrar que si R es un anillo y a, b \u2208 R, entonces<\/p>\n<pre lang=\"text\">\na - b = a + -b\n<\/pre>\n<p>Para ello, completar la siguiente teor\u00eda de Lean:<\/p>\n<pre lang=\"lean\">\nimport algebra.ring\n\nvariables {R : Type*} [ring R]\nvariables {a b : R}\n\nexample : a - b = a + -b :=\nsorry\n<\/pre>\n<p><b>Soluciones con Lean<\/b><\/p>\n<pre lang=\"lean\">\nimport algebra.ring\n\nvariables {R : Type*} [ring R]\nvariables {a b : R}\n\n-- 1\u00aa demostraci\u00f3n\n-- ===============\n\nexample : a - b = a + -b :=\nbegin\n  apply sub_eq_iff_eq_add.mpr,\n  calc a\n       = a + 0        : (add_zero a).symm\n   ... = a + (-b + b) : congr_arg (\u03bb x, a + x) (neg_add_self b).symm\n   ... = a + -b + b   : (add_assoc a (-b) b).symm\nend\n\n-- 2\u00aa demostraci\u00f3n\n-- ===============\n\nexample : a - b = a + -b :=\nbegin\n  apply sub_eq_iff_eq_add.mpr,\n  calc a\n       = a + 0        : by rw add_zero\n   ... = a + (-b + b) : by {congr; rw neg_add_self}\n   ... = a + -b + b   : by rw add_assoc\nend\n\n-- 3\u00aa demostraci\u00f3n\n-- ===============\n\nexample : a - b = a + -b :=\nbegin\n  rw sub_eq_iff_eq_add,\n  rw add_assoc,\n  rw neg_add_self,\n  rw add_zero,\nend\n\n-- 4\u00aa demostraci\u00f3n\n-- ===============\n\nexample : a - b = a + -b :=\nby rw [sub_eq_iff_eq_add, add_assoc, neg_add_self, add_zero]\n\n-- 5\u00aa demostraci\u00f3n\n-- ===============\n\nexample : a - b = a + -b :=\nby simp [sub_eq_iff_eq_add]\n\n-- 6\u00aa demostraci\u00f3n\n-- ===============\n\nexample : a - b = a + -b :=\n-- by library_search\nsub_eq_add_neg a b\n<\/pre>\n<p>Se puede interactuar con la prueba anterior en <a href=\"https:\/\/leanprover-community.github.io\/lean-web-editor\/#url=https:\/\/raw.githubusercontent.com\/jaalonso\/Calculemus\/main\/src\/Subtraccion_en_anillos.lean\" rel=\"noopener noreferrer\" target=\"_blank\">esta sesi\u00f3n con Lean<\/a>.<\/p>\n<p><b>Referencias<\/b><\/p>\n<ul>\n<li>J. Avigad, K. Buzzard, R.Y. Lewis y P. Massot. <a href=\"https:\/\/bit.ly\/3U4UjBk\">Mathematics in Lean<\/a>, p. 13.<\/li>\n<\/ul>\n<p><a name=\"ej2\"><\/a><\/p>\n<h3>2. Si R es un anillo y a \u2208 R, entonces 2 * a = a + a<\/h3>\n<p>Demostrar que si R es un anillo y a \u2208 R, entonces<\/p>\n<pre lang=\"text\">\n2 * a = a + a.\n<\/pre>\n<p>Para ello, completar la siguiente teor\u00eda de Lean:<\/p>\n<pre lang=\"lean\">\nimport algebra.ring\n\nvariables {R : Type*} [ring R]\nvariables a : R\n\nexample : 2 * a = a + a :=\nsorry\n<\/pre>\n<p><b>Soluciones con Lean<\/b><\/p>\n<pre lang=\"lean\">\nimport algebra.ring\n\nvariables {R : Type*} [ring R]\nvariables a : R\n\n-- 1\u00aa demostraci\u00f3n\n-- ===============\n\nexample : 2 * a = a + a :=\ncalc\n  2 * a = (1 + 1) * a   : congr_fun (congr_arg has_mul.mul one_add_one_eq_two.symm) a\n  ...   = 1 * a + 1 * a : add_mul 1 1 a\n  ...   = a + 1 * a     : congr_arg (\u03bb x, x + 1 * a) (one_mul a)\n  ...   = a + a         : congr_arg (\u03bb x, a + x) (one_mul a)\n\n-- 2\u00aa demostraci\u00f3n\n-- ===============\n\nexample : 2 * a = a + a :=\ncalc\n  2 * a = (1 + 1) * a   : by rw one_add_one_eq_two\n  ...   = 1 * a + 1 * a : by rw add_mul\n  ...   = a + a         : by rw one_mul\n\n-- 3\u00aa demostraci\u00f3n\n-- ===============\n\nexample : 2 * a = a + a :=\nby rw [one_add_one_eq_two.symm, add_mul, one_mul]\n\n-- 4\u00aa demostraci\u00f3n\n-- ===============\n\nexample : 2 * a = a + a :=\ncalc\n  2 * a = (1 + 1)  * a  : rfl\n  ...   = 1 * a + 1 * a : by simp [add_mul]\n  ...   = a + a         : by simp\n\n-- 5\u00aa demostraci\u00f3n\n-- ===============\n\nexample : 2 * a = a + a :=\n-- by library_search\ntwo_mul a\n<\/pre>\n<p>Se puede interactuar con la prueba anterior en <a href=\"https:\/\/leanprover-community.github.io\/lean-web-editor\/#url=https:\/\/raw.githubusercontent.com\/jaalonso\/Calculemus\/main\/src\/Dos_por_a_igual_a_mas_a.lean\" rel=\"noopener noreferrer\" target=\"_blank\">esta sesi\u00f3n con Lean<\/a>.<\/p>\n<p><b>Referencias<\/b><\/p>\n<ul>\n<li>J. Avigad, K. Buzzard, R.Y. Lewis y P. Massot. <a href=\"https:\/\/bit.ly\/3U4UjBk\">Mathematics in Lean<\/a>, p. 13.<\/li>\n<\/ul>\n<p><a name=\"ej3\"><\/a><\/p>\n<h3>3. Si G es un grupo y a \u2208 G, entonces a * a\u207b\u00b9 = 1<\/h3>\n<p>En Lean, se declara que G es un grupo mediante la expresi\u00f3n<\/p>\n<pre lang=\"text\">\n   variables {G : Type*} [group G]\n<\/pre>\n<p>y, como consecuencia, se tiene los siguientes axiomas<\/p>\n<pre lang=\"text\">\n   mul_assoc    : \u2200 a b c : G, a * b * c = a * (b * c)\n   one_mul      : \u2200 a : G,     1 * a = a\n   mul_left_inv : \u2200 a : G,     a\u207b\u00b9 * a = 1\n<\/pre>\n<p>Demostrar que si G es un grupo y a \u2208 G, entonces<\/p>\n<pre lang=\"text\">\na * a\u207b\u00b9 = 1\n<\/pre>\n<p>Para ello, completar la siguiente teor\u00eda de Lean:<\/p>\n<pre lang=\"lean\">\nimport algebra.group\nvariables {G : Type*} [group G]\nvariables (a b : G)\n\nexample : a * a\u207b\u00b9 = 1 :=\nsorry\n<\/pre>\n<p><b>Soluciones con Lean<\/b><\/p>\n<pre lang=\"lean\">\nimport algebra.group\nvariables {G : Type*} [group G]\nvariables (a b : G)\n\n-- 1\u00aa demostraci\u00f3n\n-- ===============\n\nexample : a * a\u207b\u00b9 = 1 :=\ncalc a * a\u207b\u00b9\n     = 1 * (a * a\u207b\u00b9)\n       : (one_mul (a * a\u207b\u00b9)).symm\n ... = (1 * a) * a\u207b\u00b9\n       : (mul_assoc 1 a  a\u207b\u00b9).symm\n ... = (((a\u207b\u00b9)\u207b\u00b9 * a\u207b\u00b9)  * a) * a\u207b\u00b9\n       : congr_arg (\u03bb x, (x * a) * a\u207b\u00b9) (mul_left_inv a\u207b\u00b9).symm\n ... = ((a\u207b\u00b9)\u207b\u00b9 * (a\u207b\u00b9  * a)) * a\u207b\u00b9\n       : congr_fun (congr_arg has_mul.mul (mul_assoc a\u207b\u00b9\u207b\u00b9 a\u207b\u00b9 a)) a\u207b\u00b9\n ... = ((a\u207b\u00b9)\u207b\u00b9 * 1) * a\u207b\u00b9\n       : congr_arg (\u03bb x, (a\u207b\u00b9\u207b\u00b9 * x) * a\u207b\u00b9) (mul_left_inv a)\n ... = (a\u207b\u00b9)\u207b\u00b9 * (1 * a\u207b\u00b9)\n       : mul_assoc (a\u207b\u00b9)\u207b\u00b9 1 a\u207b\u00b9\n ... = (a\u207b\u00b9)\u207b\u00b9 * a\u207b\u00b9\n       : congr_arg (\u03bb x, (a\u207b\u00b9)\u207b\u00b9 * x) (one_mul a\u207b\u00b9)\n ... = 1\n       : mul_left_inv a\u207b\u00b9\n\n-- 2\u00aa demostraci\u00f3n\n-- ===============\n\nexample : a * a\u207b\u00b9 = 1 :=\ncalc\n  a * a\u207b\u00b9 = 1 * (a * a\u207b\u00b9)                : by rw one_mul\n      ... = (1 * a) * a\u207b\u00b9                : by rw mul_assoc\n      ... = (((a\u207b\u00b9)\u207b\u00b9 * a\u207b\u00b9)  * a) * a\u207b\u00b9 : by rw mul_left_inv\n      ... = ((a\u207b\u00b9)\u207b\u00b9 * (a\u207b\u00b9  * a)) * a\u207b\u00b9 : by rw \u2190 mul_assoc\n      ... = ((a\u207b\u00b9)\u207b\u00b9 * 1) * a\u207b\u00b9          : by rw mul_left_inv\n      ... = (a\u207b\u00b9)\u207b\u00b9 * (1 * a\u207b\u00b9)          : by rw mul_assoc\n      ... = (a\u207b\u00b9)\u207b\u00b9 * a\u207b\u00b9                : by rw one_mul\n      ... = 1                            : by rw mul_left_inv\n\n-- 3\u00aa demostraci\u00f3n\n-- ===============\n\nexample : a * a\u207b\u00b9 = 1 :=\ncalc\n  a * a\u207b\u00b9 = 1 * (a * a\u207b\u00b9)                : by simp\n      ... = (1 * a) * a\u207b\u00b9                : by simp\n      ... = (((a\u207b\u00b9)\u207b\u00b9 * a\u207b\u00b9)  * a) * a\u207b\u00b9 : by simp\n      ... = ((a\u207b\u00b9)\u207b\u00b9 * (a\u207b\u00b9  * a)) * a\u207b\u00b9 : by simp\n      ... = ((a\u207b\u00b9)\u207b\u00b9 * 1) * a\u207b\u00b9          : by simp\n      ... = (a\u207b\u00b9)\u207b\u00b9 * (1 * a\u207b\u00b9)          : by simp\n      ... = (a\u207b\u00b9)\u207b\u00b9 * a\u207b\u00b9                : by simp\n      ... = 1                            : by simp\n\n-- 4\u00aa demostraci\u00f3n\n-- ===============\n\nexample : a * a\u207b\u00b9 = 1 :=\nby simp\n\n-- 5\u00aa demostraci\u00f3n\n-- ===============\n\nexample : a * a\u207b\u00b9 = 1 :=\n-- by library_search\nmul_inv_self a\n<\/pre>\n<p>Se puede interactuar con la prueba anterior en <a href=\"https:\/\/leanprover-community.github.io\/lean-web-editor\/#url=https:\/\/raw.githubusercontent.com\/jaalonso\/Calculemus\/main\/src\/Inverso_derecha.lean\" rel=\"noopener noreferrer\" target=\"_blank\">esta sesi\u00f3n con Lean<\/a>.<\/p>\n<p><b>Referencias<\/b><\/p>\n<ul>\n<li>J. Avigad, K. Buzzard, R.Y. Lewis y P. Massot. <a href=\"https:\/\/bit.ly\/3U4UjBk\">Mathematics in Lean<\/a>, p. 14.<\/li>\n<\/ul>\n<p><a name=\"ej4\"><\/a><\/p>\n<h3>4. Si G es un grupo y a \u2208 G, entonces a * 1 = a<\/h3>\n<p>Demostrar que si G es un grupo y a \u2208 G, entonces<\/p>\n<pre lang=\"text\">\na * 1 = a\n<\/pre>\n<p>Para ello, completar la siguiente teor\u00eda de Lean:<\/p>\n<pre lang=\"lean\">\nimport algebra.group\nvariables {G : Type*} [group G]\nvariables a : G\n\nexample : a * 1 = a :=\nsorry\n<\/pre>\n<p><b>Soluciones con Lean<\/b><\/p>\n<pre lang=\"lean\">\nimport algebra.group\nvariables {G : Type*} [group G]\nvariables a : G\n\n-- 1\u00aa demostraci\u00f3n\n-- ===============\n\nexample : a * 1 = a :=\ncalc\n  a * 1 = a * (a\u207b\u00b9 * a) : congr_arg (\u03bb x, a * x) (mul_left_inv a).symm\n    ... = (a * a\u207b\u00b9) * a : (mul_assoc a a\u207b\u00b9 a).symm\n    ... = 1 * a         : congr_arg (\u03bb x, x* a) (mul_right_inv a)\n    ... = a             : one_mul a\n\n-- 2\u00aa demostraci\u00f3n\n-- ===============\n\nexample : a * 1 = a :=\ncalc\n  a * 1 = a * (a\u207b\u00b9 * a) : by rw mul_left_inv\n    ... = (a * a\u207b\u00b9) * a : by rw mul_assoc\n    ... = 1 * a         : by rw mul_right_inv\n    ... = a             : by rw one_mul\n\n-- 3\u00aa demostraci\u00f3n\n-- ===============\n\nexample : a * 1 = a :=\ncalc\n  a * 1 = a * (a\u207b\u00b9 * a) : by simp\n    ... = (a * a\u207b\u00b9) * a : by simp\n    ... = 1 * a         : by simp\n    ... = a             : by simp\n\n-- 3\u00aa demostraci\u00f3n\n-- ===============\n\nexample : a * 1 = a :=\nby simp\n\n-- 4\u00aa demostraci\u00f3n\n-- ===============\n\nexample : a * 1 = a :=\n-- by library_search\nmul_one a\n<\/pre>\n<p>Se puede interactuar con la prueba anterior en <a href=\"https:\/\/leanprover-community.github.io\/lean-web-editor\/#url=https:\/\/raw.githubusercontent.com\/jaalonso\/Calculemus\/main\/src\/Neutro_derecha.lean\" rel=\"noopener noreferrer\" target=\"_blank\">esta sesi\u00f3n con Lean<\/a>.<\/p>\n<p><b>Referencias<\/b><\/p>\n<ul>\n<li>J. Avigad, K. Buzzard, R.Y. Lewis y P. Massot. <a href=\"https:\/\/bit.ly\/3U4UjBk\">Mathematics in Lean<\/a>, p. 14.<\/li>\n<\/ul>\n<p><a name=\"ej5\"><\/a><\/p>\n<h3>5. Si G es un grupo y a, b \u2208 G tales que b * a = 1, entonces a\u207b\u00b9 = b<\/h3>\n<p>Demostrar que si G es un grupo y a, b \u2208 G tales que<\/p>\n<pre lang=\"text\">\nb * a = 1\n<\/pre>\n<p>entonces<\/p>\n<pre lang=\"text\">\na\u207b\u00b9 = b\n<\/pre>\n<p>Para ello, completar la siguiente teor\u00eda de Lean:<\/p>\n<pre lang=\"lean\">\nimport algebra.group\nvariables {G : Type*} [group G]\nvariables a b : G\n\nexample\n  (h : b * a = 1)\n  : a\u207b\u00b9 = b :=\nsorry\n<\/pre>\n<p><b>Soluciones con Lean<\/b><\/p>\n<pre lang=\"lean\">\nimport algebra.group\nvariables {G : Type*} [group G]\nvariables a b : G\n\n-- 1\u00aa demostraci\u00f3n\n-- ===============\n\nexample\n  (h : b * a = 1)\n  : a\u207b\u00b9 = b :=\ncalc\n  a\u207b\u00b9 =  1 * a\u207b\u00b9       : (one_mul a\u207b\u00b9).symm\n  ... =  (b * a) * a\u207b\u00b9 : congr_arg (\u03bb x, x * a\u207b\u00b9) h.symm\n  ... =  b * (a * a\u207b\u00b9) : mul_assoc b a a\u207b\u00b9\n  ... =  b * 1         : congr_arg (\u03bb x, b * x) (mul_right_inv a)\n  ... =  b             : mul_one b\n\n-- 2\u00aa demostraci\u00f3n\n-- ===============\n\nexample\n  (h : b * a = 1)\n  : a\u207b\u00b9 = b :=\ncalc\n  a\u207b\u00b9 =  1 * a\u207b\u00b9       : by rw one_mul\n  ... =  (b * a) * a\u207b\u00b9 : by rw h\n  ... =  b * (a * a\u207b\u00b9) : by rw mul_assoc\n  ... =  b * 1         : by rw mul_right_inv\n  ... =  b             : by rw mul_one\n\n-- 3\u00aa demostraci\u00f3n\n-- ===============\n\nexample\n  (h : b * a = 1)\n  : a\u207b\u00b9 = b :=\ncalc\n  a\u207b\u00b9 =  1 * a\u207b\u00b9       : by simp\n  ... =  (b * a) * a\u207b\u00b9 : by simp [h]\n  ... =  b * (a * a\u207b\u00b9) : by simp\n  ... =  b * 1         : by simp\n  ... =  b             : by simp\n\n-- 4\u00aa demostraci\u00f3n\n-- ===============\n\nexample\n  (h : b * a = 1)\n  : a\u207b\u00b9 = b :=\n-- by library_search\ninv_eq_of_mul_eq_one_left h\n<\/pre>\n<p>Se puede interactuar con la prueba anterior en <a href=\"https:\/\/leanprover-community.github.io\/lean-web-editor\/#url=https:\/\/raw.githubusercontent.com\/jaalonso\/Calculemus\/main\/src\/CS_inverso_izquierda.lean\" rel=\"noopener noreferrer\" target=\"_blank\">esta sesi\u00f3n con Lean<\/a>.<\/p>\n<p><b>Referencias<\/b><\/p>\n<ul>\n<li>J. Avigad, K. Buzzard, R.Y. Lewis y P. Massot. <a href=\"https:\/\/bit.ly\/3U4UjBk\">Mathematics in Lean<\/a>.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Esta semana he publicado en Calculemus las demostraciones con Lean de las siguientes propiedades: 1. Si R es un anillo y a, b \u2208 R, entonces a &#8211; b = a + -b 2. Si R es un anillo y a \u2208 R, entonces 2 * a = a + a 3. Si G es&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"footnotes":"","_jetpack_memberships_contains_paid_content":false},"categories":[335],"tags":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/7797"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/comments?post=7797"}],"version-history":[{"count":1,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/7797\/revisions"}],"predecessor-version":[{"id":7798,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/7797\/revisions\/7798"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=7797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=7797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=7797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}