EconCSLib.GameTheory.ExtensiveGame.GameTree #
Finite extensive-form games of perfect information, without chance, encoded as a generic inductive type.
Design #
inductive GameTree (N U : Type*)
| Leaf (payoff : N → U)
| Node (mover : N) (head : GameTree N U) (tail : List (GameTree N U))
- N — the player set (need not be finite or decidable).
- U — the payoff type (will acquire
[TotalPreorder U]at theorem sites, not in the type definition — Bourbaki discipline). - Finite via inductive structure.
- Non-empty children at each
Nodevia thehead : GameTree+tail : List ...split —headprovides a witness,tailthe rest. - No
Nature/ chance constructor: chance is deferred to a futureStochasticGameTreemodule (see project memory 2026-04-20).
Main definitions #
GameTree— the inductive type itselfGameTree.size— structural size (well-founded recursion helper)GameTree.children— the full child listhead :: tailat aNodeGameTree.mapChildren— apply a function to every child of aNode
References #
- [MSZ, Ch. 3] Maschler, Solan, Zamir, Game Theory (Cambridge, 2013) — extensive games (backward induction; Kuhn 1953)
A finite extensive-form game of perfect information, without chance.
Leaf payoff— a terminal state with a payoff vectorN → U.Node mover head tail— a decision node owned bymover, with non-empty childrenhead :: tail.
Finiteness is built into the inductive type; non-emptiness of
children is built into the Node constructor via head + tail.
- Leaf {N : Type u_1} {U : Type u_2} (payoff : N → U) : GameTree N U
- Node {N : Type u_1} {U : Type u_2} (mover : N) (head : GameTree N U) (tail : List (GameTree N U)) : GameTree N U
Instances For
Structural size, used for well-founded recursion.
Equations
- (GameTree.Leaf payoff).size = 1
- (GameTree.Node mover h t).size = 1 + h.size + (List.map GameTree.size t).sum
Instances For
Subtree relation #
Subtree s g means the tree s occurs somewhere inside g (reflexively, or
as the head / a tail element, recursively). Useful for stating subgame-perfect
properties quantified over all reachable subgames.
Subtree s g — s occurs as a subtree of g.
- refl {N : Type u_1} {U : Type u_2} (g : GameTree N U) : g.Subtree g
- inHead {N : Type u_1} {U : Type u_2} (s : GameTree N U) (m : N) (h : GameTree N U) (t : List (GameTree N U)) (hs : s.Subtree h) : s.Subtree (Node m h t)
- inTail {N : Type u_1} {U : Type u_2} (s : GameTree N U) (m : N) (h : GameTree N U) (t : List (GameTree N U)) {c : GameTree N U} (hmem : c ∈ t) (hs : s.Subtree c) : s.Subtree (Node m h t)
Instances For
Strong induction on size #
A size-based strong induction principle: to prove motive g, assume
motive c for every child c ∈ h :: t of a Node. Stronger than the
default inductive recursor (which only gives IH on the head), and
precisely what backward-induction proofs need.
Strong induction: to prove motive g, it suffices to handle Leaf
and, for each Node, to prove the motive given the motive for every
child (head or tail).