2025

Why Quadratic Funding Is Not Optimal

Introduction

Quadratic funding has received a lot of attention recently as a mechanism for funding public goods. The Gitcoin grants program alone has distributed over $59M through QF funding rounds as of January 20241.

QF is appealing because it is theoretically optimal under certain assumptions2. The problem is that these assumptions don’t ever hold in reality.

The theory behind QF is sound and elegant, and the authors of the original paper are clear about the assumptions. They don’t claim they are likely to hold in reality, and warn about the consequences when they don’t hold.

2024

What Is a Social Protocol?

Introduction

The rules that determine what gets attention on social platforms are often called “algorithms,” but algorithms are only part of the story. Another way to understand social platforms is as social protocols, or sets of formal and informal rules that groups use to allocate their collective attention.

Like parliamentary procedure or courtroom rules, social protocols shape conversations: they determine what topics are discussed and which voices are heard. This can help explain some of the phenomena we see in social networks—like filter bubbles, polarization, and misinformation—and suggest ways social protocols could be engineered to promote healthier outcomes.

Deliberative Consensus Protocols

Deliberative Consensus Protocols

Introduction: Scalable Group Decision-Making

A deliberative consensus protocol is a process that online groups can use to make decisions. It’s designed to produce good decisions that are fair and manifest the collective intelligence of the group. And it’s designed to work at scale.

This is not easy. Once a group gets large enough, people will start trying to manipulate the results. And even if everyone acts in good faith, it is hard for a large group to agree even on basic facts, let alone optimal decisions. And even if people agree on the facts, they may have vastly different values and preferences.

Multidimensional Community Notes

Multidimensional Community Notes

Introduction

In my article on Understanding Community Notes, I describe the basic Matrix Factorization algorithm used to identify notes that are helpful despite user polarization. In this article, I introduce a way to break this algorithm and describe an variation of the algorithm that uses 2-factor Matrix factorization.

Breaking the Algorithm

The algorithm uses Matrix Factorization to find a latent factor that best explains the variation among users’ votes. It assumes that this latent factor corresponds to some sort of polarization within the community. But what if the latent factor is due to diversity but not polarization? What if the factor that best explains variation in users’ votes corresponds to, for example, how informed or educated that user is? For example, suppose in some expert advice forum the regression for a post looks like this.

Understanding Community Notes and Bridging-Based Ranking

Understanding Community Notes and Bridging-Based Ranking

UPDATE: See a discussion of this article on Hacker News.

Introduction

Bridging-Based Ranking is a way of scoring and ranking online content that bridges divides.

The term “Bridging-Based Ranking” was introduced in this essay by Aviv Ovadya of the Harvard Kennedy School Belfer Center. In his essay Ovadya explains how social media algorithms today tend to promote polarization and division. But it doesn’t have to be this way. Instead of promoting divisive comment that triggers people’s tribal instincts, couldn’t the algorithms help find and promote areas of common ground?

2023

Representationless Types

TODO

“precisionless” numbers

Summary

In my essay on functional equality, I discuss situations where there are multiple representations of the same underlying value.

I suggest that language and library designers might define representationless types for situations where there are multiple ways of representing the same underlying value.

For example, a UniversalTime type without a timezone would be different from the LocalTime type with a timezone.

Because they are different types, a UniversalTime value could not be compared to a LocalTime value, even if the timezone of the LocalTime value happened to be GMT. But LocalTime would have a UniversalTime() method. So to see if two different LocalTime values in two different timezones represented the same actual moment in time, just compare their UniversalTime values:

2021

The Meta-Reasoner

In the Introduction to Distributed Bayesian Reasoning, we argue that the rules of Bayesian inference can enable a form of distributed reasoning.

In this article we introduce the idea of meta-reasoner, which is the hypothetical fully-informed average juror.

The meta-reasoner resembles the average juror in that it holds prior beliefs equal to the average beliefs of the participants, but it is fully-informed because it holds beliefs for every relevant sub-jury.

A Bayesian Inference Primer

“When you have eliminated the impossible, all that remains, no matter how improbable, must be the truth.”

– Sherlock Holmes (Arthur Conan Doyle)

For a long time Bayesian inference was something I understood without really understanding it. I only really got it it after reading Chapter 2 of John K. Kruschke’s textbook Doing Bayesian Data Analysis, where he describes Bayesian Inference as Reallocation of Credibility Across Possibilities

