TabooBot: Return D if opponent’s source code contains a D; C otherwise.
To avoid mutual defection with other bots, it must (like with real prudish societies!) indirectly reference the output D. But then other kinds of bots can avoid explicit reference to D, requiring a more advanced TabooBot to have other checks, like defecting if the opponent’s source code calls a modifier on a string literal.
like defecting if the opponent’s source code calls a modifier on a string literal
Actually, ‘D it’s not a string literal—it’s a symbol. Compilers can legally to turn the symbol ‘D into something opaque like 0x3859 and destroy any reference to the letter “D”. The only way a program can generate a ’D symbol on its own is to include it in its source.
But that doesn’t mean that a program without a ‘D can’t defect! An IncrediblyInnocentBot, which does not contain a ‘D and can’t generate a ‘D on its own can still defect by stealing a ’D from the opponent agent.
One way to steal a ’D from an opponent would be to search for quoted symbols in the opponent’s program. The opponent could foil this method, however, by including decoy symbols.
Alternatively, IncrediblyInnocentBot could simulate its opponent against a bunch of stupid agents, such as CooperateBot or DivergeBot, and hope that the opponent defects in at least one of these simulations. If the opponent ever returns a symbol other than ’C in simulation, IncrediblyInnocentBot remembers that symbol and can later use it for nefarious purposes. IncrediblyInnocentBot is in-credible indeed.
BTW, the strategies I listed above are why I said it was not trivial for an agent to prove that MimicBot does not defect against a cooperator, despite the fact that MimicBot does not contain the defect symbol.
Testing against either CooperateBot or DivergeBot is risky. Some opponents could cooperate with CooperateBot for meta reasons, while others may fail to halt when faced with a DivergeBot.
The safest case would to see what the opponent does against a DefectBot (most opponents that defect at all would defect against it) except IncrediblyInnocentBot can’t generate a DefectBot on its own, either.
EBot (which always returns ‘E rather than ‘C or ‘D) might be a safer version of DivergeBot to use, but it isn’t completely fool-proof either. Then again, IncrediblyInnocentBot can check if the opponent returns ‘E against EBot—in that case, it should probably cooperate rather than “do the other thing that’s not ’C, whatever it is”, to avoid a (0,0) payoff when faced with MimicBot.
Divergence) is failure to halt. DivergeBot goes into an infinite loop, or searches for a proof that 1=2, or performs some other sort of computation that doesn’t finish.
Perhaps a clearer name would be InfiniteLoopBot or OtherBot?
Just thought I’d throw this out there:
TabooBot: Return D if opponent’s source code contains a D; C otherwise.
To avoid mutual defection with other bots, it must (like with real prudish societies!) indirectly reference the output D. But then other kinds of bots can avoid explicit reference to D, requiring a more advanced TabooBot to have other checks, like defecting if the opponent’s source code calls a modifier on a string literal.
Actually, ‘D it’s not a string literal—it’s a symbol. Compilers can legally to turn the symbol ‘D into something opaque like 0x3859 and destroy any reference to the letter “D”. The only way a program can generate a ’D symbol on its own is to include it in its source.
But that doesn’t mean that a program without a ‘D can’t defect! An IncrediblyInnocentBot, which does not contain a ‘D and can’t generate a ‘D on its own can still defect by stealing a ’D from the opponent agent.
One way to steal a ’D from an opponent would be to search for quoted symbols in the opponent’s program. The opponent could foil this method, however, by including decoy symbols.
Alternatively, IncrediblyInnocentBot could simulate its opponent against a bunch of stupid agents, such as CooperateBot or DivergeBot, and hope that the opponent defects in at least one of these simulations. If the opponent ever returns a symbol other than ’C in simulation, IncrediblyInnocentBot remembers that symbol and can later use it for nefarious purposes. IncrediblyInnocentBot is in-credible indeed.
BTW, the strategies I listed above are why I said it was not trivial for an agent to prove that MimicBot does not defect against a cooperator, despite the fact that MimicBot does not contain the defect symbol.
Testing against either CooperateBot or DivergeBot is risky. Some opponents could cooperate with CooperateBot for meta reasons, while others may fail to halt when faced with a DivergeBot.
The safest case would to see what the opponent does against a DefectBot (most opponents that defect at all would defect against it) except IncrediblyInnocentBot can’t generate a DefectBot on its own, either.
EBot (which always returns ‘E rather than ‘C or ‘D) might be a safer version of DivergeBot to use, but it isn’t completely fool-proof either. Then again, IncrediblyInnocentBot can check if the opponent returns ‘E against EBot—in that case, it should probably cooperate rather than “do the other thing that’s not ’C, whatever it is”, to avoid a (0,0) payoff when faced with MimicBot.
What is DivergeBot?
Divergence) is failure to halt. DivergeBot goes into an infinite loop, or searches for a proof that 1=2, or performs some other sort of computation that doesn’t finish.
Perhaps a clearer name would be InfiniteLoopBot or OtherBot?