# Lecture 2: Muddy foreheads and failure models ## Agenda - More logistics - Muddy foreheads - Intro to failure models ## More logistics #### Announcements - See Ed - Gitlab - Please pull again if you already cloned. - Gradescope - Partner form - Grading - Points beyond what is in the syllabus - Late policy #### Teaching philosophy - To understand X, build an X - Systems <-> Theory ## Finishing up intro from last time - Challenges and fallacies (See L1 notes) ## Muddy foreheads Silly example to help us practice thinking through a scenario with multiple collaborating/communicating participants. #### Setup - Suppose there are \(n\) children and one teacher - The children have just come inside from playing, and \(k\ge 1\) of them have mud on their foreheads - (\(k\) is not known to the children) - The children are all perfectly rational and logical (:joy:) - The children sit in a circle - Everyone can see everyone else's forehead - No one can see their own forehead - The children cannot and do not communicate. - Q: based on what they see and know, can any child tell if they have mud on their forehead? - No. #### The game - The teacher says we will play the following game: - The teacher announces "someone has mud on their forehead" - while True: - everyone close their eyes - raise your hand if you know you have mud on your forehead - put your hands down - open your eyes - teacher announces results as follows: - if exactly the right set of people raise their hand, everyone wins and game is over - if at least one person raises their hand, but not exactly the right set, everyone loses and game is over - if no one raises their hand, teacher announces that no one did, and game continues in next round #### What happens? - We worked this out in class

- First, let's think about the case where \(k=1\) - when the teacher announces "someone has mud", the muddy student gets new information! (everyone they can see does not have mud) so they raise their hand. - When \(k=2\), in first round, nobody raises hand. - But then teacher announces that no one raised hand, and *that* gives them information. - From one of the muddy student's perspectives, we can see that there is only one other muddy student, so they know \(k=1\) or \(k=2\) - So after that other student does not act in the first round (and because they know that other student is perfectly rational etc.), we can conclude that we are muddy. - In general, game proceeds for \(k-1\) rounds where no one raises their hand, and then all muddy students raise their hand in the \(k\)-th round. #### Why is this interesting? - When \(k>1\), the teacher's announcement does not tell any student any information they don't already know - But the game doesn't work without the announcement - "Paradox" - The paradox is resolved by realizing that the announcement tells us something about what *others* know. - Recall \(k=2\). After the announcement, if we are a muddy student, we know that the only muddy student we see would be able to raise their hand if \(k=1\). - So knowledge about *what other people know* is essential to the example #### Why is this relevant to distributed systems? - Each node has their own local state - They can send messages about their state to other nodes - Other nodes can respond saying "I received your message" - Now the original sender "knows that the receiver knows" about our state - This kind of reasoning is pervasive.

- One hard thing about reasoning about distributed systems is separating the "bird's eye view" from the local view - In single node programming, this distinction does not exist - But this distinction is absolutely fundamental to distributed systems - Unless we communicate, I have no idea what your local state is. - Even if we do communicate, I only know what you tell me, and I only know that it was true when you sent the message. - Partial information.