I now understand Bayesian Inference to be essentially a mathematical generalization of Sherlock Holmes’ pithy statement about eliminating the impossible. This article is my own attempt to elucidate this idea. If this essay doesn’t do the trick, you might try Bayesian Reasoning for Intelligent People by Simon DeDeo or Kruschke’s Bayesian data analysis for newcomers.

The Deliberati Argument Model

In this article we introduce an argument model: a set of terms for analyzing arguments by naming their parts. There are various argument models in the academic literature on argumentation theory and related fields but none provide us with precise definitions for all the concepts behind our algorithms for improving online conversations. So we will define those concepts here.

Anatomy of an Argument

Our model incorporates the basic ideas from the influential Toulmin model of argumentation first introduced in 1948, but uses a simpler model with more modern terminology.

The Law of Attention

The Law of Attention

In this article, I argue that we can apply game theory to explain and control the behaviors that dominate in an online community. Not only can game theory explain why misinformation and abuse are so common in social platforms, it can be used to design social platforms that will be filled with honest, informed, civil, and behavior.

Attention Games

“If a tree falls in a forest and no one is around to hear it, does it make a sound? If content is distributed and no attention is paid to it, does it matter?”

2020

Moderation as Consensus

Moderation as Consensus

In this article I argue that a decentralized community moderation system can be seen as is a kind of consensus protocol, similar to those used to secure blockchains; and that such a protocol can be designed to produce a Nash equilibrium where users reliably enforce a commonly-understood set of community standards of relevance and civility.

The Fundamental Moderation Problem

Most casual users of social media have no idea of the magnitude of the moderation problem. We take for granted that our Twitter and Facebook feeds are free from videos of live-streamed suicides, violent executions, and child abuse. We don’t see the small army of tens of thousands of moderators (35,000 at Facebook as of Oct 2020) at work behind our feeds, spending all day viewing the most horrific content in the world so that we don’t have to.

Fighting Bias with Bias

Featured image of post Fighting Bias with Bias

The other day a friend of mine watched an online documentary about the wet markets in Wuhan, and decided not to share it with others. She thought it might contribute to racism against Chinese people, because it suggested that their cultural practices were to blame for COVID-19. Although the documentary seemed objective, she said, why share something that can do no good but might cause harm?

Her attitude does not seem unreasonable to me. The problem is that it is very hard to see the subtle way that decisions like these add up, and lead not just to biased views of the world, but to polarization and division.

Truth in the Time of Coronavirus

Featured image of post Truth in the Time of Coronavirus

Many of us struggle to separate the information from the misinformation on social media, especially in the past weeks and months as we seek facts regarding COVID-19. The platforms themselves do not help much. It seems increasingly clear that the algorithms used to determine which posts and tweets show up at the top of your feed, having been optimized for engagement, are inadvertently optimized for misinformation.

But social media is still useful, because accurate information does spread too. And it spreads fast. But it’s up to us to judge for ourselves which information is true and which isn’t, and sometimes we get it wrong.

2017

Nuance in Political Debate

Featured image of post Nuance in Political Debate

In public political debate today, there seems to be little capacity for nuance.

For example, many conservatives seem unable, or unwilling, to differentiate between marijuana and “drugs”. Or for example, many liberals seem unable, or unwilling, to differentiate between legal and illegal immigration.

I believe politicians and pundits often understand the nuance, but just pretend not to. If you act like your opponent made a statement about B when they actually made a statement about A, many people in your audience will believe it. You can them trick your audience into believing your opponent has a different opinion than they actually have – usually a more extreme and idiotic opinion.

The Hive Mind

Featured image of post The Hive Mind

Components of Belief

None of us are omniscient. We can't observe the world and arrive independently at the truth of all things.

Instead we depend on other minds. We trust others to delve deeply into questions of science, politics, and religion, about which we may know little, and then we add our own reason and experience to form our own opinions.

Thus our belief is influenced by:

  1. Our own experience
  2. Our own reason
  3. Our perception of the beliefs of others

Belief Networks

Our beliefs constantly evolve, as we process the beliefs of others, gleaned from conversation, social networks, and major media. The beliefs we hear the most tend to have greater influence. We think, consciously or subconsciously, that if a lot of people believe something, it is likely true.

Beliefs propagate through society, following the rules of networks: weakening with distance, self-reinforce with proximity.

Victims, Villains, Heroes: Righteous Outrage and Social Status

