Arabic Numerals, the Supreme Court, and Where Credit Is Due

|

I agree with Josh that Justice Breyer's opinion in Google LLC v. Oracle America, Inc. is a great read, but I had some questions about this passage:

Sun decided, for example, that its API [Application Programming Interface] would call up a task that compares one integer with another to see which is the larger. Sun's API (to our knowledge) will not call up the task of determining which great Arabic scholar decided to use Arabic numerals (rather than Roman numerals) to perform that "larger integer" task.

(1) Is this some specific pun or cultural allusion that I'm missing? Or is it just a reference to the fact that a different Google product—Google Search—would be used to make that determination, coupled with a shout-out to Arabic mathematics?

And if the latter, is the reference to "great Arabic scholar" quite right, or might it be Hindu scholars (or perhaps Persian scholars) who deserve the credit? (Against stereotype, I will not claim that the real credit should go to Russians.)

(2) What does it mean to suggest (if I'm understanding the suggestion correctly) that a computer is using Arabic numerals rather than Roman numerals to perform a "max" function, given that the computer using binary? I suppose binary can be said to be inspired by Hindu-Arabic numerals, in that it's a place-value notation; is that it? Also, does it seem odd to think of electrical states as "numerals"? Or is the opinion simply referring to how modern humans do the maximum determination, rather than to how computers do it?

NEXT: Names of Police Officers Involved in Defensive Shooting of Suspects Aren't Public Records

Editor's Note: We invite comments and request that they be civil and on-topic. We do not moderate or assume any responsibility for comments, which are owned by the readers who post them. Comments do not represent the views of Reason.com or Reason Foundation. We reserve the right to delete any comment for any reason at any time. Report abuses.

  1. I suspect it’s an allusion to the comparative simplicity of integer comparison in the Roman vs Arabic notation. This is often taught in mathematics history courses.

    It’s a confusing example of separating relevant aspects of the task of comparison from irrelevant aspects of the task. The API implements the numeric aspect of comparision and not the notation related aspect of comparison.

    (When you want to torture beginning programmers, you sometimes give the assignment to implement Roman notation arithmetic operators into Java.)

    1. But is it quite right to credit Arabic mathematicians here, as opposed to Hindu mathematicians?

      1. The only way Medieval scholars knew about anything coming from Asia was after it had passed through Arab lands. So they thought it was Arab. Arabs were, surprisingly, willing to let them believe it to be so.

        1. Isn’t this (a) actually done in hexadecimals (base 16) and (b) who invented those?

          1. No, all computer calculations are done in base 2 (binary). Oct (base 8 or 2^3) and Hex (base 16 or 2^4) are easier to read forms of base 2.

            1. Not on the analog computer – slide rule – on my shelf.

              Pedantry, sure, but it’s binary, you’re either right or wrong…

              1. Also not on a ternary computer such as the Setun (although I don’t know if there are any working Setuns preserved).

      2. Is it even correct to refer to an “Arabic scholar” in this context? To my ear, an Arabic scholar is a scholar of the Arabic language (or family of languages), regardless of that scholar’s ethnic heritage. Would it not be more correct to refer to an “Arab scholar,” or to an “Arabian scholar” (although the latter sounds old-fashioned), assuming for the sake of argument that the inventor of Arabic numerals was, in fact, of Arab descent?

        1. Ridgeway: I had the same thought, but some quick Googling suggested to me that “Arabic” is not uncommonly used to refer to Arabic-speaking cultures and their cultural output. “Arab” is also not uncommonly used this way, but to my ear “Arabic” draws the mind towards the culture more than just the ethnicity. (“Arabian” strikes me as more focused on people and cultures of the Arabian Peninsula.) In any event, I thought I wouldn’t quibble about it.

        2. Saying “Arabic scholar” is certainly more appropriate than “Arab scholar”, since there are virtually zero Arab scholars and it’s pretty well guaranteed that no such scholar was involved in this process. Scholars from the Islamic world tended to come from those parts of it that had a tradition of scholarship.

      3. Mathematics are one thing. Symbology is the origin of ‘Arabic numerals’ as a Western term – Arab symbols were adopted.

  2. A tangent: during the Bush administration, there was a running joke that a particular NSA program would capture only the content of telephone calls dialed using Arabic numbers.

    1. I believe there was also a poll showing that a majority of Republican voters opposed teaching children Arabic numbers in schools (though it is possible that this came from The Onion or a similar source).

      1. If it’s the poll discussed here, it found majority opposition among all respondents (not just Republicans), but I’m not sure whether this was a suitably randomized sample.

        Some more from that item:

        Dick, who said that the “goal in this experiment was to tease out prejudice among those who didn’t understand the question,” shared another survey question about what should or shouldn’t be taught in American schools. This time, the survey found that 53% of respondents (and 73% of Democrats) thought that schools in America shouldn’t teach the “creation theory of Catholic priest Georges Lemaitre” as part of their science curriculum[.]

        Just as respondents to the Arabic numerals question were likely unsure of what “Arabic numerals” referred to, the respondents to this question likely thought that Catholic priest Georges Lemaitre’s “creation theory” referred to creationism. In truth, however, Lemaitre’s “theory of creation” was an explanation for the expansion of the universe, now better known as the “big bang theory.”

        Dick’s tweet about the Arabic numerals question was retweeted more than 20,000 times. As of this writing, his tweet about Georges Lemaitre has been shared less than 10 times.

        1. Clearly not enough people understood the second joke, which makes it meta-funnier.

      2. Heh, It’s true!

        56% overall, 72% R’s, 40% D’s

        The next question was a real ringer: “Should schools in America teach the creation theory of Catholic priest George Lemaitre as part of their science curriculum?”. That’s certainly more obscure – he was a priest and physicist who first proposed the big bang theory (which was news to me).

        73% of D’s said ‘no’, compared to 33% R.

        I raise an eyebrow towards anyone that didn’t say ‘don’t know’ (unless, of course, they actually knew what was being referred to).

        Democracy is scary sometimes.

  3. I agree with rjhorn in general. Integers are a numeric base representation of a number.

    Base 10 has 0-9 as the representation for each digit in the base
    Base 2 has 0-1
    Base 16 (hex) has 0-9 and A-F

    In all these case there is a value represented for each digit in the base.

    In Roman numbering this is not the case.

    I think the passage alludes to the fact that the method of integer comparison is very different because of the differences in number representation. The decision as a whole differentiates between task code and API code and Breyer is demonstrating how the task code can differ separately from the API.

    1. “Integers are a numeric base representation of a number.”

      I hope you’re not being haunted by Bertrand Russell’s ghost for writing that. It’s the other way around!

      🙂

  4. In context, I believe his point was that the particular API call triggered a specific operation to be carried out.

    It would be akin to saying, “If you ask your taxi to bring you to the store, it will bring you to the store, it’s not going to bring you to a bank.”

    It seemed like an overly complicated way of demonstrating that, though.

    1. And as a side note, that the computer will almost definitely compare integers in binary is technically not relevant in general.

      Whether the computer uses binary or who knows what other internal signaling is part of the implementation. If you give a computer to Arabic numbers to compare, it’s up to the computer to figure out how to encode them and carry out that operation.

      This is a bit relevant to Breyer’s argument as he correctly separates the API declaration from the implementation.

      1. Except that you don’t pass Arabic numbers to a max function.

      2. The Java language specification defines the types that can be used with java.lang.Math.max() in terms of binary representation using specific numbers of bits. For example, it says that “double” behaves as an IEEE 754 binary64 type. For integer types, it also specifies operations in terms of binary representation. (“If an integer operator other than a shift operator has at least one operand of type long, then the operation is carried out using 64-bit precision, and the result of the numerical operator is of type long.” and the fallback specifying 32-bit precision and int type for other operations.)

        Yes, some implementation could conceivably behave differently — but it is not allowed to expose that difference to any application, regardless of whether the application uses the max() API or not.

      3. And as a side note, that the computer will almost definitely compare integers in binary is technically not relevant in general.

        Whether the computer uses binary or who knows what other internal signaling is part of the implementation.

        You have absolutely no idea what you’re talking about.

  5. I’m with rjhorn and scattergood on this; to a large extent, I would just chalk it up to illustrating absurdity by being absurd. The absurdity, in this case, is the idea of an API that would implement all possible functions related to “max”, including retrieving the relevant history of number writing systems.

    Of course, the reason all of these decisions are stuck with examples based on “max” is that someone, more than a decade ago, decided that “max” was a good example API declaration from the copied code. Possibly one of the most influential decisions in the whole case, because it was a successful effort to argue the triviality of individual API declarations in typical code.

    Interestingly (at least to computer types such as myself), a “max” function in binary is even easier than a similar function in decimal using Arabic numerals. For two binary numbers of equal length, start from the left. The first time one of the numbers has a 1 and the other has a 0, return the number with the 1 as it is bigger. If you get to the end before that happens, return either number as they are the same.

    In any case, even though the physical computer is of course using voltage levels to represent binary, in my view it is reasonable to say that the API is using Arabic numerals, since one of the important features of a higher-level programming language like Java is allowing the specification of numeric values in the form that humans prefer, with the computer doing the parsing and base conversion.

    1. Slight quibble: For Java’s integer types, which are specified as two’s complement representation, if the most significant bit of either number is 1, then the number with a 0 in the first different position is greater. Your rule applies when both MSBs are zero.

      Another way the example is a poor one: In practice, a compiler will generally inline the code for a max() operation. For floating-point numbers, that often works out to a single machine instruction even on a RISC processor — a good example of even the function implementation being non-copyrightable.

      1. For those who haven’t taken computer architecture. The leftmost digit in binary is used to show positive or negative, in which case the entire concept is inverted.

        00000001 is “1”
        00000010 is “2”
        11111111 is “-1”
        11111110 is “-2″

        This makes adding easier, as you can simply add the two, allow the ” 1″ to roll off if it rounds, and the result is correct.

        1. For those who haven’t taken computer architecture. The leftmost digit in binary is used to show positive or negative, in which case the entire concept is inverted.

          Only for signed types…which is why a signed 16-bit integer’s range of possible values is −32768..32767, while an unsigned 16-bit integer’s range is 0..65535.

    2. The absurdity here, in hindsight, is surely that Sun/Oracle fought a case all the way to the SC over IP which, at most, was worth a few hundred thousand dollars. One can’t sensibly interpret this judgement without taking that very clear subtext into account.

      People are reading this as if SCOTUS ruled that fair use has a whole new meaning, but they didn’t do that at all. They implicitly valued the API, if capable of generating a copyright interest, at a negligible amount.

      Google didn’t get over a high bar with ‘fair use’. The bar was set at ankle height, and they couldn’t fail to jump that high.

      End of the day, Sun admitted their sole intention was monopolistic market abuse. They refused to sell a license that was worth a trivial sum, in a naked attempt to stifle innovation. I’m very pleased the SC said clearly that it is the exact opposite of what copyright is intended to achieve, and ruled accordingly.

    3. Interestingly (at least to computer types such as myself), a “max” function in binary is even easier than a similar function in decimal using Arabic numerals. For two binary numbers of equal length, start from the left. The first time one of the numbers has a 1 and the other has a 0, return the number with the 1 as it is bigger.

      Why do you hate signed integral and floating-point types?

    4. For two binary numbers of equal length, start from the left

      in my view it is reasonable to say that the API is using Arabic numerals, since one of the important features of a higher-level programming language like Java is allowing the specification of numeric values in the form that humans prefer

      But the API isn’t “using Arabic numerals”. It’s using binary values made available to it via processor registers, memory locations, etc. The source code you write to cause those values to be made available to the APIs that code invokes isn’t using Arabic numerals either. You’re seeing values represented by Arabic numerals on some of your I/O devices (keyboard, monitor, printer output, etc), but those are translations to/from the internal representations of numeric values used by the computer hardware/software, performed for your (human) benefit. The API doesn’t care whether those values appear to you in forms using Arabic, Roman, Klingon or any other symbology.

      1. I accidentally omitted my response to…

        For two binary numbers of equal length, start from the left

        …which was…

        What if you’re performing the comparison using a “Big-Endian” machine?

        1. People usually write numbers in big-endian notation, and that’s what “from the left” means here. Right and left shifts have the same convention: right shift is always towards the least significant bit, and left shift is towards the most significant.

          To compare multi-byte integers on a little-endian machine, you need to start at the MSB of the bytes with the highest addresses.

          1. I screwed up my reply anyway…which should have said “Little-Endian”.

    5. Furthermore…

      in my view it is reasonable to say that the API is using Arabic numerals, since one of the important features of a higher-level programming language like Java is allowing the specification of numeric values in the form that humans prefer

      import java.lang.Math;
      class PrintMax {
      public static void main(String[] args) {
      System.out.println(“max() = ” + Math.max(0xAB, 0xCD));
      }
      }

      Now what?

    6. But the API itself says nothing about how the result is achieved (the “implementation”), but only that it is an “off the shelf” computation.
      The API says “the word for this computation is in the dictionary; it does NOT specify the definition:
      The implementer of “max” can do that computation however he/she pleases; if the choice is to convert to Roman numerals and then do the comparison there, that is a perfectly correct implementation. He/she will be laughed at for using an overly complicated and inefficient way of doing it, but will NOT be criticized for incorrectness.
      Speaking as a software engineer of over three decades experience.

    7. Interestingly (at least to computer types such as myself), a “max” function in binary is even easier than a similar function in decimal using Arabic numerals.

      Have you ever actually written any software? Unless your hypothetical “max” function accepts its arguments as character string representations of numbers (encoded as ASCII, EBDIC, whatever) then you’re not using “numerals” to implement the function (and even if you were, the “binary” numerals are “0” and “1”, both of which are Arabic numerals…you’re referring to a difference in numeric bases, not numerals).

  6. The point was about where symbology and semantics coincide. This is exemplified where two different calculation systems are compared.

    It may not be obvious unless one’s previously wondered – as I have – how on earth one does arithmetic with Roman numerals, but the process – algorithm, if you like – is completely different to the one we’ve learnt. The result is the same.

    What a wonderfully chosen example! I completely agree with Josh and go further, I’m in awe of the intellect needed to define so clearly such a complex subject, let alone to pick brilliantly apposite examples.

    1. unless one’s previously wondered – as I have – how on earth one does arithmetic with Roman numerals

      By applying mathematical operations to the integral values represented by Roman numbers…like this calculator does.

      https://www.calculatorsoup.com/calculators/conversions/roman-numeral-calculator.php

      1. That made me google ‘how did romans do arithmetic with roman numerals’. It wasn’t as bad as I would have thought. There were several interesting articles. Here’s one of the better ones.

  7. The decimal system was an Indian innovation, but the digits they used don’t resemble what we now call Arabic numerals. Those came to Europe from western Arabic states like Morocco, and are also fairly distinct from the eastern Arabic numerals used today in Arabic writing, at least when the author is going for a traditional look.
    The quoted passage seems to me to reflect a misunderstanding that the choice of Arabic numerals when a programmer writes a program utilizing the SE API is determined by the API, rather than by the Java language. In fact, the language gives her other options – hexadecimal for example, which is Arabic “plus” – and the API is indifferent.
    Fair use here is being stretched to compensate for an unfortunately established error that considers “declaring code” to be subject to copyright because it originates as text, when its purpose is functional rather than expressive. It’s like a car manufacturer suing an parts manufacturer for violating a copyright on the “sculpture” that is their gas cap design.

  8. I don’t think Breyer understands the difference between the representation of the numbers in the *source code* (decimal expansion using Arabic numerals) and by the underlying *machine* (binary expansion encoded in electrical states). He really is imagining that the implementation calculates using the decimal representations like he learned to do at school.

    So he thinks that the arguments of java.lang.Math.max function must be immediate constants represented by decimal expansion rather than arbitrary numbers in the internal representation.

    1. No, not at all. This was a comparison to something not involving programming. The rest of the opinion makes it quite clear his understanding is better than ours. It’s well worth reading if you haven’t already.

      Dare I say it’s one of the finest pieces of writing of any kind I’ve seen in a while?

      1. I read the opinion quite carefully, and was impressed with Breyer’s understanding of the technical details even if he doesn’t get everything exactly right. He’s an octogenarian lawyer, not a programmer.

        Here, Arabic numerals aren’t used in the “task” at all. They are used by the programmers to communicate with the interpreter, but not by the program to communicate with the runtime environment (which is the API the case is about).

      2. This was a comparison to something not involving programming.

        ?? The comparison in question was to something that had everything to do with computer programming.

        The rest of the opinion makes it quite clear his understanding is better than ours.

        “Ours”? Do you have a mouse in your pocket?

  9. It appears to me to be a sly hit at Oracle saying that their cause would be similar go Google trying to copyright Internet searches.

  10. 1. Neither. He is saying that one of the things Sun did was come up with a set of tasks that computers will do and instructions to the computer for doing them which the programmers access through the user interface. The example of Arabic numerals is playful: in devising those sets, Sun made it so the API can compare integers but not explain the history of integer comparison. “Arabic numerals” is a common usage and “Arabic scholar” naturally complements it. Note the way this is phrased, Justice Breyer is not even saying that an Arabic scholar actually made this decision; rather that it is a possible way the question would be phrased.

    2. Your primary reading, though entertaining, is incorrect. Again, all Justice Breyer is saying is that Sun chose not to make the API capable of explaining the history of the comparison of integers, which would include a discussion of the virtues of Roman and Arabic numerals. He is not saying the computer would use either system for making the comparison. He is also not principally talking about how humans would make the comparison but rather the history of how humans have done it.

  11. The real place-value notation in antiquity that inspired all others since was not (base-10) Arabic numerals that we call decimals (which date from the 2nd half of the first millennium AD), but rather the (base-60) so-called sexagesimal numerals that originated with the Babylonians in the very early 2nd millennium BC (!).

    It was sexagesimal numerals that were inherited by Western scientists and mathematicians following Alexander the Great’s 4th century BC conquest of Babylon/Persia — and it was sexagesimal calculations that were subsequently employed by scholars from Ptolemy in ancient Alexandria, through medieval Arabic scholars, to beyond Copernicus in the West.

    Even after the newfangled decimals arrived on the scientific scene in the West (at the end of the 1st millennium AD), they were manifestly unsuited for such calculations — because decimals not only (originally) lacked a zero (which sexagesimals had incorporated during the 4th century BC), decimals also (until much later) lacked the ability to express decimal fractions (e.g., writing 3.14… for π) within the system.

    It wasn’t until Western mathematicians (notably François Viète) extended the decimal system during the later part of the 16th century so that it included decimal-fractions that decimals became truly suitable for scientific computations and began to displace sexagesimals for this purpose.

    Note that we still use sexagesimal notation today — every one of us, every day — in the hours-minutes-seconds of time, and the degrees-minutes-seconds of trigonometry. “Minutes” and “seconds” thus aren’t some weird units, but rather they’re 1st and 2nd level sexagesimal fractions — akin to the tenths and hundredths columns in decimal fractions, what Ptolemy (in Latin translation) called partes minutae primae and partes minutae secundae.

Please to post comments