# Intuitive cooperation

This is an exposition of some of the main ideas in the paper [Robust Cooperation](/lw/hmw/robust_cooperation_in_the_prisoners_dilemma/). My goal is to make the ideas and proofs seem natural and intuitive - instead of some [mysterious](/lw/iu/mysterious_answers_to_mysterious_questions/) thing where we invoke Löb's theorem at the right place and the agents magically cooperate. Also I hope it is accessible to people without a math or CS background. Be warned, it is pretty cheesy ok.

* * *

In a small quirky town, far away from other cities or towns, the most exciting event is a game called (for historical reasons) [The Prisoner's Dilemma](http://en.wikipedia.org/wiki/Prisoner%27s_dilemma). Everyone comes out to watch the big tournament at the end of Summer, and you ([Alice](http://en.wikipedia.org/wiki/Alice_and_Bob)) are especially excited because this year it will be your first time playing in the tournament! So you've been thinking of ways to make sure that you can do well.

The way the game works is this: Each player can choose to cooperate or defect with the other player. If you both cooperate, then you get two points each. If one of you defects, then that player will get three points, and the other player won't get any points. But if you both defect, then you each get only one point. You have to make your decisions separately, without communicating with each other - however, everyone is required to register the algorithm they will be using before the tournament, and you _can_ look at the other player's algorithm if you want to. You also are allowed to use some outside help in your algorithm. 

![](http://i.imgur.com/4uKb2sC.png)

Now if you were a newcomer, you might think that no matter what the other player does, you can always do better by defecting. So the best strategy must be to always defect! Of course, [you know better](http://en.wikipedia.org/wiki/Superrationality), if _everyone_ tried that strategy, then they would end up defecting against each other, which is a shame since they would both be better off if they had just cooperated. 

But how can you do better? You have to be able to describe your algorithm in order to play. You have a few ideas, and you'll be playing some practice rounds with your friend Bob soon, so you can try them out before the actual tournament. 

Your first plan:

I'll cooperate with Bob if I can tell from his algorithm that he'll cooperate with me. Otherwise I'll defect. 

For your first try, you'll just run Bob's algorithm and see if he cooperates. But there's a problem - if Bob tries the same strategy, he'll have to run your algorithm, which will run his algorithm again, and so on into an infinite loop!

So you'll have to be a bit more clever than that... luckily you know a guy, Shady, who is good at these kinds of problems. 

* * *

You call up Shady, and while you are waiting for him to come over, you remember some advice your dad Löb gave you. 

([Löb's theorem](http://en.wikipedia.org/wiki/L%C3%B6b's_theorem)) "If someone says you can trust them on X, well then they'll just tell you X." 

If ![](http://www.codecogs.com/png.latex?S \vdash \Box X \rightarrow X) (someone tells you If \[I tell you\] X, then X is true)

Then ![](http://www.codecogs.com/png.latex?S \vdash X) (someone tells you X is true)

(See [The Cartoon Guide to Löb's Theorem](http://yudkowsky.net/assets/pdf/LobsTheorem.pdf)\[pdf\] for a nice proof of this)

Here's an example:

Sketchy watch salesman: Hey, if I tell you these watches are genuine then they _are_ genuine!

You: Ok... so are these watches genuine?

Sketchy watch salesman: Of course!

It's a good thing to remember when you might have to trust someone. If someone you already trust tells you you can trust them on something, then you know that something must be true. 

On the other hand, if someone says you can _always_ trust them, well that's pretty suspicious... If they say you can trust them on everything, that means that they will never tell you a lie - which is logically equivalent to them saying that if they _were_ to tell you a lie, then that lie must be true. So by Löb's theorem, they will lie to you. ([Gödel's second incompleteness theorem](http://en.wikipedia.org/wiki/G%C3%B6del_incompleteness_theorem#Second_incompleteness_theorem))

* * *

Despite his name, you actually trust Shady quite a bit. He's never told you or anyone else anything that didn't end up being true. And he's careful not to make any suspiciously strong claims about his honesty.

So your new plan is to ask Shady if Bob will cooperate with you. If so, then you will cooperate. Otherwise, defect. (FairBot)

It's game time! You look at Bob's algorithm, and it turns out he picked the exact same algorithm! He's going to ask Shady if _you_ will cooperate with _him_. Well, the first step is to ask Shady, "will Bob cooperate with me?" 

Shady looks at Bob's algorithm and sees that if Shady says you cooperate, then Bob cooperates. He looks at your algorithm and sees that if Shady says Bob cooperates, then you cooperate. Combining these, he sees that if he says you _both_ cooperate, then both of you will cooperate. So he tells you that you will both cooperate (your dad was right!)

Let A stand for "Alice cooperates with Bob" and B stand for "Bob cooperates with Alice".

From looking at the algorithms, ![](http://www.codecogs.com/png.latex?S\vdash \Box A \rightarrow B) and ![](http://www.codecogs.com/png.latex?S\vdash \Box B \rightarrow A). 

So combining these, ![](http://www.codecogs.com/png.latex?S\vdash \Box (A \& B) \rightarrow (A \& B)).

Then by Löb's theorem, ![](http://www.codecogs.com/png.latex?S\vdash A \& B).

Since that means that Bob will cooperate, you decide to actually cooperate. 

Bob goes through an analagous thought process, and also decides to cooperate. So you cooperate with each other on the prisoner's dilemma! Yay!

* * *

That night, you go home and remark, "it's really lucky we both ended up using Shady to help us, otherwise that wouldn't have worked..."

Your dad interjects, "Actually, it _doesn't_ matter - as long as they were both smart enough to count, it would work. This ![](http://www.codecogs.com/png.latex?\Box X) doesn't just say 'I tell you X', it's stronger than that - it actually says 'Anyone who knows [basic arithmetic](http://en.wikipedia.org/wiki/Peano_arithmetic) will tell you X'. So as long as they both know a little arithmetic, it will still work - _even_ if one of them is [pro-axiom-of-choice](http://en.wikipedia.org/wiki/Axiom_of_choice), and the other is pro-axiom-of-life. The cooperation is _robust_." That's really cool! 

But there's another issue you think of. Sometimes, just to be tricky, the tournament organizers will set up a game where you have to play against a rock. Yes, literally just a rock that holding the cooperate button down. If you played against a rock with your current algorithm, well you start by asking Shady if the rock will cooperate with you. Shady is like, "well yeah, duh." So then you cooperate too. But you could have gotten _three_ points by defecting! You're missing out on a totally free point! 

You think that it would be a good idea to make sure the other player isn't a complete idiot before you cooperate with them. How can you check? Well, let's see if they would cooperate with a rock placed on the defect button (affectionately known as 'DefectRock'). If they know better than that, and they will cooperate with you, _then_ you will cooperate with them. 

* * *

The next morning, you excitedly tell Shady about your new plan. "It will be like before, except this time, I also ask you if the other player will cooperate with DefectRock! If they are dumb enough to do that, then I'll just defect. That way, I can still cooperate with other people who use algorithms like this one, or the one from before, but I can also defect and get that extra point when there's just a rock on cooperate."

Shady get's an awkward look on his face, "Sorry, but I can't do that... or at least it wouldn't work out the way you're thinking. Let's say you're playing against Bob, who is still using the old algorithm. You want to know if Bob will cooperate with DefectRock, so I have to check and see if I'll tell Bob that DefectRock will cooperate with him. I would have say I would _never _tell Bob that DefectRock will cooperate with him. But by Löb's theorem, that means I _would_ tell you this obvious lie! So that isn't gonna work."

Notation, ![](http://www.codecogs.com/png.latex?X(Y)=C) if X cooperates with Y in the prisoner's dilemma (or = D if not). 

You ask Shady, does ![](http://www.codecogs.com/png.latex?B(DR)=D)?

Bob's algorithm: ![](http://www.codecogs.com/png.latex?B(DR)=C) only if ![](http://www.codecogs.com/png.latex?S\vdash DR(B)=C).

So to say ![](http://www.codecogs.com/png.latex?B(DR)=D), we would need ![](http://www.codecogs.com/png.latex?S\vdash \neg\Box (DR(B)=C)). 

This is equivalent to ![](http://www.codecogs.com/png.latex?S\vdash \Box (DR(B)=C) \rightarrow (DR(B)=C)), since ![](http://www.codecogs.com/png.latex?DR(B)=C) is an obvious lie. 

By Löb's theorem, ![](http://www.codecogs.com/png.latex?S\vdash DR(B)=C), which is a lie. 

<Extra credit: does the fact that Shady is the one explaining this mean you can't trust him?>

<Extra extra credit: find and fix the minor technical error in the above argument.>

Shady sees the dismayed look on your face and adds, "..._but_, I know a guy who can vouch for me, and I think maybe that could make your new algorithm work."

So Shady calls his friend T over, and you work out the new details. You ask _Shady_ if Bob will cooperate with you, and you ask _T_ if Bob will cooperate with DefectRock. So T looks at Bob's algorithm, which asks Shady if DefectRock will cooperate with him. Shady, of course, says no. So T sees that Bob will defect against DefectRock, and lets you know. Like before, Shady tells you Bob will cooperate with you, and thus you decide to cooperate! And like before, Bob decides to cooperate with you, so you both cooperate! Awesome! (PrudentBot)

If Bob is using your new algorithm, you can see that the same argument goes through mostly unchanged, and that you will still cooperate! And against a rock on cooperate, T will tell you that it will cooperate with DefectRock, so you can defect and get that extra point! This is really great!!

* * *

(ok now it's time for the _really_ cheesy ending)

It's finally time for the tournament. You have a really good feeling about your algorithm, and you do really well! Your dad is in the audience cheering for you, with a really proud look on his face. You tell your friend Bob about your new algorithm so that he can also get that extra point sometimes, and you end up tying for first place with him!

A few weeks later, Bob asks you out, and you two start dating. Being able to cooperate with each other robustly is a good start to a healthy relationship, and you live happily ever after! 

The End.