Featured image of post Victims, Villains, Heroes: Righteous Outrage and Social Status

Politics and Social Status

People’s politics are partly driven by a desire for status.

People tend to express political views that will win the approval of their peers. They tend to remain silent if they hold opinions that would be criticized by their peers.

These belief systems become self-reinforcing in each subgroup of society. Churchgoers tend to adopt the beliefs of their congregation. Hollywood actors tend to adopt the beliefs of Hollywood. Police tend to share political views with other police. And so on.

2015

Effects without Side-Effects

Featured image of post Effects without Side-Effects

In my post on Procedures in a Pure Language, I discuss how even pure functional languages can be used to create procedures that have effects, and how that is how things should be. I propose a little language where these impure procedures can coexist with pure functions in a way that makes the line between pure and impure very clear.

In this post, I propose adding a stricture to this language that ensures that, while procedures can have effects, they cannot have side-effects.

Functional Environment Variables

Featured image of post Functional Environment Variables

Global environment variables violate a core principle of functional programming. For example, this is not very acceptable in the FP world:

def hello = 
  if(locale == 'en.US') 
    "hello"
  elsif(locale == 'fr.FR')
    "bonjour"

locale shouldn’t just be there as a global. In an pure functional language it should be passed as a parameter, according to the the principle of referential transparency.

def hello(locale) = 
  if(locale == 'en.US') 
    "hello"
  elsif(locale == 'fr.FR')
    "bonjour"

But this means you also have to pass locale to every function that calls hello.

Functional Dependency Injection

Featured image of post Functional Dependency Injection

In this post I’ll talk about dependency injection and IoC in functional programming languages, and propose a solution for achieving IoC with given/inject preprocessing.

The terms Dependency Injection and Inversion of Control tend to be used in OOP circles, though these concepts are applicable to virtually any language.

Dependency Injection for Dummies

A good summary of the definitions of these concepts is the first answer by Garret Hall on the stack overflow question Inversion of Control vs Dependency Injection. Adam Warski has another good blog post on dependency injection in a post OO world.

Procedures in a Pure Language

Featured image of post Procedures in a Pure Language

The Problem

The fact that you can write procedures, which produce side-effects, in Haskell, which is supposed to be a pure language, can be confusing.

I think the key to clearing up the confusion is to understand that most Haskell programs are actually programs that produce programs – like preprocessors in CPP. Conal Elliott’s post The C language is purely functional explores this idea.

The Haskell language itself is pure. When evaluated, Haskell expressions have no side effects, and are referentially transparent.

Implicit Currying and Folded Application

Featured image of post Implicit Currying and Folded Application

Implicit currying and folded application are language feature that render moot the distinction between curried and un-curried functions, allowing functions written in curried style to be called as un-curried functions and vice-versa.

Quick Background: Currying

Currying is the technique of translating a function that takes multiple arguments, or a tuple of arguments (an n-ary function) into a sequence of functions, each with a single argument. For example:

// binary function (uncurried form)
let product = (x,y) -> x*y

// curried form of same function
let product = x -> y -> x*y

The curried form of the function has to be invoked differently than the uncurried form:

2013

The Decision Engine and Prediction Markets

Featured image of post The Decision Engine and Prediction Markets

Today I have been thinking about Prediction Markets, and thought I would share some thoughts on how the Decision Engine could be designed to behave very much like a Prediction Market.

If you aren’t familiar with prediction markets, check out this explanation from Argon Group.

Verifiable Events

Prediction markets rely on events that will at some point in the future be objectively and unambiguously verifiable (e.g. who won a game, who was elected president). The Decision Engine, on the other hand, is designed for making predictions or decisions on questions that may be matters of opinion or judgement, with no external way of judging correctness of that decision. So how could the Decision Engine resemble a prediction market?

The Consensus Index as Market Price

The answer is the consensus index, which is a measure of the consensus on any question. As a discussion proceeds and supporting- and counter-arguments are introduced, discussed, validated or discarded, people's opinions will change. But (and this is a key aspect of the Decision Engine's design) it will be calculated not as the percentage of participants that agree/disagree, but the probability that a participant will agree/disagree after reading all the arguments.

The Consensus index will tend to change over time, especially as people introduce convincing arguments. It is this difference between the initial, pre-argument consensus index and the final consensus index (determined by some stopping condition such as time or stability) that makes for the possibility of an interesting prediction market.

