The Pauli basis test #
Blueprint def:qld-game, the paper's game game^pauli_{(q,m,d)} (ldt.tex, sec:qld-game
for the question distribution and fig:decider_pauli for the decision procedure). This is the
game thm:qld is about and lem:qld-win unpacks.
The test certifies that the players share |EPR_q⟩^{⊗ M}, M = 2^m. A player asked
(Pauli, W) measures {τ^W_h}_{h ∈ F_q^M} and reports h; every other question probes
limited information about h through its low-degree encoding g_h : F_q^m → F_q
(MIPRE.LowDegree.ldEnc), and the subtests check that those probes are consistent with each
other and across the two bases.
The three groups of question types #
type^pauli = ({Point, ALine, DLine, Pauli, Pair} × {X, Z}) ∪ type^MS ∪ {Pair} --- twenty-six
types, Ty below, in three groups with three different jobs.
(Point, W),(ALine, W),(DLine, W),(Pauli, W)run the classical low-degree test ofdef:lidt-clseparately in each basis, plus the tie from a point probe to the full outcome. The line and point content is read off the sample exactly as the seeded CL game reads it (MIPRE.LIDT.CL.chi,rep,zeroBelow), which is what makes the distribution a typed CL distribution and lets the soundness proof feedthm:lidt-cl-soundness.Pair,(Pair, W)are the commutation check. The two two-outcome measurementstr(g_{h_X}(u_X) r_X)andtr(g_{h_Z}(u_Z) r_Z)either commute or anticommute, according toγ(ω) = 0or not (MIPRE.LowDegree.acGamma, blueprintfact:omega-anticomm-prob); when they commute the verifier asks for both at once and compares.Constraint_i,Variable_jare the Magic Square, run when they anticommute --- which is exactly when they cannot be measured together.thm:ms-from-acis the completeness direction, andlem:ms-direct-anticomm(MIPRE/Background/QLD/Anticomm.lean) is the soundness direction this game consumes. The indices here are the layout's own (MIPRE.LCS.MagicSquare.layout),0-indexed against the paper's1-indexedConstraint_1..6andVariable_1..9, so the paper's distinguished pair(Point, X)--Variable_1and(Point, Z)--Variable_5isvar 0withXandvar 4withZhere.
The distribution #
adj is the type graph fig:type-graph-pauli: thirty non-loop edges (eighteen Magic Square
incidences, six line/point and point/Pauli edges, two point/variable edges, four through the
commutation check) and a self-loop at every one of the twenty-six vertices. The verifier draws
an ordered pair of adjacent types --- the graph distribution of def:graph-distribution, each
non-loop edge contributing two ordered pairs and each self-loop one, so uniform over the
2 * 30 + 26 = 86 ordered pairs --- then (u_X, u_Z, s, v, r_X, r_Z) uniformly, and hands
each player the content its type prescribes. Sampling the pair and the content independently
and uniformly is what makes Sample a product and μ_sum_one one division.
The decision procedure #
fig:decider_pauli is a format check and then seven rules. Question.fmtOk is the check --- the
table at the top of the figure --- and subtests the rules, with accepts their conjunction.
The separation is not cosmetic, and the warning is on the record: the seeded CL game shipped
without its format check, which made the test vacuous and thm:lidt-cl-soundness false about
it (reports/clgame-format-check-missing.md). The same class of error is available here with
twenty-six types instead of three, so every rule below has a witness that it can fail:
rejects_* for the format check and for each of the seven rules.
Two structural facts about the rules are worth stating mechanically rather than trusting.
subtests_covers_adj says the catch-all --- fig:ld-decider's "in all cases where no action
is indicated, accept", which this figure inherits --- is reached only at non-adjacent type
pairs, so it never accepts anything the distribution actually asks. And lowDeg_eq_cl says the
low-degree rule is the seeded CL decider at ldc = 1 and not a paraphrase of it, which is what
the figure prescribes ("accept if D^ld_{(q,m,d,1)} accepts").
Bases #
Equations
- MIPRE.QLD.instFintypeBas = { elems := {MIPRE.QLD.Bas.X, MIPRE.QLD.Bas.Z}, complete := ⋯ }
Question types #
The twenty-six question types of eq:pauli-type.
- point
(W : Bas)
: Ty
(Point, W). - aline
(W : Bas)
: Ty
(ALine, W). - dline
(W : Bas)
: Ty
(DLine, W). - pauli
(W : Bas)
: Ty
(Pauli, W). - pairB
(W : Bas)
: Ty
(Pair, W), one half of the commutation check. - pair : Ty
Pair, both halves of the commutation check at once. - con
(i : Fin LCS.MagicSquare.layout.r)
: Ty
Constraint_iof the Magic Square. - var
(j : Fin LCS.MagicSquare.layout.s)
: Ty
Variable_jof the Magic Square.
Instances For
Equations
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.point a) (MIPRE.QLD.Ty.point b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.point W) (MIPRE.QLD.Ty.aline W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.point W) (MIPRE.QLD.Ty.dline W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.point W) (MIPRE.QLD.Ty.pauli W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.point W) (MIPRE.QLD.Ty.pairB W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.point W) MIPRE.QLD.Ty.pair = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.point W) (MIPRE.QLD.Ty.con i) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.point W) (MIPRE.QLD.Ty.var j) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.aline W) (MIPRE.QLD.Ty.point W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.aline a) (MIPRE.QLD.Ty.aline b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.aline W) (MIPRE.QLD.Ty.dline W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.aline W) (MIPRE.QLD.Ty.pauli W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.aline W) (MIPRE.QLD.Ty.pairB W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.aline W) MIPRE.QLD.Ty.pair = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.aline W) (MIPRE.QLD.Ty.con i) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.aline W) (MIPRE.QLD.Ty.var j) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.dline W) (MIPRE.QLD.Ty.point W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.dline W) (MIPRE.QLD.Ty.aline W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.dline a) (MIPRE.QLD.Ty.dline b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.dline W) (MIPRE.QLD.Ty.pauli W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.dline W) (MIPRE.QLD.Ty.pairB W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.dline W) MIPRE.QLD.Ty.pair = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.dline W) (MIPRE.QLD.Ty.con i) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.dline W) (MIPRE.QLD.Ty.var j) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.pauli W) (MIPRE.QLD.Ty.point W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.pauli W) (MIPRE.QLD.Ty.aline W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.pauli W) (MIPRE.QLD.Ty.dline W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.pauli a) (MIPRE.QLD.Ty.pauli b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.pauli W) (MIPRE.QLD.Ty.pairB W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.pauli W) MIPRE.QLD.Ty.pair = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.pauli W) (MIPRE.QLD.Ty.con i) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.pauli W) (MIPRE.QLD.Ty.var j) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.pairB W) (MIPRE.QLD.Ty.point W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.pairB W) (MIPRE.QLD.Ty.aline W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.pairB W) (MIPRE.QLD.Ty.dline W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.pairB W) (MIPRE.QLD.Ty.pauli W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.pairB a) (MIPRE.QLD.Ty.pairB b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.pairB W) MIPRE.QLD.Ty.pair = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.pairB W) (MIPRE.QLD.Ty.con i) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.pairB W) (MIPRE.QLD.Ty.var j) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq MIPRE.QLD.Ty.pair (MIPRE.QLD.Ty.point W) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq MIPRE.QLD.Ty.pair (MIPRE.QLD.Ty.aline W) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq MIPRE.QLD.Ty.pair (MIPRE.QLD.Ty.dline W) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq MIPRE.QLD.Ty.pair (MIPRE.QLD.Ty.pauli W) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq MIPRE.QLD.Ty.pair (MIPRE.QLD.Ty.pairB W) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq MIPRE.QLD.Ty.pair MIPRE.QLD.Ty.pair = isTrue ⋯
- MIPRE.QLD.instDecidableEqTy.decEq MIPRE.QLD.Ty.pair (MIPRE.QLD.Ty.con i) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq MIPRE.QLD.Ty.pair (MIPRE.QLD.Ty.var j) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.con i) (MIPRE.QLD.Ty.point W) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.con i) (MIPRE.QLD.Ty.aline W) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.con i) (MIPRE.QLD.Ty.dline W) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.con i) (MIPRE.QLD.Ty.pauli W) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.con i) (MIPRE.QLD.Ty.pairB W) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.con i) MIPRE.QLD.Ty.pair = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.con a) (MIPRE.QLD.Ty.con b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.con i) (MIPRE.QLD.Ty.var j) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.var j) (MIPRE.QLD.Ty.point W) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.var j) (MIPRE.QLD.Ty.aline W) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.var j) (MIPRE.QLD.Ty.dline W) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.var j) (MIPRE.QLD.Ty.pauli W) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.var j) (MIPRE.QLD.Ty.pairB W) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.var j) MIPRE.QLD.Ty.pair = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.var j) (MIPRE.QLD.Ty.con i) = isFalse ⋯
- MIPRE.QLD.instDecidableEqTy.decEq (MIPRE.QLD.Ty.var a) (MIPRE.QLD.Ty.var b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
Instances For
Equations
- One or more equations did not get rendered due to their size.
The type graph fig:type-graph-pauli, one orientation per non-loop edge.
Equations
- MIPRE.QLD.adjRaw (MIPRE.QLD.Ty.aline W) (MIPRE.QLD.Ty.point W') = decide (W = W')
- MIPRE.QLD.adjRaw (MIPRE.QLD.Ty.dline W) (MIPRE.QLD.Ty.point W') = decide (W = W')
- MIPRE.QLD.adjRaw (MIPRE.QLD.Ty.point W) (MIPRE.QLD.Ty.pauli W') = decide (W = W')
- MIPRE.QLD.adjRaw (MIPRE.QLD.Ty.point W) (MIPRE.QLD.Ty.pairB W') = decide (W = W')
- MIPRE.QLD.adjRaw (MIPRE.QLD.Ty.pairB W) MIPRE.QLD.Ty.pair = true
- MIPRE.QLD.adjRaw (MIPRE.QLD.Ty.point MIPRE.QLD.Bas.X) (MIPRE.QLD.Ty.var j) = decide (j = MIPRE.LCS.MagicSquare.v 0 MIPRE.QLD.adjRaw._proof_8)
- MIPRE.QLD.adjRaw (MIPRE.QLD.Ty.point MIPRE.QLD.Bas.Z) (MIPRE.QLD.Ty.var j) = decide (j = MIPRE.LCS.MagicSquare.v 4 MIPRE.QLD.adjRaw._proof_9)
- MIPRE.QLD.adjRaw (MIPRE.QLD.Ty.con i) (MIPRE.QLD.Ty.var j) = decide (j ∈ MIPRE.LCS.MagicSquare.layout.V i)
- MIPRE.QLD.adjRaw x✝¹ x✝ = false
Instances For
{t, u} ∈ E(G^pauli): the graph of fig:type-graph-pauli, with the self-loop at every
vertex that the figure's caption adds.
Equations
- MIPRE.QLD.adj t u = (decide (t = u) || MIPRE.QLD.adjRaw t u || MIPRE.QLD.adjRaw u t)
Instances For
Questions #
The tuple ω = (u_X, u_Z, r_X, r_Z) every Magic Square and commutation-check question
carries.
- uX : LIDT.Point F m
The
X-side point. - uZ : LIDT.Point F m
The
Z-side point. - rX : F
The
X-side qubit basis element. - rZ : F
The
Z-side qubit basis element.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- MIPRE.QLD.instFintypeOmega = Fintype.ofEquiv ((_ : MIPRE.LIDT.Point F✝ m✝) × (_ : MIPRE.LIDT.Point F✝ m✝) × (_ : F✝) × F✝) (MIPRE.QLD.Omega.proxyTypeEquiv F✝ m✝)
The point of ω on the W side.
Equations
- ω.pt MIPRE.QLD.Bas.X = ω.uX
- ω.pt MIPRE.QLD.Bas.Z = ω.uZ
Instances For
The qubit basis element of ω on the W side.
Equations
- ω.r MIPRE.QLD.Bas.X = ω.rX
- ω.r MIPRE.QLD.Bas.Z = ω.rZ
Instances For
Questions: a type together with the content that type prescribes, in the ``Question
Content'' column of fig:decider_pauli's table. A (Pauli, W) question carries no content
(the paper's x_w = 0).
- point
{F : Type u_2}
{m : ℕ}
(W : Bas)
(y : LIDT.Point F m)
: Question F m
((Point, W), y). - aline
{F : Type u_2}
{m : ℕ}
(W : Bas)
(u₀ : LIDT.Point F m)
(s : F)
: Question F m
((ALine, W), (u₀, s)). - dline
{F : Type u_2}
{m : ℕ}
(W : Bas)
(u₀ : LIDT.Point F m)
(s : F)
(v : LIDT.Point F m)
: Question F m
((DLine, W), (u₀, s, v)). - pauli
{F : Type u_2}
{m : ℕ}
(W : Bas)
: Question F m
((Pauli, W), 0). - pairB
{F : Type u_2}
{m : ℕ}
(W : Bas)
(ω : Omega F m)
: Question F m
((Pair, W), ω). - pair
{F : Type u_2}
{m : ℕ}
(ω : Omega F m)
: Question F m
(Pair, ω). - con
{F : Type u_2}
{m : ℕ}
(i : Fin LCS.MagicSquare.layout.r)
(ω : Omega F m)
: Question F m
(Constraint_i, ω). - var
{F : Type u_2}
{m : ℕ}
(j : Fin LCS.MagicSquare.layout.s)
(ω : Omega F m)
: Question F m
(Variable_j, ω).
Instances For
Equations
- One or more equations did not get rendered due to their size.
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.point a a_1) (MIPRE.QLD.Question.point b b_1) = if h : a = b then h ▸ if h : a_1 = b_1 then h ▸ isTrue ⋯ else isFalse ⋯ else isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.point W y) (MIPRE.QLD.Question.aline W_1 u₀ s) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.point W y) (MIPRE.QLD.Question.dline W_1 u₀ s v) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.point W y) (MIPRE.QLD.Question.pauli W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.point W y) (MIPRE.QLD.Question.pairB W_1 ω) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.point W y) (MIPRE.QLD.Question.pair ω) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.point W y) (MIPRE.QLD.Question.con i ω) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.point W y) (MIPRE.QLD.Question.var j ω) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.aline W u₀ s) (MIPRE.QLD.Question.point W_1 y) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.aline W u₀ s) (MIPRE.QLD.Question.dline W_1 u₀_1 s_1 v) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.aline W u₀ s) (MIPRE.QLD.Question.pauli W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.aline W u₀ s) (MIPRE.QLD.Question.pairB W_1 ω) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.aline W u₀ s) (MIPRE.QLD.Question.pair ω) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.aline W u₀ s) (MIPRE.QLD.Question.con i ω) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.aline W u₀ s) (MIPRE.QLD.Question.var j ω) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.dline W u₀ s v) (MIPRE.QLD.Question.point W_1 y) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.dline W u₀ s v) (MIPRE.QLD.Question.aline W_1 u₀_1 s_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.dline W u₀ s v) (MIPRE.QLD.Question.pauli W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.dline W u₀ s v) (MIPRE.QLD.Question.pairB W_1 ω) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.dline W u₀ s v) (MIPRE.QLD.Question.pair ω) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.dline W u₀ s v) (MIPRE.QLD.Question.con i ω) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.dline W u₀ s v) (MIPRE.QLD.Question.var j ω) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pauli W) (MIPRE.QLD.Question.point W_1 y) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pauli W) (MIPRE.QLD.Question.aline W_1 u₀ s) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pauli W) (MIPRE.QLD.Question.dline W_1 u₀ s v) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pauli a) (MIPRE.QLD.Question.pauli b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pauli W) (MIPRE.QLD.Question.pairB W_1 ω) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pauli W) (MIPRE.QLD.Question.pair ω) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pauli W) (MIPRE.QLD.Question.con i ω) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pauli W) (MIPRE.QLD.Question.var j ω) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pairB W ω) (MIPRE.QLD.Question.point W_1 y) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pairB W ω) (MIPRE.QLD.Question.aline W_1 u₀ s) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pairB W ω) (MIPRE.QLD.Question.dline W_1 u₀ s v) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pairB W ω) (MIPRE.QLD.Question.pauli W_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pairB a a_1) (MIPRE.QLD.Question.pairB b b_1) = if h : a = b then h ▸ if h : a_1 = b_1 then h ▸ isTrue ⋯ else isFalse ⋯ else isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pairB W ω) (MIPRE.QLD.Question.pair ω_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pairB W ω) (MIPRE.QLD.Question.con i ω_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pairB W ω) (MIPRE.QLD.Question.var j ω_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pair ω) (MIPRE.QLD.Question.point W y) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pair ω) (MIPRE.QLD.Question.aline W u₀ s) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pair ω) (MIPRE.QLD.Question.dline W u₀ s v) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pair ω) (MIPRE.QLD.Question.pauli W) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pair ω) (MIPRE.QLD.Question.pairB W ω_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pair a) (MIPRE.QLD.Question.pair b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pair ω) (MIPRE.QLD.Question.con i ω_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.pair ω) (MIPRE.QLD.Question.var j ω_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.con i ω) (MIPRE.QLD.Question.point W y) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.con i ω) (MIPRE.QLD.Question.aline W u₀ s) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.con i ω) (MIPRE.QLD.Question.dline W u₀ s v) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.con i ω) (MIPRE.QLD.Question.pauli W) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.con i ω) (MIPRE.QLD.Question.pairB W ω_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.con i ω) (MIPRE.QLD.Question.pair ω_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.con a a_1) (MIPRE.QLD.Question.con b b_1) = if h : a = b then h ▸ if h : a_1 = b_1 then h ▸ isTrue ⋯ else isFalse ⋯ else isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.con i ω) (MIPRE.QLD.Question.var j ω_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.var j ω) (MIPRE.QLD.Question.point W y) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.var j ω) (MIPRE.QLD.Question.aline W u₀ s) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.var j ω) (MIPRE.QLD.Question.dline W u₀ s v) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.var j ω) (MIPRE.QLD.Question.pauli W) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.var j ω) (MIPRE.QLD.Question.pairB W ω_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.var j ω) (MIPRE.QLD.Question.pair ω_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.var j ω) (MIPRE.QLD.Question.con i ω_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqQuestion.decEq (MIPRE.QLD.Question.var a a_1) (MIPRE.QLD.Question.var b b_1) = if h : a = b then h ▸ if h : a_1 = b_1 then h ▸ isTrue ⋯ else isFalse ⋯ else isFalse ⋯
Instances For
Answers, in the ``Answer Format'' column of fig:decider_pauli's table.
- val
{F : Type u_2}
{m d : ℕ}
(a : F)
: Answer F m d
A point answer, an element of
F_q. - apoly
{F : Type u_2}
{m d : ℕ}
(f : LIDT.LinePoly F d)
: Answer F m d
An axis-parallel line answer, of degree at most
d. - dpoly
{F : Type u_2}
{m d : ℕ}
(f : LIDT.LinePoly F (m * d))
: Answer F m d
A diagonal line answer, of degree at most
m·d. - pauliAns
{F : Type u_2}
{m d : ℕ}
(h : (Fin m → Bool) → F)
: Answer F m d
A
(Pauli, W)answer, an element ofF_q^MwithM = 2^m. - bit
{F : Type u_2}
{m d : ℕ}
(b : ZMod 2)
: Answer F m d
A single bit: the answer to
(Pair, W)and toVariable_j. - bitPair
{F : Type u_2}
{m d : ℕ}
(β : Bas → ZMod 2)
: Answer F m d
(β_X, β_Z) ∈ F_2^2, the answer toPair. - bitTriple
{F : Type u_2}
{m d : ℕ}
(α : Fin 3 → ZMod 2)
: Answer F m d
(α_{v_1}, α_{v_2}, α_{v_3}) ∈ F_2^3, the answer toConstraint_i, indexed by the position of the variable in the constraint's support (MIPRE.LCS.MagicSquare.cell).
Instances For
Equations
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.val a) (MIPRE.QLD.Answer.val b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.val a) (MIPRE.QLD.Answer.apoly f) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.val a) (MIPRE.QLD.Answer.dpoly f) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.val a) (MIPRE.QLD.Answer.pauliAns h) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.val a) (MIPRE.QLD.Answer.bit b) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.val a) (MIPRE.QLD.Answer.bitPair β) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.val a) (MIPRE.QLD.Answer.bitTriple α) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.apoly f) (MIPRE.QLD.Answer.val a) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.apoly a) (MIPRE.QLD.Answer.apoly b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.apoly f) (MIPRE.QLD.Answer.dpoly f_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.apoly f) (MIPRE.QLD.Answer.pauliAns h) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.apoly f) (MIPRE.QLD.Answer.bit b) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.apoly f) (MIPRE.QLD.Answer.bitPair β) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.apoly f) (MIPRE.QLD.Answer.bitTriple α) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.dpoly f) (MIPRE.QLD.Answer.val a) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.dpoly f) (MIPRE.QLD.Answer.apoly f_1) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.dpoly a) (MIPRE.QLD.Answer.dpoly b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.dpoly f) (MIPRE.QLD.Answer.pauliAns h) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.dpoly f) (MIPRE.QLD.Answer.bit b) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.dpoly f) (MIPRE.QLD.Answer.bitPair β) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.dpoly f) (MIPRE.QLD.Answer.bitTriple α) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.pauliAns h) (MIPRE.QLD.Answer.val a) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.pauliAns h) (MIPRE.QLD.Answer.apoly f) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.pauliAns h) (MIPRE.QLD.Answer.dpoly f) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.pauliAns a) (MIPRE.QLD.Answer.pauliAns b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.pauliAns h) (MIPRE.QLD.Answer.bit b) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.pauliAns h) (MIPRE.QLD.Answer.bitPair β) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.pauliAns h) (MIPRE.QLD.Answer.bitTriple α) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bit b) (MIPRE.QLD.Answer.val a) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bit b) (MIPRE.QLD.Answer.apoly f) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bit b) (MIPRE.QLD.Answer.dpoly f) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bit b) (MIPRE.QLD.Answer.pauliAns h) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bit a) (MIPRE.QLD.Answer.bit b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bit b) (MIPRE.QLD.Answer.bitPair β) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bit b) (MIPRE.QLD.Answer.bitTriple α) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bitPair β) (MIPRE.QLD.Answer.val a) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bitPair β) (MIPRE.QLD.Answer.apoly f) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bitPair β) (MIPRE.QLD.Answer.dpoly f) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bitPair β) (MIPRE.QLD.Answer.pauliAns h) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bitPair β) (MIPRE.QLD.Answer.bit b) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bitPair a) (MIPRE.QLD.Answer.bitPair b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bitPair β) (MIPRE.QLD.Answer.bitTriple α) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bitTriple α) (MIPRE.QLD.Answer.val a) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bitTriple α) (MIPRE.QLD.Answer.apoly f) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bitTriple α) (MIPRE.QLD.Answer.dpoly f) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bitTriple α) (MIPRE.QLD.Answer.pauliAns h) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bitTriple α) (MIPRE.QLD.Answer.bit b) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bitTriple α) (MIPRE.QLD.Answer.bitPair β) = isFalse ⋯
- MIPRE.QLD.instDecidableEqAnswer.decEq (MIPRE.QLD.Answer.bitTriple a) (MIPRE.QLD.Answer.bitTriple b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
Instances For
The type of a question.
Equations
- (MIPRE.QLD.Question.point a a_1).ty = MIPRE.QLD.Ty.point a
- (MIPRE.QLD.Question.aline a a_1 a_2).ty = MIPRE.QLD.Ty.aline a
- (MIPRE.QLD.Question.dline a a_1 a_2 a_3).ty = MIPRE.QLD.Ty.dline a
- (MIPRE.QLD.Question.pauli a).ty = MIPRE.QLD.Ty.pauli a
- (MIPRE.QLD.Question.pairB a a_1).ty = MIPRE.QLD.Ty.pairB a
- (MIPRE.QLD.Question.pair a).ty = MIPRE.QLD.Ty.pair
- (MIPRE.QLD.Question.con a a_1).ty = MIPRE.QLD.Ty.con a
- (MIPRE.QLD.Question.var a a_1).ty = MIPRE.QLD.Ty.var a
Instances For
The tuple a question carries, 0 for the types that carry none.
Equations
- (MIPRE.QLD.Question.pairB W ω).omega = ω
- (MIPRE.QLD.Question.pair ω).omega = ω
- (MIPRE.QLD.Question.con i ω).omega = ω
- (MIPRE.QLD.Question.var j ω).omega = ω
- x✝.omega = { uX := 0, uZ := 0, rX := 0, rZ := 0 }
Instances For
The sample space #
The ambient content of a sample: two points, a seed, a raw diagonal direction, and the two qubit basis elements, all uniform and independent.
- uX : LIDT.Point F m
The
X-side point. - uZ : LIDT.Point F m
The
Z-side point. - s : F
The seed, which selects the axis-parallel direction through
χ. - v : LIDT.Point F m
The raw diagonal direction.
- rX : F
The
X-side qubit basis element. - rZ : F
The
Z-side qubit basis element.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
The ordered type pairs the graph distribution puts mass on.
Equations
- MIPRE.QLD.TyEdge = { p : MIPRE.QLD.Ty × MIPRE.QLD.Ty // MIPRE.QLD.adj p.1 p.2 = true }
Instances For
A run of the verifier's random choices: an ordered edge of the type graph and the ambient content, drawn independently and uniformly.
Equations
- MIPRE.QLD.Sample F m = (MIPRE.QLD.TyEdge × MIPRE.QLD.Content F m)
Instances For
The point of a content on the W side.
Equations
- c.pt MIPRE.QLD.Bas.X = c.uX
- c.pt MIPRE.QLD.Bas.Z = c.uZ
Instances For
The question a player of type t receives, the paper's typed CL functions read off the
ambient sample. The line types read it exactly as MIPRE.LIDT.CL.Sample.question does, on the
point of the relevant basis.
Equations
- One or more equations did not get rendered due to their size.
- MIPRE.QLD.Content.question hm c (MIPRE.QLD.Ty.point a) = MIPRE.QLD.Question.point a (c.pt a)
- MIPRE.QLD.Content.question hm c (MIPRE.QLD.Ty.aline a) = MIPRE.QLD.Question.aline a (MIPRE.LIDT.CL.rep (Pi.single (MIPRE.LIDT.CL.chi hm c.s) 1) (c.pt a)) c.s
- MIPRE.QLD.Content.question hm c (MIPRE.QLD.Ty.pauli a) = MIPRE.QLD.Question.pauli a
- MIPRE.QLD.Content.question hm c (MIPRE.QLD.Ty.pairB a) = MIPRE.QLD.Question.pairB a c.omega
- MIPRE.QLD.Content.question hm c MIPRE.QLD.Ty.pair = MIPRE.QLD.Question.pair c.omega
- MIPRE.QLD.Content.question hm c (MIPRE.QLD.Ty.con a) = MIPRE.QLD.Question.con a c.omega
- MIPRE.QLD.Content.question hm c (MIPRE.QLD.Ty.var a) = MIPRE.QLD.Question.var a c.omega
Instances For
The format check #
Whether an answer has the format its question's type prescribes, which is the table at the
top of fig:decider_pauli. The decider's first step is this check and it rejects if it
fails: "first checks that ... a_A and a_B also have the correct length, as can be inferred
from the table above. If not, it rejects."
Equations
- (MIPRE.QLD.Question.point W y).fmtOk (MIPRE.QLD.Answer.val a) = true
- (MIPRE.QLD.Question.aline W u₀ s).fmtOk (MIPRE.QLD.Answer.apoly f) = true
- (MIPRE.QLD.Question.dline W u₀ s v).fmtOk (MIPRE.QLD.Answer.dpoly f) = true
- (MIPRE.QLD.Question.pauli W).fmtOk (MIPRE.QLD.Answer.pauliAns h) = true
- (MIPRE.QLD.Question.pairB W ω).fmtOk (MIPRE.QLD.Answer.bit b) = true
- (MIPRE.QLD.Question.pair ω).fmtOk (MIPRE.QLD.Answer.bitPair β) = true
- (MIPRE.QLD.Question.con i ω).fmtOk (MIPRE.QLD.Answer.bitTriple α) = true
- (MIPRE.QLD.Question.var j ω).fmtOk (MIPRE.QLD.Answer.bit b) = true
- x✝¹.fmtOk x✝ = false
Instances For
Inverting the format check #
accepts rejects before any rule runs unless both answers have the shape their question's type
prescribes, so each rule may be read on one pair of constructors only. These are the inversions,
one per answer format; they are what keeps the proofs of the items below to a single branch
instead of the forty-nine a blind case split would produce.
The rules #
γ(ω), whose vanishing says that the two two-outcome measurements of ω commute
(MIPRE.LowDegree.acGamma, blueprint fact:omega-anticomm-prob).
Equations
- MIPRE.QLD.gam ω = MIPRE.LowDegree.acGamma (ZMod 2) ω.uX ω.uZ ω.rX ω.rZ
Instances For
tr_{q → 2}(a · r), the two-outcome probe of fig:decider_pauli.
Equations
- MIPRE.QLD.prb a r = (Algebra.trace (ZMod 2) F) (a * r)
Instances For
The seeded CL decider's line-against-point check at ldc = 1: the point lies on the line
and the polynomial evaluated at its parameter is the point answer.
Equations
- MIPRE.QLD.lowDeg u₀ w y f a = MIPRE.LIDT.CL.lineVsPoint u₀ w y (fun (x : Fin 1) => f) fun (x : Fin 1) => a
Instances For
The seven rules of fig:decider_pauli, on distinct types and correctly formatted answers.
Each rule is stated in both orientations, as the figure's "for w ∈ {A, B}" prescribes; the
catch-all is the figure's inherited "in all cases where no action is indicated, accept", and
subtests_covers_adj checks it is reached only off the type graph.
Equations
- One or more equations did not get rendered due to their size.
- MIPRE.QLD.pairTest hm (MIPRE.QLD.Question.pairB W ω) (MIPRE.QLD.Question.pair ω_1) (MIPRE.QLD.Answer.bit b) (MIPRE.QLD.Answer.bitPair β) = (decide (MIPRE.QLD.gam ω_1 ≠ 0) || decide (b = β W))
- MIPRE.QLD.pairTest hm (MIPRE.QLD.Question.pair ω) (MIPRE.QLD.Question.pairB W ω_1) (MIPRE.QLD.Answer.bitPair β) (MIPRE.QLD.Answer.bit b) = (decide (MIPRE.QLD.gam ω ≠ 0) || decide (b = β W))
- MIPRE.QLD.pairTest hm x✝³ x✝² x✝¹ x✝ = true
Instances For
The rules of fig:decider_pauli: equal types compare the answers, distinct types run
pairTest.
Equations
Instances For
The decision procedure of fig:decider_pauli: the format check, then the rules.
Equations
- MIPRE.QLD.accepts hm x y a b = (x.fmtOk a && y.fmtOk b && MIPRE.QLD.subtests hm x y a b)
Instances For
The rules cover the type graph #
The vacuity failure mode is a rule that is missing, so that an edge of the type graph falls
through to the catch-all and the test checks nothing on it. handled lists the type pairs
pairTest has a branch for, and handled_of_adj checks by decide that every non-loop edge
of fig:type-graph-pauli is among them. Together with the rejection witnesses below --- one
per branch, each exhibiting formatted answers that branch rejects --- that is what says no
question pair the distribution asks is accepted regardless of the answers.
The converse fails, and harmlessly: pairTest rejects some non-adjacent pairs too, for
instance (Point, X) against Variable_j for j ≠ 0, which the distribution never asks.
The type pairs pairTest has a rule for, in both orientations.
Equations
- MIPRE.QLD.handled (MIPRE.QLD.Ty.point W) (MIPRE.QLD.Ty.aline W') = decide (W = W')
- MIPRE.QLD.handled (MIPRE.QLD.Ty.aline W) (MIPRE.QLD.Ty.point W') = decide (W = W')
- MIPRE.QLD.handled (MIPRE.QLD.Ty.point W) (MIPRE.QLD.Ty.dline W') = decide (W = W')
- MIPRE.QLD.handled (MIPRE.QLD.Ty.dline W) (MIPRE.QLD.Ty.point W') = decide (W = W')
- MIPRE.QLD.handled (MIPRE.QLD.Ty.point W) (MIPRE.QLD.Ty.pauli W') = decide (W = W')
- MIPRE.QLD.handled (MIPRE.QLD.Ty.pauli W) (MIPRE.QLD.Ty.point W') = decide (W = W')
- MIPRE.QLD.handled (MIPRE.QLD.Ty.pairB W) MIPRE.QLD.Ty.pair = true
- MIPRE.QLD.handled MIPRE.QLD.Ty.pair (MIPRE.QLD.Ty.pairB W) = true
- MIPRE.QLD.handled (MIPRE.QLD.Ty.point W) (MIPRE.QLD.Ty.pairB W') = decide (W = W')
- MIPRE.QLD.handled (MIPRE.QLD.Ty.pairB W) (MIPRE.QLD.Ty.point W') = decide (W = W')
- MIPRE.QLD.handled (MIPRE.QLD.Ty.con i) (MIPRE.QLD.Ty.var j) = true
- MIPRE.QLD.handled (MIPRE.QLD.Ty.var j) (MIPRE.QLD.Ty.con i) = true
- MIPRE.QLD.handled (MIPRE.QLD.Ty.point W) (MIPRE.QLD.Ty.var j) = true
- MIPRE.QLD.handled (MIPRE.QLD.Ty.var j) (MIPRE.QLD.Ty.point W) = true
- MIPRE.QLD.handled x✝¹ x✝ = false
Instances For
The low-degree rule is the seeded CL decider #
fig:decider_pauli says "accept if D^ld_{(q,m,d,1)} accepts", so the rule must be the
seeded CL decider of def:lidt-cl at ldc = 1 and not a paraphrase of it. Both halves hold by
rfl: MIPRE.LIDT.CL.accepts's own format check is discharged by the formats these two
questions carry, and what is left is its lineVsPoint.
Non-vacuity #
Each of the eight rules is pinned by an explicit pair of answers it rejects, which is what says
the rule reads its answers at all. The four rules gated on γ need the gate as a hypothesis:
each of them checks nothing on the other value of γ, by design, and that is the point of the
gate. MIPRE/LCS/MagicSquare/Game.lean does the same for the Magic Square game itself.
The format check rejects. A point question answered by a polynomial is rejected --- the case whose absence made the seeded CL game vacuous.
A (Pauli, W) question answered by a field element is rejected: the answer alphabet there
is F_q^M, not F_q.
A Constraint_i question answered by a single bit is rejected.
A Variable_j question answered by a triple is rejected.
Rule 1 rejects. Equal types with unequal answers lose, whatever the answers are.
Rule 2a rejects. The zero polynomial does not evaluate to 1 at the base point.
Rule 2b rejects.
Rule 3 rejects. The all-zero Pauli outcome has zero low-degree encoding, so it cannot
report 1 at a point.
... and accepts the matching answer.
Rule 4 rejects, on a commuting tuple: the (Pair, W) bit must be the W-component of
the Pair answer.
... and accepts the matching answer, whatever γ is.
Rule 5 rejects, on a commuting tuple: the probe of the point answer must be the
(Pair, W) bit.
Rule 6 rejects an unequal bit, on an anticommuting tuple.
Rule 6 rejects an assignment that violates its equation, with the bits agreeing: this isolates the parity check from the consistency check.
Rule 6 rejects an off-support incidence, which the type graph never asks: variable 3
does not occur in equation 0.
... and accepts a parity-valid assignment reporting its bit.
Rule 7 rejects, on an anticommuting tuple: the paper's distinguished pair is
(Point, X) against Variable_1, which is var 0 at this file's 0-indexing.
The catch-all accepts, as fig:ld-decider's "in all cases where no action is indicated,
accept" prescribes. The two line types are never asked together --- they are not adjacent --- so
this costs the test nothing.
The game #
The Pauli basis test as a game (blueprint def:qld-game).
Equations
- One or more equations did not get rendered due to their size.