hyatt wrote:BB+ wrote:Needless to say, I do not accept your statistics about ordering of functions. Technically you may be correct, but in terms of interdependency and human behaviours, you are not.
I tend to agree with this. For instance, maybe some guide like "How Computers Play Chess" used one ordering, and many others simply imitate it. A similar case could be Zobrist keys: more than one person might have decided to use some algorithm from Knuth or Marsaglia to get a bunch of random numbers (there is still some question of how to order them, though).
I don't agree with this based on one issue, I have looked at the source for several chess engines that are available, and they simply don't do the same things in the same order using the same approach, which is what Chris/I were discussing. Hard to compare code between a bitboard and mailbox board representation, but one can look at A and make a very good determination about whether B came from A or is original.
I think this topic is worthy of a another thread actually.
My claim is that your "functional equivalence" is a catch-all to use to condemn all witches. Just to see if we can get some sort of consensus - never known with Bob since 1995
.........
..... let's switch to the module genmoves. there's little or no creativity, the outputs are defined pretty much by the rules of chess. Let's suppose, I, Muggins, write another chess program. What's to stop Bob and Zach claiming my genmove module is "functionally equivalent" to Crafty (no matter whether I wrote in BB or 0x88 did it by lookuptable), and not only functionally equivalent at a module level, but also at a host of sub levels. rhetorical question and the answer is there's nothing to stop them, because indeed what I write will be functionally equivalent, whether I based it on Crafty code or not.
They got me. *If* "functional equivalence" is a valid concept for copy detection. Hence, obviously, it can't be.
Actually, it will be down to data (knight offsets say, if 0x88) and ordering of sub functions, and/or ordering of the resultant move list. Won't it? The "functional equivalence" will be neither here nor there. Although, if I random up the data and the move ordering, Zach report will say "the mover order has been randomised to obfuscate the result".
Now, a further leap, that Bob will argue with no doubt - the ordering (above, whether of moves or sub-functions) contains no information, no chess AI, no nothing - it's irrelevent. So, how could I 'copy' something that contains NO information, or, if I did, so what? Doesn't make any difference to the program ultimately.
So, now we're down to data. But just how protected is a list of knight offsets? Not at all. How protected is the ordering of a list of knight offsets? It's an irrelevent big deal, makes no difference to the AI, and contains no information.
Bob/Zach's line appears to be that the quantity makes up for the lack of quality in each case. The whole picture they say. But in the final analysis, even if there's some data match, how to demonstrate that the different code (and back to Rybka case, it is different code) was written by copying or written independently? You have a pointer to suspicion in some of the data, but no proof at all in the code - functionally equivalent or not.