<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>Tiddly Formal Math</title>
<link>http://formalmath.tiddlyspot.com</link>
<description>a TiddlyWiki rendering of the IsarMathLib  project</description>
<language>en-us</language>
<copyright>Copyright 2008 Slawekk</copyright>
<pubDate>Thu, 03 Jul 2008 00:44:59 GMT</pubDate>
<lastBuildDate>Thu, 03 Jul 2008 00:44:59 GMT</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>TiddlyWiki 2.2.6</generator>
<item>
<title>UploadLog</title>
<description>&lt;table class=&quot;twtable&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;th align=&quot;center&quot;&gt;date&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;user&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;location&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;storeUrl&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;uploadDir&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;toFilename&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;backupdir&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;origin&lt;/th&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;18/11/2007 10:05:19&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a tiddlylink=&quot;YourName&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#YourName&quot; href=&quot;http://formalmath.tiddlyspot.com#YourName&quot; class=&quot;externalLink&quot;&gt;YourName&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to file:///home/slawek/Desktop/formalmath.html&quot; href=&quot;file:///home/slawek/Desktop/formalmath.html&quot; class=&quot;externalLink&quot;&gt;formalmath.html&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com/store.cgi&quot; href=&quot;http://formalmath.tiddlyspot.com/store.cgi&quot; class=&quot;externalLink&quot;&gt;store.cgi&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://formalmath.tiddlyspot.com/index.html&quot; href=&quot;%20http://formalmath.tiddlyspot.com/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;18/11/2007 10:16:58&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a tiddlylink=&quot;YourName&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#YourName&quot; href=&quot;http://formalmath.tiddlyspot.com#YourName&quot; class=&quot;externalLink&quot;&gt;YourName&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com/#author:true&quot; href=&quot;http://formalmath.tiddlyspot.com/#author:true&quot; class=&quot;externalLink&quot;&gt;/&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com/store.cgi&quot; href=&quot;http://formalmath.tiddlyspot.com/store.cgi&quot; class=&quot;externalLink&quot;&gt;store.cgi&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://formalmath.tiddlyspot.com/index.html&quot; href=&quot;%20http://formalmath.tiddlyspot.com/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;18/11/2007 10:23:21&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a tiddlylink=&quot;YourName&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#YourName&quot; href=&quot;http://formalmath.tiddlyspot.com#YourName&quot; class=&quot;externalLink&quot;&gt;YourName&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com/#author:true&quot; href=&quot;http://formalmath.tiddlyspot.com/#author:true&quot; class=&quot;externalLink&quot;&gt;/&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com/store.cgi&quot; href=&quot;http://formalmath.tiddlyspot.com/store.cgi&quot; class=&quot;externalLink&quot;&gt;store.cgi&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://formalmath.tiddlyspot.com/index.html&quot; href=&quot;%20http://formalmath.tiddlyspot.com/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;ok&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;18/11/2007 10:43:13&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a tiddlylink=&quot;YourName&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#YourName&quot; href=&quot;http://formalmath.tiddlyspot.com#YourName&quot; class=&quot;externalLink&quot;&gt;YourName&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com/#author:true&quot; href=&quot;http://formalmath.tiddlyspot.com/#author:true&quot; class=&quot;externalLink&quot;&gt;/&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com/store.cgi&quot; href=&quot;http://formalmath.tiddlyspot.com/store.cgi&quot; class=&quot;externalLink&quot;&gt;store.cgi&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://formalmath.tiddlyspot.com/index.html&quot; href=&quot;%20http://formalmath.tiddlyspot.com/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;19/01/2008 21:24:36&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a tiddlylink=&quot;YourName&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#YourName&quot; href=&quot;http://formalmath.tiddlyspot.com#YourName&quot; class=&quot;externalLink&quot;&gt;YourName&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com/#author:true&quot; href=&quot;http://formalmath.tiddlyspot.com/#author:true&quot; class=&quot;externalLink&quot;&gt;/&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com/store.cgi&quot; href=&quot;http://formalmath.tiddlyspot.com/store.cgi&quot; class=&quot;externalLink&quot;&gt;store.cgi&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://formalmath.tiddlyspot.com/index.html&quot; href=&quot;%20http://formalmath.tiddlyspot.com/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;04/03/2008 21:59:40&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;Slawekk&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to file:///home/slawek/formalized_math/tiddlyMath/formalmath.html&quot; href=&quot;file:///home/slawek/formalized_math/tiddlyMath/formalmath.html&quot; class=&quot;externalLink&quot;&gt;formalmath.html&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com/store.cgi&quot; href=&quot;http://formalmath.tiddlyspot.com/store.cgi&quot; class=&quot;externalLink&quot;&gt;store.cgi&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://formalmath.tiddlyspot.com/index.html&quot; href=&quot;%20http://formalmath.tiddlyspot.com/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;ok&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;08/03/2008 10:36:32&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;Slawekk&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to file:///home/slawek/formalized_math/tiddlyMath/formalmath.html&quot; href=&quot;file:///home/slawek/formalized_math/tiddlyMath/formalmath.html&quot; class=&quot;externalLink&quot;&gt;formalmath.html&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com/store.cgi&quot; href=&quot;http://formalmath.tiddlyspot.com/store.cgi&quot; class=&quot;externalLink&quot;&gt;store.cgi&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://formalmath.tiddlyspot.com/index.html&quot; href=&quot;%20http://formalmath.tiddlyspot.com/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;ok&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;09/03/2008 12:46:27&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;Slawekk&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to file:///home/slawek/formalized_math/tiddlyMath/formalmath.html&quot; href=&quot;file:///home/slawek/formalized_math/tiddlyMath/formalmath.html&quot; class=&quot;externalLink&quot;&gt;formalmath.html&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com/store.cgi&quot; href=&quot;http://formalmath.tiddlyspot.com/store.cgi&quot; class=&quot;externalLink&quot;&gt;store.cgi&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://formalmath.tiddlyspot.com/index.html&quot; href=&quot;%20http://formalmath.tiddlyspot.com/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;oddRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;20/03/2008 19:25:26&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;Slawekk&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to file:///home/slawek/formalized_math/tiddlyMath/formalmath.html&quot; href=&quot;file:///home/slawek/formalized_math/tiddlyMath/formalmath.html&quot; class=&quot;externalLink&quot;&gt;formalmath.html&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com/store.cgi&quot; href=&quot;http://formalmath.tiddlyspot.com/store.cgi&quot; class=&quot;externalLink&quot;&gt;store.cgi&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://formalmath.tiddlyspot.com/index.html&quot; href=&quot;%20http://formalmath.tiddlyspot.com/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;evenRow&quot;&gt;&lt;td align=&quot;center&quot;&gt;02/07/2008 20:44:58&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;Slawekk&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to file:///home/slawek/formalized_math/tiddlyMath/formalmath.html&quot; href=&quot;file:///home/slawek/formalized_math/tiddlyMath/formalmath.html&quot; class=&quot;externalLink&quot;&gt;formalmath.html&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com/store.cgi&quot; href=&quot;http://formalmath.tiddlyspot.com/store.cgi&quot; class=&quot;externalLink&quot;&gt;store.cgi&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to  http://formalmath.tiddlyspot.com/index.html&quot; href=&quot;%20http://formalmath.tiddlyspot.com/index.html&quot; class=&quot;externalLink&quot;&gt;index.html &lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description>
<link>http://formalmath.tiddlyspot.com#UploadLog</link>
<pubDate>Thu, 03 Jul 2008 00:44:58 GMT</pubDate>
</item>
<item>
<title>MainMenu</title>
<description>&lt;a tiddlylink=&quot;AboutThisSite&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#AboutThisSite&quot; href=&quot;http://formalmath.tiddlyspot.com#AboutThisSite&quot; class=&quot;externalLink&quot;&gt;AboutThisSite&lt;/a&gt;&lt;br&gt;&lt;a tiddlylink=&quot;Introduction&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Introduction&quot; href=&quot;http://formalmath.tiddlyspot.com#Introduction&quot; class=&quot;externalLink&quot;&gt;Introduction&lt;/a&gt;&lt;br&gt;&lt;a tiddlylink=&quot;ZF1&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#ZF1&quot; href=&quot;http://formalmath.tiddlyspot.com#ZF1&quot; class=&quot;externalLink&quot;&gt;ZF1&lt;/a&gt;&lt;br&gt;&lt;a tiddlylink=&quot;Nat_ZF&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Nat_ZF&quot; href=&quot;http://formalmath.tiddlyspot.com#Nat_ZF&quot; class=&quot;externalLink&quot;&gt;Nat_ZF&lt;/a&gt;&lt;br&gt;&lt;a tiddlylink=&quot;func_ZF&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#func_ZF&quot; href=&quot;http://formalmath.tiddlyspot.com#func_ZF&quot; class=&quot;externalLink&quot;&gt;func_ZF&lt;/a&gt;&lt;br&gt;&lt;a tiddlylink=&quot;EquivClass1&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#EquivClass1&quot; href=&quot;http://formalmath.tiddlyspot.com#EquivClass1&quot; class=&quot;externalLink&quot;&gt;EquivClass1&lt;/a&gt;&lt;br&gt;&lt;a tiddlylink=&quot;Finite_ZF&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Finite_ZF&quot; href=&quot;http://formalmath.tiddlyspot.com#Finite_ZF&quot; class=&quot;externalLink&quot;&gt;Finite_ZF&lt;/a&gt;&lt;br&gt;&lt;a tiddlylink=&quot;FinSupp_ZF&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#FinSupp_ZF&quot; href=&quot;http://formalmath.tiddlyspot.com#FinSupp_ZF&quot; class=&quot;externalLink&quot;&gt;FinSupp_ZF&lt;/a&gt;&lt;br&gt;&lt;a tiddlylink=&quot;Topology_ZF&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Topology_ZF&quot; href=&quot;http://formalmath.tiddlyspot.com#Topology_ZF&quot; class=&quot;externalLink&quot;&gt;Topology_ZF&lt;/a&gt;&lt;br&gt;&lt;a tiddlylink=&quot;Topology_ZF_1&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Topology_ZF_1&quot; href=&quot;http://formalmath.tiddlyspot.com#Topology_ZF_1&quot; class=&quot;externalLink&quot;&gt;Topology_ZF_1&lt;/a&gt;&lt;br&gt;&lt;a tiddlylink=&quot;Topology_ZF_1b&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Topology_ZF_1b&quot; href=&quot;http://formalmath.tiddlyspot.com#Topology_ZF_1b&quot; class=&quot;externalLink&quot;&gt;Topology_ZF_1b&lt;/a&gt;&lt;br&gt;&lt;a tiddlylink=&quot;Topology_ZF_2&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Topology_ZF_2&quot; href=&quot;http://formalmath.tiddlyspot.com#Topology_ZF_2&quot; class=&quot;externalLink&quot;&gt;Topology_ZF_2&lt;/a&gt;&lt;br&gt;&lt;a tiddlylink=&quot;Monoid_ZF&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Monoid_ZF&quot; href=&quot;http://formalmath.tiddlyspot.com#Monoid_ZF&quot; class=&quot;externalLink&quot;&gt;Monoid_ZF&lt;/a&gt;&lt;br&gt;&lt;a tiddlylink=&quot;Group_ZF&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Group_ZF&quot; href=&quot;http://formalmath.tiddlyspot.com#Group_ZF&quot; class=&quot;externalLink&quot;&gt;Group_ZF&lt;/a&gt;&lt;br&gt;&lt;a tiddlylink=&quot;Group_ZF_1&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Group_ZF_1&quot; href=&quot;http://formalmath.tiddlyspot.com#Group_ZF_1&quot; class=&quot;externalLink&quot;&gt;Group_ZF_1&lt;/a&gt;&lt;br&gt;&lt;a tiddlylink=&quot;Group_ZF_1b&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Group_ZF_1b&quot; href=&quot;http://formalmath.tiddlyspot.com#Group_ZF_1b&quot; class=&quot;externalLink&quot;&gt;Group_ZF_1b&lt;/a&gt;&lt;br&gt;&lt;a tiddlylink=&quot;DirectProduct_ZF&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#DirectProduct_ZF&quot; href=&quot;http://formalmath.tiddlyspot.com#DirectProduct_ZF&quot; class=&quot;externalLink&quot;&gt;DirectProduct_ZF&lt;/a&gt;&lt;br&gt;&lt;a tiddlylink=&quot;Administration&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Administration&quot; href=&quot;http://formalmath.tiddlyspot.com#Administration&quot; class=&quot;externalLink&quot;&gt;Administration&lt;/a&gt; &lt;br&gt;&lt;a tiddlylink=&quot;GettingStarted&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#GettingStarted&quot; href=&quot;http://formalmath.tiddlyspot.com#GettingStarted&quot; class=&quot;externalLink&quot;&gt;GettingStarted&lt;/a&gt;</description>
<link>http://formalmath.tiddlyspot.com#MainMenu</link>
<pubDate>Thu, 03 Jul 2008 00:10:00 GMT</pubDate>
</item>
<item>
<title>FinSupp_ZF</title>
<description> &lt;strong&gt;theory&lt;/strong&gt; &lt;a tiddlylink=&quot;FinSupp_ZF&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#FinSupp_ZF&quot; href=&quot;http://formalmath.tiddlyspot.com#FinSupp_ZF&quot; class=&quot;externalLink&quot;&gt;FinSupp_ZF&lt;/a&gt; &lt;strong&gt;imports&lt;/strong&gt; &lt;a tiddlylink=&quot;Finite_ZF&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Finite_ZF&quot; href=&quot;http://formalmath.tiddlyspot.com#Finite_ZF&quot; class=&quot;externalLink&quot;&gt;Finite_ZF&lt;/a&gt; &lt;a tiddlylink=&quot;Group_ZF_2&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Group_ZF_2&quot; href=&quot;http://formalmath.tiddlyspot.com#Group_ZF_2&quot; class=&quot;externalLink&quot;&gt;Group_ZF_2&lt;/a&gt;&lt;br&gt;&lt;br&gt; &lt;strong&gt;begin&lt;br&gt;&lt;/strong&gt; &lt;br&gt;Functions with finite support are those functions valued in a monoid that are equal to the neutral element everywhere except a finite number of points. They form a submonoid of the space of all functions valued in the monoid with the natural pointwise operation (or a subgroup if functions are valued in a group). Finitely supported functions show up in the &lt;a tiddlylink=&quot;IsarMathLib&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#IsarMathLib&quot; href=&quot;http://formalmath.tiddlyspot.com#IsarMathLib&quot; class=&quot;externalLink&quot;&gt;IsarMathLib&lt;/a&gt;'s construction of real numbers. Namely (for an abelian group (G,A)) we say that &lt;span class=&quot;math&quot;&gt;f: G\rightarrow G&lt;/span&gt; is an almost homomorphism if the map &lt;span class=&quot;math&quot;&gt;(n,m) \mapsto f(n+m) - f(n) - f(m)&lt;/span&gt; is finitely supported. The (additive group of) real numbers is really constructed as the quotient group: (almost homomorphism)/(finitely supported functions), where the group G we start with is the group of integers. Also polynomials can be viewed as ring valued sequences that have finite support.&lt;br&gt;&lt;br&gt;&lt;h1&gt;Functions with finite support&lt;/h1&gt;&lt;br&gt;In this section we provide the definition and set up notation for formalizing the notion of finitely supported functions.&lt;br&gt;&lt;br&gt;Spupport of a function is the subset of its domain where the values are not zero.&lt;br&gt;&lt;br&gt; &lt;strong&gt;Definition&lt;br&gt;&lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; Supp(f,G,A) \equiv  \{x \in  domain(f).\  f(x) \neq  TheNeutralElement(G,A)\}&lt;/span&gt;&lt;br&gt;&lt;br&gt;A finitely supported function is such that its support is in the finite powerset of its domain.&lt;br&gt;&lt;br&gt; &lt;strong&gt;Definition&lt;br&gt;&lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; FinSupp(X,G,A) \equiv  \{f \in  X\rightarrow G.\  Supp(f,G,A) \in  FinPow(X)\}&lt;/span&gt;&lt;br&gt;&lt;br&gt;We will use the additive notation writing about finitely supported functions. In the &lt;em&gt;finsupp&lt;/em&gt; context defined below we assume that &lt;span class=&quot;math&quot;&gt;(M,A)&lt;/span&gt; is a monoid and &lt;span class=&quot;math&quot;&gt;X&lt;/span&gt; is some arbitrary set. We denote &lt;span class=&quot;math&quot;&gt; \mathcal{A} &lt;/span&gt; to be the pointwise operation on &lt;span class=&quot;math&quot;&gt;M&lt;/span&gt;-valued functions on &lt;span class=&quot;math&quot;&gt;X&lt;/span&gt; corresponding to the monoid operation &lt;span class=&quot;math&quot;&gt;A&lt;/span&gt;, (denoted as &lt;span class=&quot;math&quot;&gt; + &lt;/span&gt;). &lt;span class=&quot;math&quot;&gt; 0 &lt;/span&gt; is the neutral element of the monoid.&lt;br&gt;&lt;br&gt; &lt;strong&gt;Locale &lt;/strong&gt; finsupp&lt;br&gt; &lt;strong&gt;fixes &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; M&lt;/span&gt;, &lt;span class=&quot;math&quot;&gt; A&lt;/span&gt;, &lt;br&gt; &lt;strong&gt;assumes &lt;/strong&gt; monoidAsssum: &lt;span class=&quot;math&quot;&gt; \text{IsAmonoid}(M,A)&lt;/span&gt;&lt;br&gt; &lt;strong&gt;fixes &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; monoper&lt;/span&gt;, &lt;br&gt; &lt;strong&gt;defines &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; a  +  b \equiv  A\langle a,b\rangle &lt;/span&gt;&lt;br&gt; &lt;strong&gt;fixes &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; X&lt;/span&gt;, &lt;br&gt; &lt;strong&gt;fixes &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; pointewiseoper&lt;/span&gt;, &lt;br&gt; &lt;strong&gt;defines &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; \mathcal{A}  \equiv  A \text{ lifted to function space over } X&lt;/span&gt;&lt;br&gt; &lt;strong&gt;fixes &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; funoper&lt;/span&gt;, &lt;br&gt; &lt;strong&gt;defines &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; a \oplus  b \equiv  \mathcal{A} \langle a,b\rangle &lt;/span&gt;&lt;br&gt; &lt;strong&gt;fixes &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; neut&lt;/span&gt;, &lt;br&gt; &lt;strong&gt;defines &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; 0  \equiv  TheNeutralElement(M,A)&lt;/span&gt;&lt;br&gt; &lt;strong&gt;fixes &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; supp&lt;/span&gt;, &lt;br&gt; &lt;strong&gt;defines &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; supp(f) \equiv  Supp(f,M,A)&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;We can use theorems proven in the &lt;em&gt;monoid0&lt;/em&gt; context.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;   &lt;strong&gt;(in &lt;/strong&gt; finsupp &lt;strong&gt;) &lt;/strong&gt; &lt;span&gt;monoid0_valid&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; monoid0(M,A)&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;monoidAsssum&lt;/span&gt; ,  &lt;span&gt;monoid0_def&lt;/span&gt;&lt;br&gt;&lt;br&gt;The sum of monoid valued functions is a monoid valued function.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;   &lt;strong&gt;(in &lt;/strong&gt; finsupp &lt;strong&gt;) &lt;/strong&gt; &lt;span&gt;lifted_op_closed&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; f:X \rightarrow M&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; g:X \rightarrow M&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; f\oplus g : X\rightarrow M&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \mathcal{A}  : (X\rightarrow M)\times (X\rightarrow M)\rightarrow (X\rightarrow M)&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; FinSupp_ZF &quot; openedtext=&quot;monoid0_valid &quot; closedtip=&quot; FinSupp_ZF &quot; closedtext=&quot;monoid0_valid &quot; class=&quot;button&quot; title=&quot; FinSupp_ZF &quot; href=&quot;javascript:;&quot;&gt;monoid0_valid &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''   ''(in '' finsupp '') '' &amp;lt;nowiki&amp;gt;monoid0_valid&amp;lt;/nowiki&amp;gt;:  '' shows '' $ monoid0(M,A)$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;span&gt;monoid0.Group_ZF_2_1_L0A&lt;/span&gt;&lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; assms  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; f\oplus g : X\rightarrow M&lt;/span&gt; &lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt;&lt;br&gt;What is the value of a sum of monoid-valued functions?&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;   &lt;strong&gt;(in &lt;/strong&gt; finsupp &lt;strong&gt;) &lt;/strong&gt; &lt;span&gt;sum_val&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; f:X \rightarrow M&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; g:X \rightarrow M&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; x \in  X&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; (f\oplus g)(x) = f(x)  +  g(x)&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;assms&lt;/span&gt; ,  &lt;a openedtip=&quot; FinSupp_ZF &quot; openedtext=&quot;monoid0_valid &quot; closedtip=&quot; FinSupp_ZF &quot; closedtext=&quot;monoid0_valid &quot; class=&quot;button&quot; title=&quot; FinSupp_ZF &quot; href=&quot;javascript:;&quot;&gt;monoid0_valid &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''   ''(in '' finsupp '') '' &amp;lt;nowiki&amp;gt;monoid0_valid&amp;lt;/nowiki&amp;gt;:  '' shows '' $ monoid0(M,A)$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;span&gt;monoid0.lifted_val&lt;/span&gt;&lt;br&gt;&lt;br&gt;The support of the sum of functions is contained in the union of supports.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;   &lt;strong&gt;(in &lt;/strong&gt; finsupp &lt;strong&gt;) &lt;/strong&gt; &lt;span&gt;supp_sum_union&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; f:X \rightarrow M&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; g:X \rightarrow M&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; supp(f\oplus g) \subseteq  supp(f) \cup  supp(g)&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;{ &lt;/strong&gt;  &lt;strong&gt;fix &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; x&lt;/span&gt;&lt;br&gt; &lt;strong&gt;assume &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; x \in  supp(f\oplus g)&lt;/span&gt;&lt;br&gt; &lt;strong&gt;from &lt;/strong&gt; assms  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; f\oplus g : X\rightarrow M&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; FinSupp_ZF &quot; openedtext=&quot;lifted_op_closed &quot; closedtip=&quot; FinSupp_ZF &quot; closedtext=&quot;lifted_op_closed &quot; class=&quot;button&quot; title=&quot; FinSupp_ZF &quot; href=&quot;javascript:;&quot;&gt;lifted_op_closed &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''   ''(in '' finsupp '') '' &amp;lt;nowiki&amp;gt;lifted_op_closed&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ f:X \rightarrow M$,   $ g:X \rightarrow M$  '' shows '' $ f\oplus g : X\rightarrow M$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; assms, &lt;span class=&quot;math&quot;&gt; x \in  supp(f\oplus g)&lt;/span&gt;  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; x\in X&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; f(x)  +  g(x) \neq  0 &lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;func1_1_L1&lt;/span&gt; ,  &lt;a openedtip=&quot; FinSupp_ZF &quot; openedtext=&quot;Supp_def &quot; closedtip=&quot; FinSupp_ZF &quot; closedtext=&quot;Supp_def &quot; class=&quot;button&quot; title=&quot; FinSupp_ZF &quot; href=&quot;javascript:;&quot;&gt;Supp_def &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;Definition of &amp;lt;nowiki&amp;gt;Supp&amp;lt;/nowiki&amp;gt;:
$ Supp(f,G,A) \equiv  \{x \in  domain(f).\  f(x) \neq  TheNeutralElement(G,A)\}$&quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;a openedtip=&quot; FinSupp_ZF &quot; openedtext=&quot;sum_val &quot; closedtip=&quot; FinSupp_ZF &quot; closedtext=&quot;sum_val &quot; class=&quot;button&quot; title=&quot; FinSupp_ZF &quot; href=&quot;javascript:;&quot;&gt;sum_val &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''   ''(in '' finsupp '') '' &amp;lt;nowiki&amp;gt;sum_val&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ f:X \rightarrow M$,   $ g:X \rightarrow M$  ''and'' $ x \in  X$  '' shows '' $ (f\oplus g)(x) = f(x)  +  g(x)$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; assms  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; x \in  (supp(f) \cup  supp(g))&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; FinSupp_ZF &quot; openedtext=&quot;monoid0_valid &quot; closedtip=&quot; FinSupp_ZF &quot; closedtext=&quot;monoid0_valid &quot; class=&quot;button&quot; title=&quot; FinSupp_ZF &quot; href=&quot;javascript:;&quot;&gt;monoid0_valid &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''   ''(in '' finsupp '') '' &amp;lt;nowiki&amp;gt;monoid0_valid&amp;lt;/nowiki&amp;gt;:  '' shows '' $ monoid0(M,A)$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;a openedtip=&quot; Monoid_ZF &quot; openedtext=&quot;sum_nonzero_elmnt_nonzero &quot; closedtip=&quot; Monoid_ZF &quot; closedtext=&quot;sum_nonzero_elmnt_nonzero &quot; class=&quot;button&quot; title=&quot; Monoid_ZF &quot; href=&quot;javascript:;&quot;&gt;sum_nonzero_elmnt_nonzero &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''   ''(in '' monoid0 '') '' &amp;lt;nowiki&amp;gt;sum_nonzero_elmnt_nonzero&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ a \oplus  b \neq  TheNeutralElement(G,f)$  '' shows '' $ a \neq  TheNeutralElement(G,f) \vee  b \neq  TheNeutralElement(G,f)$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;span&gt;func1_1_L1&lt;/span&gt; ,  &lt;a openedtip=&quot; FinSupp_ZF &quot; openedtext=&quot;Supp_def &quot; closedtip=&quot; FinSupp_ZF &quot; closedtext=&quot;Supp_def &quot; class=&quot;button&quot; title=&quot; FinSupp_ZF &quot; href=&quot;javascript:;&quot;&gt;Supp_def &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;Definition of &amp;lt;nowiki&amp;gt;Supp&amp;lt;/nowiki&amp;gt;:
$ Supp(f,G,A) \equiv  \{x \in  domain(f).\  f(x) \neq  TheNeutralElement(G,A)\}$&quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt; }&lt;/strong&gt; &lt;br&gt; &lt;strong&gt;thus&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; thesis&lt;/span&gt;&lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt;&lt;br&gt;The sum of finitely supported functions is finitely supported.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;   &lt;strong&gt;(in &lt;/strong&gt; finsupp &lt;strong&gt;) &lt;/strong&gt; &lt;span&gt;sum_finsupp&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; f \in  FinSupp(X,M,A)&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; g \in  FinSupp(X,M,A)&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; f\oplus g \in  FinSupp(X,M,A)&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;from &lt;/strong&gt; assms  &lt;strong&gt;have&lt;/strong&gt;  I: &lt;span class=&quot;math&quot;&gt; f: X\rightarrow M&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; g: X\rightarrow M&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; supp(f) \in  FinPow(X)&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; supp(g) \in  FinPow(X)&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; FinSupp_ZF &quot; openedtext=&quot;FinSupp_def &quot; closedtip=&quot; FinSupp_ZF &quot; closedtext=&quot;FinSupp_def &quot; class=&quot;button&quot; title=&quot; FinSupp_ZF &quot; href=&quot;javascript:;&quot;&gt;FinSupp_def &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;Definition of &amp;lt;nowiki&amp;gt;FinSupp&amp;lt;/nowiki&amp;gt;:
$ FinSupp(X,G,A) \equiv  \{f \in  X\rightarrow G.\  Supp(f,G,A) \in  FinPow(X)\}$&quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;then &lt;/strong&gt;  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; supp(f) \cup  supp(g) \in   FinPow(X)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; supp(f\oplus g) \subseteq  supp(f) \cup  supp(g)&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; Finite_ZF &quot; openedtext=&quot;union_finpow &quot; closedtip=&quot; Finite_ZF &quot; closedtext=&quot;union_finpow &quot; class=&quot;button&quot; title=&quot; Finite_ZF &quot; href=&quot;javascript:;&quot;&gt;union_finpow &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;union_finpow&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ A \in  FinPow(X)$  ''and'' $ B \in  FinPow(X)$  '' shows '' $ A \cup  B \in  FinPow(X)$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;a openedtip=&quot; FinSupp_ZF &quot; openedtext=&quot;supp_sum_union &quot; closedtip=&quot; FinSupp_ZF &quot; closedtext=&quot;supp_sum_union &quot; class=&quot;button&quot; title=&quot; FinSupp_ZF &quot; href=&quot;javascript:;&quot;&gt;supp_sum_union &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''   ''(in '' finsupp '') '' &amp;lt;nowiki&amp;gt;supp_sum_union&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ f:X \rightarrow M$,   $ g:X \rightarrow M$  '' shows '' $ supp(f\oplus g) \subseteq  supp(f) \cup  supp(g)$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;then &lt;/strong&gt;  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; supp(f\oplus g) \in   FinPow(X)&lt;/span&gt; &lt;strong&gt;   by (rule &lt;/strong&gt; &lt;a openedtip=&quot; Finite_ZF &quot; openedtext=&quot;subset_finpow &quot; closedtip=&quot; Finite_ZF &quot; closedtext=&quot;subset_finpow &quot; class=&quot;button&quot; title=&quot; Finite_ZF &quot; href=&quot;javascript:;&quot;&gt;subset_finpow &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;subset_finpow&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ A \in  FinPow(X)$  ''and'' $ B \subseteq  A$  '' shows '' $ B \in  FinPow(X)$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  &lt;strong&gt;)&lt;/strong&gt; &lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; I  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; f\oplus g \in  FinSupp(X,M,A)&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; FinSupp_ZF &quot; openedtext=&quot;lifted_op_closed &quot; closedtip=&quot; FinSupp_ZF &quot; closedtext=&quot;lifted_op_closed &quot; class=&quot;button&quot; title=&quot; FinSupp_ZF &quot; href=&quot;javascript:;&quot;&gt;lifted_op_closed &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''   ''(in '' finsupp '') '' &amp;lt;nowiki&amp;gt;lifted_op_closed&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ f:X \rightarrow M$,   $ g:X \rightarrow M$  '' shows '' $ f\oplus g : X\rightarrow M$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;a openedtip=&quot; FinSupp_ZF &quot; openedtext=&quot;FinSupp_def &quot; closedtip=&quot; FinSupp_ZF &quot; closedtext=&quot;FinSupp_def &quot; class=&quot;button&quot; title=&quot; FinSupp_ZF &quot; href=&quot;javascript:;&quot;&gt;FinSupp_def &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;Definition of &amp;lt;nowiki&amp;gt;FinSupp&amp;lt;/nowiki&amp;gt;:
$ FinSupp(X,G,A) \equiv  \{f \in  X\rightarrow G.\  Supp(f,G,A) \in  FinPow(X)\}$&quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt;&lt;br&gt;The neutral element of the lifted (pointwise) operation is the function equal zero everywhere. In the next lemma we show that this is a finitely supported function.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;   &lt;strong&gt;(in &lt;/strong&gt; finsupp &lt;strong&gt;) &lt;/strong&gt; &lt;span&gt;const_zero_fin_supp&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; TheNeutralElement(X\rightarrow M, \mathcal{A} ) \in  FinSupp(X,M,A)&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;monoidAsssum&lt;/span&gt; ,  &lt;span&gt;Group_ZF_2_1_L2&lt;/span&gt; ,  &lt;a openedtip=&quot; FinSupp_ZF &quot; openedtext=&quot;monoid0_valid &quot; closedtip=&quot; FinSupp_ZF &quot; closedtext=&quot;monoid0_valid &quot; class=&quot;button&quot; title=&quot; FinSupp_ZF &quot; href=&quot;javascript:;&quot;&gt;monoid0_valid &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''   ''(in '' finsupp '') '' &amp;lt;nowiki&amp;gt;monoid0_valid&amp;lt;/nowiki&amp;gt;:  '' shows '' $ monoid0(M,A)$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;a openedtip=&quot; Monoid_ZF &quot; openedtext=&quot;unit_is_neutral &quot; closedtip=&quot; Monoid_ZF &quot; closedtext=&quot;unit_is_neutral &quot; class=&quot;button&quot; title=&quot; Monoid_ZF &quot; href=&quot;javascript:;&quot;&gt;unit_is_neutral &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''   ''(in '' monoid0 '') '' &amp;lt;nowiki&amp;gt;unit_is_neutral&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ e = TheNeutralElement(G,f)$  '' shows '' $ e \in  G \wedge  (\forall g\in G.\  e \oplus  g = g \wedge  g \oplus  e = g)$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;span&gt;func1_3_L1&lt;/span&gt; ,  &lt;span&gt;func1_3_L2&lt;/span&gt; ,  &lt;span&gt;func1_1_L1&lt;/span&gt; ,  &lt;a openedtip=&quot; FinSupp_ZF &quot; openedtext=&quot;Supp_def &quot; closedtip=&quot; FinSupp_ZF &quot; closedtext=&quot;Supp_def &quot; class=&quot;button&quot; title=&quot; FinSupp_ZF &quot; href=&quot;javascript:;&quot;&gt;Supp_def &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;Definition of &amp;lt;nowiki&amp;gt;Supp&amp;lt;/nowiki&amp;gt;:
$ Supp(f,G,A) \equiv  \{x \in  domain(f).\  f(x) \neq  TheNeutralElement(G,A)\}$&quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;a openedtip=&quot; Finite_ZF &quot; openedtext=&quot;empty_in_finpow &quot; closedtip=&quot; Finite_ZF &quot; closedtext=&quot;empty_in_finpow &quot; class=&quot;button&quot; title=&quot; Finite_ZF &quot; href=&quot;javascript:;&quot;&gt;empty_in_finpow &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;empty_in_finpow&amp;lt;/nowiki&amp;gt;:  '' shows '' $ 0 \in  FinPow(X)$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;a openedtip=&quot; FinSupp_ZF &quot; openedtext=&quot;FinSupp_def &quot; closedtip=&quot; FinSupp_ZF &quot; closedtext=&quot;FinSupp_def &quot; class=&quot;button&quot; title=&quot; FinSupp_ZF &quot; href=&quot;javascript:;&quot;&gt;FinSupp_def &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;Definition of &amp;lt;nowiki&amp;gt;FinSupp&amp;lt;/nowiki&amp;gt;:
$ FinSupp(X,G,A) \equiv  \{f \in  X\rightarrow G.\  Supp(f,G,A) \in  FinPow(X)\}$&quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt;&lt;br&gt; &lt;strong&gt;end&lt;br&gt;&lt;br&gt;&lt;/strong&gt; &lt;h1&gt;&lt;a openedtip=&quot;click to add comment&quot; openedtext=&quot;Comments on FinSupp_ZF&quot; closedtip=&quot;click to add comment&quot; closedtext=&quot;Comments on FinSupp_ZF&quot; title=&quot;click to add comment&quot; href=&quot;javascript:;&quot;&gt;Comments on FinSupp_ZF&lt;/a&gt;&lt;/h1&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;span&gt; &lt;div&gt; &lt;iframe style=&quot;width: 60%; height: 500px;&quot; src=&quot;http://www.haloscan.com/comments/slawekk/FinSupp_ZF&quot;&gt;&lt;/iframe&gt; &lt;/div&gt; &lt;/span&gt;&lt;/div&gt; &lt;br&gt;</description>
<link>http://formalmath.tiddlyspot.com#FinSupp_ZF</link>
<pubDate>Thu, 03 Jul 2008 00:09:00 GMT</pubDate>
</item>
<item>
<title>Group_ZF_1b</title>
<description> &lt;strong&gt;theory&lt;/strong&gt; &lt;a tiddlylink=&quot;Group_ZF_1b&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Group_ZF_1b&quot; href=&quot;http://formalmath.tiddlyspot.com#Group_ZF_1b&quot; class=&quot;externalLink&quot;&gt;Group_ZF_1b&lt;/a&gt; &lt;strong&gt;imports&lt;/strong&gt; &lt;a tiddlylink=&quot;Group_ZF&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Group_ZF&quot; href=&quot;http://formalmath.tiddlyspot.com#Group_ZF&quot; class=&quot;externalLink&quot;&gt;Group_ZF&lt;/a&gt;&lt;br&gt;&lt;br&gt; &lt;strong&gt;begin&lt;br&gt;&lt;/strong&gt; &lt;br&gt;In a typical textbook a group is defined as a set &lt;span class=&quot;math&quot;&gt;G&lt;/span&gt; with an associative operation such that two conditions hold: A: there is an element &lt;span class=&quot;math&quot;&gt;e\in G&lt;/span&gt; such that for all &lt;span class=&quot;math&quot;&gt;g\in G&lt;/span&gt; we have &lt;span class=&quot;math&quot;&gt;e\cdot g = g&lt;/span&gt; and &lt;span class=&quot;math&quot;&gt;g\cdot e =g&lt;/span&gt;. We call this element a &quot;unit&quot; or a &quot;neutral element&quot; of the group.&lt;br&gt;B: for every &lt;span class=&quot;math&quot;&gt;a\in G&lt;/span&gt; there exists a &lt;span class=&quot;math&quot;&gt;b\in G&lt;/span&gt; such that &lt;span class=&quot;math&quot;&gt;a\cdot b = e&lt;/span&gt;, where &lt;span class=&quot;math&quot;&gt;e&lt;/span&gt; is the element of &lt;span class=&quot;math&quot;&gt;G&lt;/span&gt; whose existence is guaranteed by A. The validity of this definition is rather dubious to me, as condition A does not define any specific element &lt;span class=&quot;math&quot;&gt;e&lt;/span&gt; that can be referred to in condition B - it merely states that a set of such units &lt;span class=&quot;math&quot;&gt;e&lt;/span&gt; is not empty. Of course it does work in the end as we can prove that the set of such neutral elements has exactly one element, but still the definition by itself is not valid. You just can't reference a variable bound by a quantifier outside of the scope of that quantifier.&lt;br&gt;One way around this is to first use condition A to define the notion of a monoid, then prove the uniqueness of &lt;span class=&quot;math&quot;&gt;e&lt;/span&gt; and then use the condition B to define groups. Another way is to write conditions A and B together as follows: &lt;div class=&quot;math&quot;&gt;\exists_{e \in G} \ (\forall_{g \in G} \ e\cdot g = g \wedge g\cdot e = g) \wedge (\forall_{a\in G}\exists_{b\in G}\ a\cdot b = e).&lt;/div&gt; This is rather ugly. What I want to talk about is an amusing way to define groups directly without any reference to the neutral elements. Namely, we can define a group as a non-empty set &lt;span class=&quot;math&quot;&gt;G&lt;/span&gt; with an associative operation &quot;&lt;span class=&quot;math&quot;&gt;\cdot &lt;/span&gt;&quot; such that&lt;br&gt;C: for every &lt;span class=&quot;math&quot;&gt;a,b\in G&lt;/span&gt; the equations &lt;span class=&quot;math&quot;&gt;a\cdot x = b&lt;/span&gt; and &lt;span class=&quot;math&quot;&gt;y\cdot a = b&lt;/span&gt; can be solved in &lt;span class=&quot;math&quot;&gt;G&lt;/span&gt;.&lt;br&gt;This theory file aims at proving the equivalence of this alternative definition with the usual definition of the group, as formulated in &lt;em&gt;&lt;a tiddlylink=&quot;Group_ZF&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Group_ZF&quot; href=&quot;http://formalmath.tiddlyspot.com#Group_ZF&quot; class=&quot;externalLink&quot;&gt;Group_ZF&lt;/a&gt;.thy&lt;/em&gt;. The informal proofs come from an Aug. 14, 2005 post by buli on the matematyka.org forum.&lt;br&gt;&lt;br&gt;&lt;h1&gt;An alternative definition of group&lt;/h1&gt;&lt;br&gt;First we will define notation for writing about groups.&lt;br&gt;&lt;br&gt;We will use the multiplicative notation for the group operation. To do this, we define a context (locale) that tells Isabelle to interpret &lt;span class=&quot;math&quot;&gt;a\cdot b&lt;/span&gt; as the value of function &lt;span class=&quot;math&quot;&gt;P&lt;/span&gt; on the pair &lt;span class=&quot;math&quot;&gt;\langle a,b \rangle&lt;/span&gt;.&lt;br&gt;&lt;br&gt; &lt;strong&gt;Locale &lt;/strong&gt; group2&lt;br&gt; &lt;strong&gt;fixes &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; P&lt;/span&gt;, &lt;br&gt; &lt;strong&gt;fixes &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; dot&lt;/span&gt;, &lt;br&gt; &lt;strong&gt;defines &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; a \cdot  b \equiv  P\langle a,b\rangle &lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;The next theorem states that a set &lt;span class=&quot;math&quot;&gt;G&lt;/span&gt; with an associative operation that satisfies condition C is a group, as defined in &lt;a tiddlylink=&quot;IsarMathLib&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#IsarMathLib&quot; href=&quot;http://formalmath.tiddlyspot.com#IsarMathLib&quot; class=&quot;externalLink&quot;&gt;IsarMathLib&lt;/a&gt; &lt;em&gt;&lt;a tiddlylink=&quot;Group_ZF&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Group_ZF&quot; href=&quot;http://formalmath.tiddlyspot.com#Group_ZF&quot; class=&quot;externalLink&quot;&gt;Group_ZF&lt;/a&gt;&lt;/em&gt; theory.&lt;br&gt;&lt;br&gt; &lt;strong&gt;theorem&lt;/strong&gt;   &lt;strong&gt;(in &lt;/strong&gt; group2 &lt;strong&gt;) &lt;/strong&gt; &lt;span&gt;altgroup_is_group&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; A1: &lt;span class=&quot;math&quot;&gt; G\neq 0&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A2: &lt;span class=&quot;math&quot;&gt; P \text{ is associative on } G&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A3: &lt;span class=&quot;math&quot;&gt; \forall a\in G.\ \forall b\in G.\  \exists x\in G.\  a\cdot x = b&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A4: &lt;span class=&quot;math&quot;&gt; \forall a\in G.\ \forall b\in G.\  \exists y\in G.\  y\cdot a = b&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; \text{IsAgroup}(G,P)&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;from &lt;/strong&gt; A1  &lt;strong&gt;obtain &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; a&lt;/span&gt; &lt;strong&gt;where &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; a\in G&lt;/span&gt; &lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A3  &lt;strong&gt;obtain &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; x&lt;/span&gt; &lt;strong&gt;where &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; x\in G&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; a\cdot x = a&lt;/span&gt; &lt;br&gt; &lt;strong&gt;from &lt;/strong&gt; A4, &lt;span class=&quot;math&quot;&gt; a\in G&lt;/span&gt;  &lt;strong&gt;obtain &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; y&lt;/span&gt; &lt;strong&gt;where &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; y\in G&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; y\cdot a = a&lt;/span&gt; &lt;br&gt; &lt;strong&gt;have&lt;/strong&gt;  I: &lt;span class=&quot;math&quot;&gt; \forall b\in G.\  b = b\cdot x \wedge  b = y\cdot b&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;fix &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; b&lt;/span&gt;&lt;br&gt; &lt;strong&gt;assume &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; b\in G&lt;/span&gt;&lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A4, &lt;span class=&quot;math&quot;&gt; a\in G&lt;/span&gt;  &lt;strong&gt;obtain &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; y_b&lt;/span&gt; &lt;strong&gt;where &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; y_b\in G&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; y_b\cdot a = b&lt;/span&gt; &lt;br&gt; &lt;strong&gt;from &lt;/strong&gt; A3, &lt;span class=&quot;math&quot;&gt; a\in G&lt;/span&gt;, &lt;span class=&quot;math&quot;&gt; b\in G&lt;/span&gt;  &lt;strong&gt;obtain &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; x_b&lt;/span&gt; &lt;strong&gt;where &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; x_b\in G&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; a\cdot x_b = b&lt;/span&gt; &lt;br&gt; &lt;strong&gt;from &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; a\cdot x = a&lt;/span&gt;, &lt;span class=&quot;math&quot;&gt; y\cdot a = a&lt;/span&gt;, &lt;span class=&quot;math&quot;&gt; y_b\cdot a = b&lt;/span&gt;, &lt;span class=&quot;math&quot;&gt; a\cdot x_b = b&lt;/span&gt;  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; b = y_b\cdot (a\cdot x)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; b = (y\cdot a)\cdot x_b&lt;/span&gt; &lt;br&gt; &lt;strong&gt;moreover&lt;/strong&gt;   &lt;strong&gt;from &lt;/strong&gt; A2, &lt;span class=&quot;math&quot;&gt; a\in G&lt;/span&gt;, &lt;span class=&quot;math&quot;&gt; x\in G&lt;/span&gt;, &lt;span class=&quot;math&quot;&gt; y\in G&lt;/span&gt;, &lt;span class=&quot;math&quot;&gt; x_b\in G&lt;/span&gt;, &lt;span class=&quot;math&quot;&gt; y_b\in G&lt;/span&gt;  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; (y\cdot a)\cdot x_b = y\cdot (a\cdot x_b)&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; y_b\cdot (a\cdot x) = (y_b\cdot a)\cdot x&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; func_ZF &quot; openedtext=&quot;IsAssociative_def &quot; closedtip=&quot; func_ZF &quot; closedtext=&quot;IsAssociative_def &quot; class=&quot;button&quot; title=&quot; func_ZF &quot; href=&quot;javascript:;&quot;&gt;IsAssociative_def &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;Definition of &amp;lt;nowiki&amp;gt;IsAssociative&amp;lt;/nowiki&amp;gt;:
$ P \text{ is associative on } G \equiv  P : G\times G\rightarrow G \wedge  $
$  (\forall  x \in  G.\  \forall  y \in  G.\  \forall  z \in  G.\  $
$  ( P(\langle P(\langle x,y\rangle ),z\rangle ) = P( \langle x,P(\langle y,z\rangle )\rangle  )))$&quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;moreover&lt;/strong&gt;   &lt;strong&gt;from &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; y_b\cdot a = b&lt;/span&gt;, &lt;span class=&quot;math&quot;&gt; a\cdot x_b = b&lt;/span&gt;  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; (y_b\cdot a)\cdot x = b\cdot x&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; y\cdot (a\cdot x_b) = y\cdot b&lt;/span&gt; &lt;br&gt; &lt;strong&gt;ultimately &lt;/strong&gt;  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; b = b\cdot x \wedge  b = y\cdot b&lt;/span&gt; &lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;moreover&lt;/strong&gt;   &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; x = y&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;from &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; x\in G&lt;/span&gt;, I  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; x = y\cdot x&lt;/span&gt; &lt;br&gt; &lt;strong&gt;also&lt;/strong&gt;   &lt;strong&gt;from &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; y\in G&lt;/span&gt;, I  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; y\cdot x = y&lt;/span&gt; &lt;br&gt; &lt;strong&gt;finally &lt;/strong&gt;  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; x = y&lt;/span&gt; &lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;ultimately &lt;/strong&gt;  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \forall b\in G.\  b\cdot x = b \wedge  x\cdot b = b&lt;/span&gt; &lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A2, &lt;span class=&quot;math&quot;&gt; x\in G&lt;/span&gt;  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \text{IsAmonoid}(G,P)&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; Monoid_ZF &quot; openedtext=&quot;IsAmonoid_def &quot; closedtip=&quot; Monoid_ZF &quot; closedtext=&quot;IsAmonoid_def &quot; class=&quot;button&quot; title=&quot; Monoid_ZF &quot; href=&quot;javascript:;&quot;&gt;IsAmonoid_def &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;Definition of &amp;lt;nowiki&amp;gt;IsAmonoid&amp;lt;/nowiki&amp;gt;:
$ \text{IsAmonoid}(G,f) \equiv $
$  f \text{ is associative on } G \wedge  $
$  (\exists e\in G.\  (\forall  g\in G.\  ( (f(\langle e,g\rangle ) = g) \wedge  (f(\langle g,e\rangle ) = g))))$&quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A3  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \text{IsAgroup}(G,P)&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;monoid0_def&lt;/span&gt; ,  &lt;a openedtip=&quot; Monoid_ZF &quot; openedtext=&quot;unit_is_neutral &quot; closedtip=&quot; Monoid_ZF &quot; closedtext=&quot;unit_is_neutral &quot; class=&quot;button&quot; title=&quot; Monoid_ZF &quot; href=&quot;javascript:;&quot;&gt;unit_is_neutral &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''   ''(in '' monoid0 '') '' &amp;lt;nowiki&amp;gt;unit_is_neutral&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ e = TheNeutralElement(G,f)$  '' shows '' $ e \in  G \wedge  (\forall g\in G.\  e \oplus  g = g \wedge  g \oplus  e = g)$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;a openedtip=&quot; Group_ZF &quot; openedtext=&quot;IsAgroup_def &quot; closedtip=&quot; Group_ZF &quot; closedtext=&quot;IsAgroup_def &quot; class=&quot;button&quot; title=&quot; Group_ZF &quot; href=&quot;javascript:;&quot;&gt;IsAgroup_def &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;Definition of &amp;lt;nowiki&amp;gt;IsAgroup&amp;lt;/nowiki&amp;gt;:
$ \text{IsAgroup}(G,f) \equiv  $
$  (\text{IsAmonoid}(G,f) \wedge  (\forall g\in G.\  \exists b\in G.\  f\langle g,b\rangle  = TheNeutralElement(G,f)))$&quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt;&lt;br&gt;The converse of &lt;em&gt;altgroup_is_group&lt;/em&gt;: in every (classically defined) group condition C holds. In informal mathematics we can say &quot;Obviously condition C holds in any group.&quot; In formalized mathematics the word &quot;obviously&quot; is not in the language. The next theorem is proven in the context called &lt;em&gt;group0&lt;/em&gt; defined in the theory &lt;em&gt;&lt;a tiddlylink=&quot;Group_ZF&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#Group_ZF&quot; href=&quot;http://formalmath.tiddlyspot.com#Group_ZF&quot; class=&quot;externalLink&quot;&gt;Group_ZF&lt;/a&gt;.thy&lt;/em&gt;. Similarly to the &lt;em&gt;group2&lt;/em&gt; that context defines &lt;span class=&quot;math&quot;&gt;a\cdot b&lt;/span&gt; as &lt;span class=&quot;math&quot;&gt;P\langle a,b\rangle&lt;/span&gt; It also defines notation related to the group inverse and adds an assumption that the pair &lt;span class=&quot;math&quot;&gt;(G,P)&lt;/span&gt; is a group to all its theorems. This is why in the next theorem we don't explicitely assume that &lt;span class=&quot;math&quot;&gt;(G,P)&lt;/span&gt; is a group - this assumption is implicit in the context.&lt;br&gt;&lt;br&gt; &lt;strong&gt;theorem&lt;/strong&gt;   &lt;strong&gt;(in &lt;/strong&gt; group0 &lt;strong&gt;) &lt;/strong&gt; &lt;span&gt;group_is_altgroup&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; \forall a\in G.\ \forall b\in G.\  \exists x\in G.\  a\cdot x = b&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; \forall a\in G.\ \forall b\in G.\  \exists y\in G.\  y\cdot a = b&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;{ &lt;/strong&gt;  &lt;strong&gt;fix &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; a&lt;/span&gt; &lt;span class=&quot;math&quot;&gt; b&lt;/span&gt;&lt;br&gt; &lt;strong&gt;assume &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; a\in G&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; b\in G&lt;/span&gt;&lt;br&gt; &lt;strong&gt;let &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; x = a^{-1}\cdot  b&lt;/span&gt;&lt;br&gt; &lt;strong&gt;let &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; y = b\cdot a^{-1}&lt;/span&gt;&lt;br&gt; &lt;strong&gt;from &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; a\in G&lt;/span&gt;, &lt;span class=&quot;math&quot;&gt; b\in G&lt;/span&gt;  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; x \in  G&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; y \in  G&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; a\cdot x = b&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; y\cdot a = b&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; Group_ZF &quot; openedtext=&quot;inverse_in_group &quot; closedtip=&quot; Group_ZF &quot; closedtext=&quot;inverse_in_group &quot; class=&quot;button&quot; title=&quot; Group_ZF &quot; href=&quot;javascript:;&quot;&gt;inverse_in_group &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''   ''(in '' group0 '') '' &amp;lt;nowiki&amp;gt;inverse_in_group&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ x\in G$  '' shows '' $ x^{-1}\in G$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;a openedtip=&quot; Group_ZF &quot; openedtext=&quot;group_op_closed &quot; closedtip=&quot; Group_ZF &quot; closedtext=&quot;group_op_closed &quot; class=&quot;button&quot; title=&quot; Group_ZF &quot; href=&quot;javascript:;&quot;&gt;group_op_closed &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''   ''(in '' group0 '') '' &amp;lt;nowiki&amp;gt;group_op_closed&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ a\in G$,   $ b\in G$  '' shows '' $ a\cdot b \in  G$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;a openedtip=&quot; Group_ZF &quot; openedtext=&quot;inv_cancel_two &quot; closedtip=&quot; Group_ZF &quot; closedtext=&quot;inv_cancel_two &quot; class=&quot;button&quot; title=&quot; Group_ZF &quot; href=&quot;javascript:;&quot;&gt;inv_cancel_two &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''   ''(in '' group0 '') '' &amp;lt;nowiki&amp;gt;inv_cancel_two&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ a\in G$,   $ b\in G$  '' shows '' $ a\cdot b^{-1}\cdot b = a$,  
$ a\cdot b\cdot b^{-1} = a$,   $ a^{-1}\cdot (a\cdot b) = b$,   $ a\cdot (a^{-1}\cdot b) = b$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;hence&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \exists x\in G.\  a\cdot x = b&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; \exists y\in G.\  y\cdot a = b&lt;/span&gt;&lt;br&gt; &lt;strong&gt; }&lt;/strong&gt; &lt;br&gt; &lt;strong&gt;thus&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \forall a\in G.\ \forall b\in G.\  \exists x\in G.\  a\cdot x = b&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; \forall a\in G.\ \forall b\in G.\  \exists y\in G.\  y\cdot a = b&lt;/span&gt;&lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt;&lt;br&gt; &lt;strong&gt;end&lt;br&gt;&lt;br&gt;&lt;/strong&gt; &lt;h1&gt;&lt;a openedtip=&quot;click to add comment&quot; openedtext=&quot;Comments on Group_ZF_1b&quot; closedtip=&quot;click to add comment&quot; closedtext=&quot;Comments on Group_ZF_1b&quot; title=&quot;click to add comment&quot; href=&quot;javascript:;&quot;&gt;Comments on Group_ZF_1b&lt;/a&gt;&lt;/h1&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;span&gt; &lt;div&gt; &lt;iframe style=&quot;width: 60%; height: 500px;&quot; src=&quot;http://www.haloscan.com/comments/slawekk/Group_ZF_1b&quot;&gt;&lt;/iframe&gt; &lt;/div&gt; &lt;/span&gt;&lt;/div&gt; &lt;br&gt;</description>
<link>http://formalmath.tiddlyspot.com#Group_ZF_1b</link>
<pubDate>Wed, 18 Jun 2008 01:04:00 GMT</pubDate>
</item>
<item>
<title>EquivClass1</title>
<description> &lt;strong&gt;theory&lt;/strong&gt; &lt;a tiddlylink=&quot;EquivClass1&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#EquivClass1&quot; href=&quot;http://formalmath.tiddlyspot.com#EquivClass1&quot; class=&quot;externalLink&quot;&gt;EquivClass1&lt;/a&gt; &lt;strong&gt;imports&lt;/strong&gt; &lt;a tiddlylink=&quot;EquivClass&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#EquivClass&quot; href=&quot;http://formalmath.tiddlyspot.com#EquivClass&quot; class=&quot;externalLink&quot;&gt;EquivClass&lt;/a&gt; &lt;a tiddlylink=&quot;func_ZF&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#func_ZF&quot; href=&quot;http://formalmath.tiddlyspot.com#func_ZF&quot; class=&quot;externalLink&quot;&gt;func_ZF&lt;/a&gt; &lt;a tiddlylink=&quot;ZF1&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#ZF1&quot; href=&quot;http://formalmath.tiddlyspot.com#ZF1&quot; class=&quot;externalLink&quot;&gt;ZF1&lt;/a&gt;&lt;br&gt;&lt;br&gt; &lt;strong&gt;begin&lt;br&gt;&lt;/strong&gt; &lt;br&gt;In this theory file we extend the work on equivalence relations done in the standard Isabelle's &lt;a tiddlylink=&quot;EquivClass&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#EquivClass&quot; href=&quot;http://formalmath.tiddlyspot.com#EquivClass&quot; class=&quot;externalLink&quot;&gt;EquivClass&lt;/a&gt; theory. That development is very good and all, but we really would prefer an approach contained within the a standard ZF set theory, without extensions specific to Isabelle. That is why this theory is written.&lt;br&gt;&lt;br&gt;&lt;h1&gt;Congruent functions and projections on the quotient&lt;/h1&gt;&lt;br&gt;Suppose we have a set &lt;span class=&quot;math&quot;&gt;X&lt;/span&gt; with a relation &lt;span class=&quot;math&quot;&gt;r\subseteq X\times X&lt;/span&gt; and a function &lt;span class=&quot;math&quot;&gt;f: X\rightarrow X&lt;/span&gt;. The function &lt;span class=&quot;math&quot;&gt;f&lt;/span&gt; can be compatible (congruent) with &lt;span class=&quot;math&quot;&gt;r&lt;/span&gt; in the sense that if two elements &lt;span class=&quot;math&quot;&gt;x,y&lt;/span&gt; are related then the values &lt;span class=&quot;math&quot;&gt;f(x), f(x)&lt;/span&gt; are also related. This is especially useful if &lt;span class=&quot;math&quot;&gt;r&lt;/span&gt; is an equivalence relation as it allows to &quot;project&quot; the function to the quotient space &lt;span class=&quot;math&quot;&gt;X/r&lt;/span&gt; (the set of equivalence classes of &lt;span class=&quot;math&quot;&gt;r&lt;/span&gt;) and create a new function &lt;span class=&quot;math&quot;&gt;F&lt;/span&gt; that satifies the formula &lt;span class=&quot;math&quot;&gt;F([x]_r) = [f(x)]_r&lt;/span&gt;. When &lt;span class=&quot;math&quot;&gt;f&lt;/span&gt; is congruent with respect to &lt;span class=&quot;math&quot;&gt;r&lt;/span&gt; such definition of the value of &lt;span class=&quot;math&quot;&gt;F&lt;/span&gt; on the equivalence class &lt;span class=&quot;math&quot;&gt;[x]_r&lt;/span&gt; does not depend on which &lt;span class=&quot;math&quot;&gt;x&lt;/span&gt; we choose to represent the class. In this section we also consider binary operations that are congruent with respect to a relation. These are important in algebra - the congruency condition allows to project the operation to obtain the operation on the quotient space.&lt;br&gt;&lt;br&gt;First we define the notion of function that maps equivalent elements to equivalent values. We use similar names as in the Isabelle's standard &lt;em&gt;&lt;a tiddlylink=&quot;EquivClass&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#EquivClass&quot; href=&quot;http://formalmath.tiddlyspot.com#EquivClass&quot; class=&quot;externalLink&quot;&gt;EquivClass&lt;/a&gt;&lt;/em&gt; theory to indicate the conceptual correspondence of the notions.&lt;br&gt;&lt;br&gt; &lt;strong&gt;Definition&lt;br&gt;&lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; Congruent(r,f) \equiv &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;math&quot;&gt;  (\forall x y.\  \langle x,y\rangle  \in  r  \longrightarrow  \langle f(x),f(y)\rangle  \in  r)&lt;/span&gt;&lt;br&gt;&lt;br&gt;Now we will define the projection of a function onto the quotient space. In standard math the equivalence class of &lt;span class=&quot;math&quot;&gt;x&lt;/span&gt; with respect to relation &lt;span class=&quot;math&quot;&gt;r&lt;/span&gt; is usually denoted &lt;span class=&quot;math&quot;&gt;[x]_r&lt;/span&gt;. Here we reuse notation &lt;span class=&quot;math&quot;&gt;r\{ x\}&lt;/span&gt; instead. This means the image of the set &lt;span class=&quot;math&quot;&gt;\{ x\}&lt;/span&gt; with respect to the relation, which, for equivalence relations is exactly its equivalence class if you think about it.&lt;br&gt;&lt;br&gt; &lt;strong&gt;Definition&lt;br&gt;&lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; ProjFun(A,r,f) \equiv &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;math&quot;&gt;  \{\langle c,\bigcup x\in c.\  r\{f(x)\}\rangle .\  c \in  (A//r)\}&lt;/span&gt;&lt;br&gt;&lt;br&gt;Elements of equivalence classes belong to the set.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;  &lt;span&gt;EquivClass_1_L1&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; A1: &lt;span class=&quot;math&quot;&gt; equiv(A,r)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A2: &lt;span class=&quot;math&quot;&gt; C \in  A//r&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A3: &lt;span class=&quot;math&quot;&gt; x\in C&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; x\in A&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;from &lt;/strong&gt; A2  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; C \subseteq  \bigcup  (A//r)&lt;/span&gt; &lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A1, A3  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; x\in A&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;Union_quotient&lt;/span&gt;&lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt;&lt;br&gt;The image of a subset of &lt;span class=&quot;math&quot;&gt;X&lt;/span&gt; under projection is a subset of &lt;span class=&quot;math&quot;&gt;A/r&lt;/span&gt;.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;  &lt;span&gt;EquivClass_1_L1A&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; A\subseteq X&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; \{r\{x\}.\  x\in A\} \subseteq  X//r&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;prems&lt;/span&gt; ,  &lt;span&gt;quotientI&lt;/span&gt;&lt;br&gt;&lt;br&gt;If an element belongs to an equivalence class, then its image under relation is this equivalence class.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;  &lt;span&gt;EquivClass_1_L2&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; A1: &lt;span class=&quot;math&quot;&gt; equiv(A,r)&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; C \in  A//r&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A2: &lt;span class=&quot;math&quot;&gt; x\in C&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; r\{x\} = C&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;from &lt;/strong&gt; A1, A2  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; x \in  r\{x\}&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L1 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L1 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L1 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L1&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$  ''and'' $ C \in  A//r$  ''and'' $ x\in C$  '' shows '' $ x\in A$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;span&gt;equiv_class_self&lt;/span&gt;&lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A2  &lt;strong&gt;have&lt;/strong&gt;  I: &lt;span class=&quot;math&quot;&gt; r\{x\}\cap C \neq  0&lt;/span&gt; &lt;br&gt; &lt;strong&gt;from &lt;/strong&gt; A1, A2  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; r\{x\} \in  A//r&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L1 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L1 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L1 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L1&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$  ''and'' $ C \in  A//r$  ''and'' $ x\in C$  '' shows '' $ x\in A$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;span&gt;quotientI&lt;/span&gt;&lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A1, I  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; thesis&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;quotient_disj&lt;/span&gt;&lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt;&lt;br&gt;Elements that belong to the same equivalence class are equivalent.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;  &lt;span&gt;EquivClass_1_L2A&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; equiv(A,r)&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; C \in  A//r&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; x\in C&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; y\in C&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; \langle x,y\rangle  \in  r&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;assms&lt;/span&gt; ,  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L2 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L2 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L2 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L2&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$,   $ C \in  A//r$  ''and'' $ x\in C$  '' shows '' $ r\{x\} = C$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L1 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L1 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L1 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L1&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$  ''and'' $ C \in  A//r$  ''and'' $ x\in C$  '' shows '' $ x\in A$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;span&gt;equiv_class_eq_iff&lt;/span&gt;&lt;br&gt;&lt;br&gt;Every &lt;span class=&quot;math&quot;&gt;x&lt;/span&gt; is in the class of &lt;span class=&quot;math&quot;&gt;y&lt;/span&gt;, then they are equivalent.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;  &lt;span&gt;EquivClass_1_L2B&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; A1: &lt;span class=&quot;math&quot;&gt; equiv(A,r)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A2: &lt;span class=&quot;math&quot;&gt; y\in A&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A3: &lt;span class=&quot;math&quot;&gt; x \in  r\{y\}&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; \langle x,y\rangle  \in  r&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;from &lt;/strong&gt; A2  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; r\{y\} \in  A//r&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;quotientI&lt;/span&gt;&lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A1, A3  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; thesis&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L1 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L1 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L1 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L1&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$  ''and'' $ C \in  A//r$  ''and'' $ x\in C$  '' shows '' $ x\in A$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;span&gt;equiv_class_self&lt;/span&gt; ,  &lt;span&gt;equiv_class_nondisjoint&lt;/span&gt;&lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt;&lt;br&gt;If a function is congruent then the equivalence classes of the values that come from the arguments from the same class are the same.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;  &lt;span&gt;EquivClass_1_L3&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; A1: &lt;span class=&quot;math&quot;&gt; equiv(A,r)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A2: &lt;span class=&quot;math&quot;&gt; Congruent(r,f)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A3: &lt;span class=&quot;math&quot;&gt; C \in  A//r&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; x\in C&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; y\in C&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; r\{f(x)\} = r\{f(y)\}&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;from &lt;/strong&gt; A1, A3  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \langle x,y\rangle  \in  r&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L2A &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L2A &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L2A &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L2A&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$,   $ C \in  A//r$,   $ x\in C$,   $ y\in C$  '' shows '' $ \langle x,y\rangle  \in  r$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A2  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \langle f(x),f(y)\rangle  \in  r&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;Congruent_def &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;Congruent_def &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;Congruent_def &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;Definition of &amp;lt;nowiki&amp;gt;Congruent&amp;lt;/nowiki&amp;gt;:
$ Congruent(r,f) \equiv $
$  (\forall x y.\  \langle x,y\rangle  \in  r  \longrightarrow  \langle f(x),f(y)\rangle  \in  r)$&quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A1  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; thesis&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;equiv_class_eq&lt;/span&gt;&lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt;&lt;br&gt;The values of congruent functions are in the space.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;  &lt;span&gt;EquivClass_1_L4&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; A1: &lt;span class=&quot;math&quot;&gt; equiv(A,r)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A2: &lt;span class=&quot;math&quot;&gt; C \in  A//r&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; x\in C&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A3: &lt;span class=&quot;math&quot;&gt; Congruent(r,f)&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; f(x) \in  A&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;from &lt;/strong&gt; A1, A2  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; x\in A&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L1 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L1 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L1 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L1&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$  ''and'' $ C \in  A//r$  ''and'' $ x\in C$  '' shows '' $ x\in A$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A1  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \langle x,x\rangle  \in  r&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;equiv_def&lt;/span&gt; ,  &lt;span&gt;refl_def&lt;/span&gt;&lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A3  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \langle f(x),f(x)\rangle  \in  r&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;Congruent_def &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;Congruent_def &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;Congruent_def &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;Definition of &amp;lt;nowiki&amp;gt;Congruent&amp;lt;/nowiki&amp;gt;:
$ Congruent(r,f) \equiv $
$  (\forall x y.\  \langle x,y\rangle  \in  r  \longrightarrow  \langle f(x),f(y)\rangle  \in  r)$&quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A1  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; thesis&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;equiv_type&lt;/span&gt;&lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt;&lt;br&gt;Equivalence classes are not empty.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;  &lt;span&gt;EquivClass_1_L5&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; A1: &lt;span class=&quot;math&quot;&gt; refl(A,r)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A2: &lt;span class=&quot;math&quot;&gt; C \in  A//r&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; C\neq 0&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;from &lt;/strong&gt; A2  &lt;strong&gt;obtain &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; x&lt;/span&gt; &lt;strong&gt;where &lt;/strong&gt; I: &lt;span class=&quot;math&quot;&gt; C = r\{x\}&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; x\in A&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;quotient_def&lt;/span&gt;&lt;br&gt; &lt;strong&gt;from &lt;/strong&gt; A1, &lt;span class=&quot;math&quot;&gt; x\in A&lt;/span&gt;  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; x \in  r\{x\}&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;refl_def&lt;/span&gt;&lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; I  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; thesis&lt;/span&gt; &lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt;&lt;br&gt;To avoid using an axiom of choice, we define the projection using the expression &lt;span class=&quot;math&quot;&gt;\bigcup _{x\in C} r(\{f(x)\})&lt;/span&gt;. The next lemma shows that for congruent function this is in the quotient space &lt;span class=&quot;math&quot;&gt;A/r&lt;/span&gt;.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;  &lt;span&gt;EquivClass_1_L6&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; A1: &lt;span class=&quot;math&quot;&gt; equiv(A,r)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A2: &lt;span class=&quot;math&quot;&gt; Congruent(r,f)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A3: &lt;span class=&quot;math&quot;&gt; C \in  A//r&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; (\bigcup x\in C.\  r\{f(x)\}) \in  A//r&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;from &lt;/strong&gt; A1  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; refl(A,r)&lt;/span&gt; &lt;strong&gt;unfolding&lt;/strong&gt;  &lt;span&gt;equiv_def&lt;/span&gt;&lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A3  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; C\neq 0&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L5 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L5 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L5 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L5&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ refl(A,r)$  ''and'' $ C \in  A//r$  '' shows '' $ C\neq 0$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;moreover&lt;/strong&gt;   &lt;strong&gt;from &lt;/strong&gt; A2, A3, A1  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \forall x\in C.\  r\{f(x)\} \in  A//r&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L4 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L4 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L4 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L4&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$  ''and'' $ C \in  A//r$,   $ x\in C$  ''and'' $ Congruent(r,f)$  '' shows '' $ f(x) \in  A$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;span&gt;quotientI&lt;/span&gt;&lt;br&gt; &lt;strong&gt;moreover&lt;/strong&gt;   &lt;strong&gt;from &lt;/strong&gt; A1, A2, A3  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \forall x y.\  x\in C \wedge  y\in C \longrightarrow  r\{f(x)\} = r\{f(y)\}&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L3 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L3 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L3 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L3&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$  ''and'' $ Congruent(r,f)$  ''and'' $ C \in  A//r$,   $ x\in C$,   $ y\in C$  '' shows '' $ r\{f(x)\} = r\{f(y)\}$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;ultimately &lt;/strong&gt;  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; thesis&lt;/span&gt; &lt;strong&gt;   by (rule &lt;/strong&gt; &lt;a openedtip=&quot; ZF1 &quot; openedtext=&quot;ZF1_1_L2 &quot; closedtip=&quot; ZF1 &quot; closedtext=&quot;ZF1_1_L2 &quot; class=&quot;button&quot; title=&quot; ZF1 &quot; href=&quot;javascript:;&quot;&gt;ZF1_1_L2 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;ZF1_1_L2&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ C\neq 0$  ''and'' $ \forall x\in C.\  b(x) \in  A$  ''and'' $ \forall x y.\  x\in C \wedge  y\in C \longrightarrow  b(x) = b(y)$  '' shows '' $ (\bigcup x\in C.\  b(x))\in A$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  &lt;strong&gt;)&lt;/strong&gt; &lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt;&lt;br&gt;Congruent functions can be projected.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;  &lt;span&gt;EquivClass_1_T0&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; equiv(A,r)&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; Congruent(r,f)&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; ProjFun(A,r,f) : A//r \rightarrow  A//r&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;assms&lt;/span&gt; ,  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L6 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L6 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L6 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L6&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$  ''and'' $ Congruent(r,f)$  ''and'' $ C \in  A//r$  '' shows '' $ (\bigcup x\in C.\  r\{f(x)\}) \in  A//r$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;ProjFun_def &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;ProjFun_def &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;ProjFun_def &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;Definition of &amp;lt;nowiki&amp;gt;ProjFun&amp;lt;/nowiki&amp;gt;:
$ ProjFun(A,r,f) \equiv $
$  \{\langle c,\bigcup x\in c.\  r\{f(x)\}\rangle .\  c \in  (A//r)\}$&quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;span&gt;ZF_fun_from_total&lt;/span&gt;&lt;br&gt;&lt;br&gt;We now define congruent functions of two variables (binary funtions). The predicate &lt;em&gt;Congruent2&lt;/em&gt; corresponds to &lt;em&gt;congruent2&lt;/em&gt; in Isabelle's standard &lt;em&gt;&lt;a tiddlylink=&quot;EquivClass&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#EquivClass&quot; href=&quot;http://formalmath.tiddlyspot.com#EquivClass&quot; class=&quot;externalLink&quot;&gt;EquivClass&lt;/a&gt;&lt;/em&gt; theory, but uses &lt;a tiddlylink=&quot;ZF-functions&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#ZF-functions&quot; href=&quot;http://formalmath.tiddlyspot.com#ZF-functions&quot; class=&quot;externalLink&quot;&gt;ZF-functions&lt;/a&gt; rather than meta-functions.&lt;br&gt;&lt;br&gt; &lt;strong&gt;Definition&lt;br&gt;&lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; Congruent2(r,f) \equiv &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;math&quot;&gt;  (\forall x_1 x_2 y_1 y_2.\  \langle x_1,x_2\rangle  \in  r \wedge  \langle y_1,y_2\rangle  \in  r  \longrightarrow  &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;math&quot;&gt;  \langle f\langle x_1,y_1\rangle , f\langle x_2,y_2\rangle  \rangle  \in  r)&lt;/span&gt;&lt;br&gt;&lt;br&gt;Next we define the notion of projecting a binary operation to the quotient space. This is a very important concept that allows to define quotient groups, among other things.&lt;br&gt;&lt;br&gt; &lt;strong&gt;Definition&lt;br&gt;&lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; ProjFun2(A,r,f) \equiv &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;math&quot;&gt;  \{\langle p,\bigcup  z \in  fst(p)\times snd(p).\  r\{f(z)\}\rangle .\  p \in  (A//r)\times (A//r) \}&lt;/span&gt;&lt;br&gt;&lt;br&gt;The following lemma is a two-variables equivalent of &lt;em&gt;&lt;a tiddlylink=&quot;EquivClass_1_L3&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#EquivClass_1_L3&quot; href=&quot;http://formalmath.tiddlyspot.com#EquivClass_1_L3&quot; class=&quot;externalLink&quot;&gt;EquivClass_1_L3&lt;/a&gt;&lt;/em&gt;.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;  &lt;span&gt;EquivClass_1_L7&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; A1: &lt;span class=&quot;math&quot;&gt; equiv(A,r)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A2: &lt;span class=&quot;math&quot;&gt; Congruent2(r,f)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A3: &lt;span class=&quot;math&quot;&gt; C_1 \in  A//r&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; C_2 \in  A//r&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A4: &lt;span class=&quot;math&quot;&gt; z_1 \in  C_1\times C_2&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; z_2 \in  C_1\times C_2&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; r\{f(z_1)\} = r\{f(z_2)\}&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;from &lt;/strong&gt; A4  &lt;strong&gt;obtain &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; x_1&lt;/span&gt; &lt;span class=&quot;math&quot;&gt; y_1&lt;/span&gt; &lt;span class=&quot;math&quot;&gt; x_2&lt;/span&gt; &lt;span class=&quot;math&quot;&gt; y_2&lt;/span&gt; &lt;strong&gt;where &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; x_1\in C_1&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; y_1\in C_2&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; z_1 = \langle x_1,y_1\rangle &lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; x_2\in C_1&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; y_2\in C_2&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; z_2 = \langle x_2,y_2\rangle &lt;/span&gt; &lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A1, A3  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \langle x_1,x_2\rangle  \in  r&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; \langle y_1,y_2\rangle  \in  r&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L2A &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L2A &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L2A &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L2A&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$,   $ C \in  A//r$,   $ x\in C$,   $ y\in C$  '' shows '' $ \langle x,y\rangle  \in  r$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A2  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \langle f\langle x_1,y_1\rangle ,f\langle x_2,y_2\rangle \rangle  \in  r&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;Congruent2_def &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;Congruent2_def &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;Congruent2_def &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;Definition of &amp;lt;nowiki&amp;gt;Congruent2&amp;lt;/nowiki&amp;gt;:
$ Congruent2(r,f) \equiv $
$  (\forall x_1 x_2 y_1 y_2.\  \langle x_1,x_2\rangle  \in  r \wedge  \langle y_1,y_2\rangle  \in  r  \longrightarrow  $
$  \langle f\langle x_1,y_1\rangle , f\langle x_2,y_2\rangle  \rangle  \in  r)$&quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A1, &lt;span class=&quot;math&quot;&gt; z_1 = \langle x_1,y_1\rangle &lt;/span&gt;, &lt;span class=&quot;math&quot;&gt; z_2 = \langle x_2,y_2\rangle &lt;/span&gt;  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; thesis&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;equiv_class_eq&lt;/span&gt;&lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt;&lt;br&gt;The values of congruent functions of two variables are in the space.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;  &lt;span&gt;EquivClass_1_L8&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; A1: &lt;span class=&quot;math&quot;&gt; equiv(A,r)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A2: &lt;span class=&quot;math&quot;&gt; C_1 \in  A//r&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A3: &lt;span class=&quot;math&quot;&gt; C_2 \in  A//r&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A4: &lt;span class=&quot;math&quot;&gt; z \in  C_1\times C_2&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A5: &lt;span class=&quot;math&quot;&gt; Congruent2(r,f)&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; f(z) \in  A&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;from &lt;/strong&gt; A4  &lt;strong&gt;obtain &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; x&lt;/span&gt; &lt;span class=&quot;math&quot;&gt; y&lt;/span&gt; &lt;strong&gt;where &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; x\in C_1&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; y\in C_2&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; z = \langle x,y\rangle &lt;/span&gt; &lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A1, A2, A3  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; x\in A&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; y\in A&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L1 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L1 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L1 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L1&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$  ''and'' $ C \in  A//r$  ''and'' $ x\in C$  '' shows '' $ x\in A$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A1, A4  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \langle x,x\rangle  \in  r&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; \langle y,y\rangle  \in  r&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;equiv_def&lt;/span&gt; ,  &lt;span&gt;refl_def&lt;/span&gt;&lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A5  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \langle f\langle x,y\rangle , f\langle x,y\rangle  \rangle  \in  r&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;Congruent2_def &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;Congruent2_def &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;Congruent2_def &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;Definition of &amp;lt;nowiki&amp;gt;Congruent2&amp;lt;/nowiki&amp;gt;:
$ Congruent2(r,f) \equiv $
$  (\forall x_1 x_2 y_1 y_2.\  \langle x_1,x_2\rangle  \in  r \wedge  \langle y_1,y_2\rangle  \in  r  \longrightarrow  $
$  \langle f\langle x_1,y_1\rangle , f\langle x_2,y_2\rangle  \rangle  \in  r)$&quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A1, &lt;span class=&quot;math&quot;&gt; z = \langle x,y\rangle &lt;/span&gt;  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; thesis&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;equiv_type&lt;/span&gt;&lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt;&lt;br&gt;The values of congruent functions are in the space. Note that although this lemma is intended to be used with functions, we don't need to assume that we &lt;span class=&quot;math&quot;&gt;f&lt;/span&gt; is a function.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;  &lt;span&gt;EquivClass_1_L8A&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; A1: &lt;span class=&quot;math&quot;&gt; equiv(A,r)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A2: &lt;span class=&quot;math&quot;&gt; x\in A&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; y\in A&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A3: &lt;span class=&quot;math&quot;&gt; Congruent2(r,f)&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; f\langle x,y\rangle  \in  A&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;from &lt;/strong&gt; A1, A2  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; r\{x\} \in  A//r&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; r\{y\} \in  A//r&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; \langle x,y\rangle  \in  r\{x\}\times r\{y\}&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;equiv_class_self&lt;/span&gt; ,  &lt;span&gt;quotientI&lt;/span&gt;&lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A1, A3  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; thesis&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L8 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L8 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L8 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L8&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$  ''and'' $ C_1 \in  A//r$  ''and'' $ C_2 \in  A//r$  ''and'' $ z \in  C_1\times C_2$  ''and'' $ Congruent2(r,f)$  '' shows '' $ f(z) \in  A$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt;&lt;br&gt;The following lemma is a two-variables equivalent of &lt;em&gt;&lt;a tiddlylink=&quot;EquivClass_1_L6&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#EquivClass_1_L6&quot; href=&quot;http://formalmath.tiddlyspot.com#EquivClass_1_L6&quot; class=&quot;externalLink&quot;&gt;EquivClass_1_L6&lt;/a&gt;&lt;/em&gt;.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;  &lt;span&gt;EquivClass_1_L9&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; A1: &lt;span class=&quot;math&quot;&gt; equiv(A,r)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A2: &lt;span class=&quot;math&quot;&gt; Congruent2(r,f)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A3: &lt;span class=&quot;math&quot;&gt; p \in  (A//r)\times (A//r)&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; (\bigcup  z \in  fst(p)\times snd(p).\  r\{f(z)\}) \in  A//r&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;from &lt;/strong&gt; A3  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; fst(p) \in  A//r&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; snd(p) \in  A//r&lt;/span&gt; &lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A1, A2  &lt;strong&gt;have&lt;/strong&gt;  I: &lt;span class=&quot;math&quot;&gt; \forall z \in  fst(p)\times snd(p).\  f(z) \in  A&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L8 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L8 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L8 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L8&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$  ''and'' $ C_1 \in  A//r$  ''and'' $ C_2 \in  A//r$  ''and'' $ z \in  C_1\times C_2$  ''and'' $ Congruent2(r,f)$  '' shows '' $ f(z) \in  A$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;from &lt;/strong&gt; A3, A1  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; fst(p)\times snd(p) \neq  0&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;equiv_def&lt;/span&gt; ,  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L5 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L5 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L5 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L5&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ refl(A,r)$  ''and'' $ C \in  A//r$  '' shows '' $ C\neq 0$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;span&gt;Sigma_empty_iff&lt;/span&gt;&lt;br&gt; &lt;strong&gt;moreover&lt;/strong&gt;   &lt;strong&gt;from &lt;/strong&gt; A1, I  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \forall z \in  fst(p)\times snd(p).\  r\{f(z)\} \in  A//r&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;quotientI&lt;/span&gt;&lt;br&gt; &lt;strong&gt;moreover&lt;/strong&gt;   &lt;strong&gt;from &lt;/strong&gt; A1, A2, &lt;span class=&quot;math&quot;&gt; fst(p) \in  A//r&lt;/span&gt;, &lt;span class=&quot;math&quot;&gt; snd(p) \in  A//r&lt;/span&gt;  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \forall z_1 z_2.\  z_1 \in  fst(p)\times snd(p) \wedge  z_2 \in  fst(p)\times snd(p) \longrightarrow  &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;math&quot;&gt;    r\{f(z_1)\} = r\{f(z_2)\}&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L7 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L7 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L7 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L7&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$  ''and'' $ Congruent2(r,f)$  ''and'' $ C_1 \in  A//r$,   $ C_2 \in  A//r$  ''and'' $ z_1 \in  C_1\times C_2$,   $ z_2 \in  C_1\times C_2$  '' shows '' $ r\{f(z_1)\} = r\{f(z_2)\}$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;ultimately &lt;/strong&gt;  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; thesis&lt;/span&gt; &lt;strong&gt;   by (rule &lt;/strong&gt; &lt;a openedtip=&quot; ZF1 &quot; openedtext=&quot;ZF1_1_L2 &quot; closedtip=&quot; ZF1 &quot; closedtext=&quot;ZF1_1_L2 &quot; class=&quot;button&quot; title=&quot; ZF1 &quot; href=&quot;javascript:;&quot;&gt;ZF1_1_L2 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;ZF1_1_L2&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ C\neq 0$  ''and'' $ \forall x\in C.\  b(x) \in  A$  ''and'' $ \forall x y.\  x\in C \wedge  y\in C \longrightarrow  b(x) = b(y)$  '' shows '' $ (\bigcup x\in C.\  b(x))\in A$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  &lt;strong&gt;)&lt;/strong&gt; &lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt;&lt;br&gt;Congruent functions of two variables can be projected.&lt;br&gt;&lt;br&gt; &lt;strong&gt;theorem&lt;/strong&gt;  &lt;span&gt;EquivClass_1_T1&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; equiv(A,r)&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; Congruent2(r,f)&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; ProjFun2(A,r,f) : (A//r)\times (A//r) \rightarrow  A//r&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;assms&lt;/span&gt; ,  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L9 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L9 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L9 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L9&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$  ''and'' $ Congruent2(r,f)$  ''and'' $ p \in  (A//r)\times (A//r)$  '' shows '' $ (\bigcup  z \in  fst(p)\times snd(p).\  r\{f(z)\}) \in  A//r$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;ProjFun2_def &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;ProjFun2_def &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;ProjFun2_def &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;Definition of &amp;lt;nowiki&amp;gt;ProjFun2&amp;lt;/nowiki&amp;gt;:
$ ProjFun2(A,r,f) \equiv $
$  \{\langle p,\bigcup  z \in  fst(p)\times snd(p).\  r\{f(z)\}\rangle .\  p \in  (A//r)\times (A//r) \}$&quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;span&gt;ZF_fun_from_total&lt;/span&gt;&lt;br&gt;&lt;br&gt;The projection diagram commutes. I wish I knew how to draw this diagram in &lt;a tiddlylink=&quot;LaTeX&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to http://formalmath.tiddlyspot.com#LaTeX&quot; href=&quot;http://formalmath.tiddlyspot.com#LaTeX&quot; class=&quot;externalLink&quot;&gt;LaTeX&lt;/a&gt;.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;  &lt;span&gt;EquivClass_1_L10&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; A1: &lt;span class=&quot;math&quot;&gt; equiv(A,r)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A2: &lt;span class=&quot;math&quot;&gt; Congruent2(r,f)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A3: &lt;span class=&quot;math&quot;&gt; x\in A&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; y\in A&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; ProjFun2(A,r,f)\langle r\{x\},r\{y\}\rangle  = r\{f\langle x,y\rangle \}&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;from &lt;/strong&gt; A3, A1  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; r\{x\} \times  r\{y\} \neq  0&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;quotientI&lt;/span&gt; ,  &lt;span&gt;equiv_def&lt;/span&gt; ,  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L5 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L5 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L5 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L5&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ refl(A,r)$  ''and'' $ C \in  A//r$  '' shows '' $ C\neq 0$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;span&gt;Sigma_empty_iff&lt;/span&gt;&lt;br&gt; &lt;strong&gt;moreover&lt;/strong&gt;   &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; \forall z \in  r\{x\}\times r\{y\}.\   r\{f(z)\} = r\{f\langle x,y\rangle \}&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;fix &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; z&lt;/span&gt;&lt;br&gt; &lt;strong&gt;assume &lt;/strong&gt; A4: &lt;span class=&quot;math&quot;&gt; z \in  r\{x\}\times r\{y\}&lt;/span&gt;&lt;br&gt; &lt;strong&gt;from &lt;/strong&gt; A1, A3  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; r\{x\} \in  A//r&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; r\{y\} \in  A//r&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; \langle x,y\rangle  \in  r\{x\}\times r\{y\}&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;quotientI&lt;/span&gt; ,  &lt;span&gt;equiv_class_self&lt;/span&gt;&lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A1, A2, A4  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; r\{f(z)\} = r\{f\langle x,y\rangle \}&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L7 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L7 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L7 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L7&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$  ''and'' $ Congruent2(r,f)$  ''and'' $ C_1 \in  A//r$,   $ C_2 \in  A//r$  ''and'' $ z_1 \in  C_1\times C_2$,   $ z_2 \in  C_1\times C_2$  '' shows '' $ r\{f(z_1)\} = r\{f(z_2)\}$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;ultimately &lt;/strong&gt;  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; (\bigcup z \in  r\{x\}\times r\{y\}.\  r\{f(z)\}) =  r\{f\langle x,y\rangle \}&lt;/span&gt; &lt;strong&gt;   by (rule &lt;/strong&gt; &lt;a openedtip=&quot; ZF1 &quot; openedtext=&quot;ZF1_1_L1 &quot; closedtip=&quot; ZF1 &quot; closedtext=&quot;ZF1_1_L1 &quot; class=&quot;button&quot; title=&quot; ZF1 &quot; href=&quot;javascript:;&quot;&gt;ZF1_1_L1 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;ZF1_1_L1&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ C\neq 0$  ''and'' $ \forall y\in C.\  b(y) = A$  '' shows '' $ (\bigcup y\in C.\  b(y)) = A$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  &lt;strong&gt;)&lt;/strong&gt; &lt;br&gt; &lt;strong&gt;moreover&lt;/strong&gt;   &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; ProjFun2(A,r,f)\langle r\{x\},r\{y\}\rangle  = (\bigcup z \in  r\{x\}\times r\{y\}.\  r\{f(z)\})&lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;from &lt;/strong&gt; assms  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; ProjFun2(A,r,f) : (A//r)\times (A//r) \rightarrow  A//r&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; \langle r\{x\},r\{y\}\rangle  \in  (A//r)\times (A//r)&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_T1 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_T1 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_T1 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''theorem''  &amp;lt;nowiki&amp;gt;EquivClass_1_T1&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$,   $ Congruent2(r,f)$  '' shows '' $ ProjFun2(A,r,f) : (A//r)\times (A//r) \rightarrow  A//r$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;span&gt;quotientI&lt;/span&gt;&lt;br&gt; &lt;strong&gt;then &lt;/strong&gt;  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; thesis&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;ProjFun2_def &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;ProjFun2_def &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;ProjFun2_def &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;Definition of &amp;lt;nowiki&amp;gt;ProjFun2&amp;lt;/nowiki&amp;gt;:
$ ProjFun2(A,r,f) \equiv $
$  \{\langle p,\bigcup  z \in  fst(p)\times snd(p).\  r\{f(z)\}\rangle .\  p \in  (A//r)\times (A//r) \}$&quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt;  ,  &lt;span&gt;ZF_fun_from_tot_val&lt;/span&gt;&lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;ultimately &lt;/strong&gt;  &lt;strong&gt;show&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; thesis&lt;/span&gt; &lt;br&gt; &lt;strong&gt;qed&lt;/strong&gt;&lt;/blockquote&gt;&lt;/div&gt; &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;h1&gt;Projecting commutative, associative and distributive operations.&lt;/h1&gt;&lt;br&gt;In this section we show that if the operations are congruent with respect to an equivalence relation then the projection to the quotient space preserves commutativity, associativity and distributivity.&lt;br&gt;&lt;br&gt;The projection of commutative operation is commutative.&lt;br&gt;&lt;br&gt; &lt;strong&gt;lemma&lt;/strong&gt;  &lt;span&gt;EquivClass_2_L1&lt;/span&gt;:&lt;br&gt; &lt;strong&gt;   assumes &lt;/strong&gt; A1: &lt;span class=&quot;math&quot;&gt; equiv(A,r)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A2: &lt;span class=&quot;math&quot;&gt; Congruent2(r,f)&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A3: &lt;span class=&quot;math&quot;&gt; f \text{ is commutative on } A&lt;/span&gt; &lt;strong&gt;and &lt;/strong&gt; A4: &lt;span class=&quot;math&quot;&gt; c1 \in  A//r&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; c2 \in  A//r&lt;/span&gt; &lt;strong&gt;   shows &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; ProjFun2(A,r,f)\langle c1,c2\rangle  = ProjFun2(A,r,f)\langle c2,c1\rangle &lt;/span&gt;&lt;a openedtip=&quot;hide proof &quot; openedtext=&quot;proof &quot; closedtip=&quot;show proof &quot; closedtext=&quot;proof &quot; class=&quot;button&quot; title=&quot;show proof &quot; href=&quot;javascript:;&quot;&gt;proof &lt;/a&gt;&lt;div style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;sliderPanel&quot;&gt;&lt;blockquote&gt;&lt;strong&gt;from &lt;/strong&gt; A4  &lt;strong&gt;obtain &lt;/strong&gt; &lt;span class=&quot;math&quot;&gt; x&lt;/span&gt; &lt;span class=&quot;math&quot;&gt; y&lt;/span&gt; &lt;strong&gt;where &lt;/strong&gt; D1: &lt;span class=&quot;math&quot;&gt; c1 = r\{x\}&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; c2 = r\{y\}&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; x\in A&lt;/span&gt;,  &lt;span class=&quot;math&quot;&gt; y\in A&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;span&gt;quotient_def&lt;/span&gt;&lt;br&gt; &lt;strong&gt;with &lt;/strong&gt; A1, A2  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; ProjFun2(A,r,f)\langle c1,c2\rangle  = r\{f\langle x,y\rangle \}&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; EquivClass1 &quot; openedtext=&quot;EquivClass_1_L10 &quot; closedtip=&quot; EquivClass1 &quot; closedtext=&quot;EquivClass_1_L10 &quot; class=&quot;button&quot; title=&quot; EquivClass1 &quot; href=&quot;javascript:;&quot;&gt;EquivClass_1_L10 &lt;/a&gt;&lt;div rendered=&quot;false&quot; blockquote=&quot;false&quot; raw=&quot;''lemma''  &amp;lt;nowiki&amp;gt;EquivClass_1_L10&amp;lt;/nowiki&amp;gt;:  ''assumes '' $ equiv(A,r)$  ''and'' $ Congruent2(r,f)$  ''and'' $ x\in A$,   $ y\in A$  '' shows '' $ ProjFun2(A,r,f)\langle r\{x\},r\{y\}\rangle  = r\{f\langle x,y\rangle \}$ &quot; style=&quot;display: none;&quot; transient=&quot;false&quot; class=&quot;floatingPanel&quot;&gt;&lt;/div&gt; &lt;br&gt; &lt;strong&gt;also&lt;/strong&gt;   &lt;strong&gt;from &lt;/strong&gt; A3, D1  &lt;strong&gt;have&lt;/strong&gt;  &lt;span class=&quot;math&quot;&gt; r\{f\langle x,y\rangle \} = r\{f\langle y,x\rangle \}&lt;/span&gt; &lt;strong&gt;using&lt;/strong&gt;  &lt;a openedtip=&quot; func_ZF &quot; openedtext=&quot;IsCommutative_def &quot; closedtip