The states of the graph game #
The game that carries DescriptiveComplexity.EXPTIME to SO-GAME has one
block for everything: n
rounds of the point block (DescriptiveComplexity.repMerged) extended by tag
bits naming a phase. This file fixes the phases and says what a state is.
The phases #
DescriptiveComplexity.Ph has six families, and the whole design of the game is
in the table:
| phase | owner | what its moves are |
|---|---|---|
startPick tx | ∀ | prove AGStart x; and play from x |
main tx | ∃ | claim AGWon x; or claim x is existential; or claim it is universal |
exStep tx ty | ∀ | prove ¬AGUniv x; prove AGMove x y; and win from y |
allCert tx ty | ∀ | prove AGUniv x; prove AGMove x y; and answer every y' |
allStep tx ty | ∃ | refute AGMove x y; or win from y |
pre s tx ty j pol | pol | fill round n - j, or – at j = 0 – be decided by the kernel |
Two of the six families are there for reasons that are easy to get wrong and expensive to discover late.
allCertcertifies a successor before the universal player moves.DescriptiveComplexity.WinsOn.allrequires a universal position to have a legal move, so a universal node with none loses; without the witness the simulation would let the existential player win there by refuting every proposed move. The convention that a stuck universal position loses is paid for here, once.allStepis existential and may refute. The universal player proposes an arbitrary tagged tuple of points, legal or not; the existential player escapes an illegal proposal by proving¬AGMove x yrather than by the move being filtered out, which no sentence over the base could do.
The claim phases (exStep, allCert) are universal with the proof and the
play as sibling moves: claiming falsely loses on the proof branch, so the
existential player is forced to tell the truth about AGUniv x.
The states #
A state is DescriptiveComplexity.ExpExpansion.stateAssign: a phase and one
assignment per round. Rounds are not guarded to be points in general – the play
rounds of a prefix range over all assignments, the guards living inside the
kernel (DescriptiveComplexity.ExpExpansion.stepF) – but the rounds of every
node-carrying phase are, which is what
DescriptiveComplexity.ExpExpansion.allRoundsPointF asserts at the start and
every node move preserves.
The phases #
The phases of the graph game: tx, ty are the tags of the two nodes the
state carries, j the number of play rounds a prefix has left and pol the
player whose turn it is there.
- startPick
{T : Type}
{Dm : ℕ}
(tx : T)
: Ph T Dm
A candidate start node has been chosen.
- main
{T : Type}
{Dm : ℕ}
(tx : T)
: Ph T Dm
The game is at the node
x. - exStep
{T : Type}
{Dm : ℕ}
(tx ty : T)
: Ph T Dm
The existential player claims
xis his and moves toy. - allCert
{T : Type}
{Dm : ℕ}
(tx ty : T)
: Ph T Dm
The existential player claims
xis universal, withyas witness. - allStep
{T : Type}
{Dm : ℕ}
(tx ty : T)
: Ph T Dm
The universal player has proposed the move to
y. - pre
{T : Type}
{Dm : ℕ}
(s : Sub)
(tx ty : T)
(j : Fin (Dm + 1))
(pol : Bool)
: Ph T Dm
A question is being decided,
jplay rounds left.
Instances For
Dependency graph
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.startPick a) (DescriptiveComplexity.Ph.startPick b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.startPick tx) (DescriptiveComplexity.Ph.main tx_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.startPick tx) (DescriptiveComplexity.Ph.exStep tx_1 ty) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.startPick tx) (DescriptiveComplexity.Ph.allCert tx_1 ty) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.startPick tx) (DescriptiveComplexity.Ph.allStep tx_1 ty) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.startPick tx) (DescriptiveComplexity.Ph.pre s tx_1 ty j pol) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.main tx) (DescriptiveComplexity.Ph.startPick tx_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.main a) (DescriptiveComplexity.Ph.main b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.main tx) (DescriptiveComplexity.Ph.exStep tx_1 ty) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.main tx) (DescriptiveComplexity.Ph.allCert tx_1 ty) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.main tx) (DescriptiveComplexity.Ph.allStep tx_1 ty) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.main tx) (DescriptiveComplexity.Ph.pre s tx_1 ty j pol) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.exStep tx ty) (DescriptiveComplexity.Ph.startPick tx_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.exStep tx ty) (DescriptiveComplexity.Ph.main tx_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.exStep tx ty) (DescriptiveComplexity.Ph.allCert tx_1 ty_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.exStep tx ty) (DescriptiveComplexity.Ph.allStep tx_1 ty_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.exStep tx ty) (DescriptiveComplexity.Ph.pre s tx_1 ty_1 j pol) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.allCert tx ty) (DescriptiveComplexity.Ph.startPick tx_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.allCert tx ty) (DescriptiveComplexity.Ph.main tx_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.allCert tx ty) (DescriptiveComplexity.Ph.exStep tx_1 ty_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.allCert tx ty) (DescriptiveComplexity.Ph.allStep tx_1 ty_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.allCert tx ty) (DescriptiveComplexity.Ph.pre s tx_1 ty_1 j pol) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.allStep tx ty) (DescriptiveComplexity.Ph.startPick tx_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.allStep tx ty) (DescriptiveComplexity.Ph.main tx_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.allStep tx ty) (DescriptiveComplexity.Ph.exStep tx_1 ty_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.allStep tx ty) (DescriptiveComplexity.Ph.allCert tx_1 ty_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.allStep tx ty) (DescriptiveComplexity.Ph.pre s tx_1 ty_1 j pol) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.pre s tx ty j pol) (DescriptiveComplexity.Ph.startPick tx_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.pre s tx ty j pol) (DescriptiveComplexity.Ph.main tx_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.pre s tx ty j pol) (DescriptiveComplexity.Ph.exStep tx_1 ty_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.pre s tx ty j pol) (DescriptiveComplexity.Ph.allCert tx_1 ty_1) = isFalse ⋯
- DescriptiveComplexity.instDecidableEqPh.decEq (DescriptiveComplexity.Ph.pre s tx ty j pol) (DescriptiveComplexity.Ph.allStep tx_1 ty_1) = isFalse ⋯
Instances For
Dependency graph
Dependency graph
Dependency graph
Who owns a phase. The two claim phases and the start phase are universal, a prefix position is universal exactly when its polarity says so and it still has a round to fill, and everything else is existential.
Equations
- (DescriptiveComplexity.Ph.startPick tx).IsUniv = True
- (DescriptiveComplexity.Ph.main tx).IsUniv = False
- (DescriptiveComplexity.Ph.exStep tx ty).IsUniv = True
- (DescriptiveComplexity.Ph.allCert tx ty).IsUniv = True
- (DescriptiveComplexity.Ph.allStep tx ty).IsUniv = False
- (DescriptiveComplexity.Ph.pre s tx ty j pol).IsUniv = (↑j ≠ 0 ∧ pol = false)
Instances For
Dependency graph
Equations
- One or more equations did not get rendered due to their size.
Dependency graph
The one block of the graph game: n rounds of the point block, extended by
tag bits naming a phase.
Equations
- X.gameBlock n T Dm = (DescriptiveComplexity.repMerged X.pointBlock n).withTag (DescriptiveComplexity.Ph T Dm)
Instances For
Dependency graph
A state of the graph game: a phase, and one assignment per round.
Equations
Instances For
Dependency graph
Dependency graph
Every round holds a point #
Every round of the state holds a point of the expanded universe. True of a starting state and preserved by every move between node phases; the play rounds of a prefix are where it stops holding, and they are never read as parameters.
Equations
- X.allRoundsPointF n = DescriptiveComplexity.listInf (List.map (X.roundPointGuardF n) (List.finRange n))
Instances For
Dependency graph
Dependency graph
A state all of whose rounds are points carries a tuple of points.