Generic Syntax

Featured image of post Generic Syntax

Is it really necessary to invent a new syntax, complete with a new grammar and parser, for every new programming language? Is there a generic syntax that can conveniently express the semantics of many languages? Since all languages, whatever the syntax, are eventually parsed into an abstract syntax tree, couldn’t we just use a general language for expressing abstract syntax trees?

XML and LISP

XML was designed to be generic enough to express data and concepts from virtually any domain. So the AST of, say, a Java program could be represented in XML:

Java

[ruby] public Integer sum(Integer x, Integer y) { return x+y }

[/ruby]

Mekong Lights

Featured image of post Mekong Lights

The Mystery

Abdul wanted to see the Mekong Lights. He had seen a Thai movie eight years ago called Mekong Full Moon Party. It was a fictional story featuring one of the world’s most fascinating unexplained phenomena: mysterious balls of light that up shoot from the Mekong every year, as the full moon rises on the eleventh month of the lunar calendar. Ever since, Abdul had been saving money and dreaming of the day he would make the pilgrimage to see these lights.

Introducing the "Decision Engine"

Featured image of post Introducing the "Decision Engine"

My big project right now is something called a “decision engine”. Put simply, a decision engine is:

"a conversation-based process for group decision making"
At its simplest it is a comments system that facilitates better online discourse, by adding a layer of structure and process designed to unlock the potential of the group to arrive at positive, useful results -- a mechanism for aggregating the collective intelligence of a group. The process helps ensures that the contributions of each individual are fairly considered by other members of the group, so that relevant information and useful arguments are surfaced and discussed. It requires the final decision to be supported on a solid foundation of reasons, and for those supporting that decision to defend those reasons from counter arguments from other participants in the group -- or see the decision reversed.

The process uses game mechanics to create the right motivations, awarding players for introducing and defending reasons for supporting a decision, but also for acknowledging valid counter-arguments, and abandoning an argument if they see they will not be able to defend it.

0001

Bayesian Argumentation Definitions

Bayesian Argumentation: Summary of Definitions

Below is a summary of all the terms and equations defined in the essays in this series, followed by a detailed example.

  • Claim: A statement that one can agree or disagree with

  • Premise: A claim intended to support or oppose some conclusion

  • Conclusion: The claim supported or opposed by the premise

  • Argument: A premise asserted in support of or opposition to some conclusion

For an argument with premise 𝐵 and conclusion 𝐴, and a subject whose beliefs are represented by probability measure P…

Warrants and Corelevance

This is the final article in my series on Bayesian Argumentation. To understand this essay, read the introductory article and the article on [Relevance and Acceptance] (/relevance-and-acceptance).

Relevance is Not Absolute

Relevance exists in the context of the subject’s other prior beliefs. For example, if the subject believes that ($\bar{𝐶}$) the car is out of gas, and also ($\bar{B}$) the battery is dead, then both of these are good reasons to believe ($\bar{A}$) the car won’t start.

Informativeness and Persuasiveness

Why Accept the Premise?

In the previous essay in this series, we defined the ideas of necessity and sufficiency from the perspective of a Bayesian rational agent. If an argument is necessary, then if the subject were to reject the premise, they would decrease their acceptance of the conclusion. And if an argument is sufficient, then if the subject were to accept the premise, they would increase their acceptance of the conclusion.

Necessity and Sufficiency

Argument and Information

In the previous essay in this series, we introduced the idea of relevance, and said that a premise is relevant to the conclusion iff $P(A \vert B) > P(A \vert \bar{B})$.

Consider the argument (𝐴) this is a good candidate for the job because (𝐵) he has a pulse. Having a pulse may not be a very persuasive reason to hire somebody, but it is probably quite relevant, because if the candidate did not have a pulse, the subject would probably be much less likely to want to hire him. That is $P(A \vert B) > P(A \vert \bar{B})$.

Entropy as a Measure of Uncertainty

Measuring Uncertainty

How do you measure “uncertainty”?

That may seem like an odd question. But let’s just dive right into it, because starting down this path of inquiry will lead us step by step to the definition of the fascinating concept of Shannon entropy.

“I’m 99% Certain”

We can start with one common way people express certainty. You might say “I’m 99% certain it will rain today”. This, of course, implies that you’re 1% uncertain. So one obvious definition of uncertainty is the inverse of certainty, or $1 - p$, where $p$ is certainty expressed as a percentage.