So this is setting off all sorts of aesthetic flags in my head, but it appears to work:
Let FairBotPrime (FB’) be the agent that does this: first tries to prove Opp(FB’)=C for a long time (long enough for Löb to work), then simply tries to prove either Opp(FB’)=C or Opp(FB’)=D for the rest of the time. If it ever succeeds, it immediately halts and returns the same move as it just deduced. If it doesn’t deduce anything in time, then it defects by default.
Let MasqueradePrime (M’) be the agent that first tries on the DefectBot and FB’ masks: it looks through all proofs for one of the form “DefectBot(Opp)=X and Opp(DefectBot)=Y” and progresses to the next stage once it finds one (or once it runs out of allotted time), then does the same for the FB’ mask. Then, if either payout thus obtained exceeds the default (D,D) payout, it sanity-checks whichever mask gets the better result (let’s say it defaults to DefectBot if they tie): it tries to prove “Opp(M’)=Opp(chosen mask)”, and if so then it outputs the (pre-calculated) move that the chosen mask makes against the opponent. If something along this path fails, then it just outputs its default move (D).
I claim that M’ correctly defects against DefectBot and CooperateBot, and cooperates mutually with FB’ and M’. The key here is that at no point does it need to deduce that a proof search failed; it only needs to show that a certain proof is the first one that an agent finds. I’ll reply again with some lemmas.
So this is setting off all sorts of aesthetic flags in my head, but it appears to work:
Let FairBotPrime (FB’) be the agent that does this: first tries to prove Opp(FB’)=C for a long time (long enough for Löb to work), then simply tries to prove either Opp(FB’)=C or Opp(FB’)=D for the rest of the time. If it ever succeeds, it immediately halts and returns the same move as it just deduced. If it doesn’t deduce anything in time, then it defects by default.
Let MasqueradePrime (M’) be the agent that first tries on the DefectBot and FB’ masks: it looks through all proofs for one of the form “DefectBot(Opp)=X and Opp(DefectBot)=Y” and progresses to the next stage once it finds one (or once it runs out of allotted time), then does the same for the FB’ mask. Then, if either payout thus obtained exceeds the default (D,D) payout, it sanity-checks whichever mask gets the better result (let’s say it defaults to DefectBot if they tie): it tries to prove “Opp(M’)=Opp(chosen mask)”, and if so then it outputs the (pre-calculated) move that the chosen mask makes against the opponent. If something along this path fails, then it just outputs its default move (D).
I claim that M’ correctly defects against DefectBot and CooperateBot, and cooperates mutually with FB’ and M’. The key here is that at no point does it need to deduce that a proof search failed; it only needs to show that a certain proof is the first one that an agent finds. I’ll reply again with some lemmas.