<div dir="ltr">On Sun, Jan 15, 2017 at 6:42 PM, David Sweeris <span dir="ltr">&lt;<a href="mailto:davesweeris@mac.com" target="_blank">davesweeris@mac.com</a>&gt;</span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div><br></div><div><div><br><br>Sent from my iPhone</div><span class="">On Jan 15, 2017, at 18:02, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt; wrote:<br><br></span></div><span class=""><blockquote type="cite">&quot;Mathematically correct&quot; integers behave just like Int in that there is not a multiplicative inverse. What we&#39;re trying to do here is to determine how much of what we know about mathematics is usefully modeled in the standard library. The answer is not zero, because there is more than just counting that people do with integers.<br></blockquote><br></span><div>It&#39;s an interesting problem... When I was in school, &quot;integer&quot; division &quot;returned&quot; a &quot;quotient and remainder&quot;, a &quot;fraction&quot; (which, occasionally, could be simplified to just an integer), or a &quot;real&quot;. We never talked about division in the context of &quot;(Int, Int) -&gt; Int&quot;, though. OTOH, I never took any math classes past Differential Equations or Linear Algebra, either... I&#39;m <i>aware</i> of areas of math where you formally restrict yourself to the kind of <span style="background-color:rgba(255,255,255,0)">&quot;(Int, Int) -&gt; Int&quot;</span> operations we&#39;re doing here, but I don&#39;t really know much about it. Is division even well-defined in that context?</div><div><br></div><div>- Dave Sweeris</div></div></blockquote><div><br></div><div>I&#39;m no mathematician, and I&#39;m not sure how to tackle the question of &quot;well-defined.&quot; Hopefully someone who is more knowledgable can chime in here.</div><div><br></div><div>But I&#39;ll have a go at replying to your point as it relates to the practical issue here. Two Int values can be &quot;divided&quot; to produce another Int, and that gives a predictable and well-understood result. It&#39;s an operation that&#39;s always going to be there--first, because it&#39;d be insane to remove it since much working code relies on it, and second, because we&#39;re only re-designing integer protocols and not the concrete types. However, it _is_ true that such an operation has very different semantics from division as you learned it in math.</div><div><br></div><div>This is why I&#39;m advocating for perhaps another look at the top of this integer protocol hierarchy. At the moment, `Arithmetic` offers reasonable semantic guarantees for a lot of things, but `/` has different semantics for integer types and floating point types and is really closer to just syntax. Other mathematical types--which certainly the stdlib doesn&#39;t have to offer, but the stdlib protocol hierarchy shouldn&#39;t preclude their conformance to relevant protocols if it&#39;s possible--such as fractions and complex numbers, share with floating point types the semantics of `/` that qualify these types as fields. Dave A&#39;s question as to practical uses can probably best be answered in this way: to the extent that any generic algorithm relies on `/` having semantics and can be applied to fractions and real numbers, it would be useful to distinguish such an operation from integer &quot;division.&quot;<br></div></div><br></div></div>