Combinatorial & conditional markets
Hanson designed the market scoring rule for modular combinatorial information aggregation: a single maker over the joint outcome space of several base variables prices every logical combination of them at once and keeps the implied joint distribution coherent, no Dutch book across related securities. Running one LMSR over the $2^n$ joint states of $n$ binary variables turns a bag of separate binaries into a real probabilistic model.
One maker over the joint states
With $n$ binary variables there are $2^n$ joint states; the LMSR holds a share vector $q$ over them and quotes the joint distribution as the softmax
The worst-case maker loss is bounded by $b\log(2^n)$, exactly as for a flat LMSR; the combinatorial structure costs nothing in risk.
Events, marginals, conditionals
An event is any subset of states (a logical formula over the variables); its implied probability is the sum of the state prices it covers. From the one joint distribution you read every derived quantity coherently:
The conditional is what makes the market combinatorial rather than a set of independent binaries: a trader who buys the security paying out on the joint event $A \wedge B$ moves not only the marginals $P(A)$ and $P(B)$ but the conditional $P(A \mid B)$, the market learns a dependence. This is the substrate for "if $B$ then $A$" conditional markets and the reputation-weighted combinatorial markets of platforms like SciCast.
In this repo
mechanisms/combinatorial.py
provides CombinatorialMarket(n_vars, b) with
prices() (the joint), prob(event),
marginal(i), conditional(a, b),
buy_event(event, shares), and max_loss. Events are
boolean masks built with var(i, value) and combined with
&, |, ~. The demo
examples/sim_combinatorial.py
starts from independence, buys $A \wedge B$, and watches $P(A \mid B)$ rise
above $P(A)$ while Bayes consistency holds.
Try it
A combinatorial LMSR over two binary variables (four joint states). Buy shares of the event “A=1” and of “B=1”; the maker keeps every marginal and conditional coherent. Betting only on A still moves $P(A\wedge B)$, but leaves $P(B\mid A)=P(B)$; A and B stay independent.
Code: mechanisms/combinatorial.py ·
Demo: examples/sim_combinatorial.py ·
Related: LMSR, cost-function makers ·
Research: gaps-and-roadmap.md