Canonical Pauli answer payloads and their semantic decoding #
Each type fixes its answer constructor. Field vectors use canonical field blocks, polynomials use ascending coefficients, and full Pauli answers use the same little-endian cube enumeration as the executable table evaluator.
noncomputable def
MIPRE.QLD.PauliAnswerProgram.answerRows
{k m d : ℕ}
(E : SAT.BinField k)
:
Answer E.carrier m d → List Cost.BitStr
Equations
- MIPRE.QLD.PauliAnswerProgram.answerRows E (MIPRE.QLD.Answer.val a) = [E.toBits a]
- MIPRE.QLD.PauliAnswerProgram.answerRows E (MIPRE.QLD.Answer.apoly f) = E.vecBits f
- MIPRE.QLD.PauliAnswerProgram.answerRows E (MIPRE.QLD.Answer.dpoly f) = E.vecBits f
- MIPRE.QLD.PauliAnswerProgram.answerRows E (MIPRE.QLD.Answer.pauliAns h) = E.vecBits fun (i : Fin (2 ^ m)) => h ((MIPRE.Introspection.FieldTableProgram.cubeEnumeration m).symm i)
- MIPRE.QLD.PauliAnswerProgram.answerRows E (MIPRE.QLD.Answer.bit b) = [[MIPRE.LowDegree.BinaryLinear.bit b]]
- MIPRE.QLD.PauliAnswerProgram.answerRows E (MIPRE.QLD.Answer.bitPair b) = [[MIPRE.LowDegree.BinaryLinear.bit (b MIPRE.QLD.Bas.X)], [MIPRE.LowDegree.BinaryLinear.bit (b MIPRE.QLD.Bas.Z)]]
- MIPRE.QLD.PauliAnswerProgram.answerRows E (MIPRE.QLD.Answer.bitTriple b) = List.ofFn fun (i : Fin 3) => [MIPRE.LowDegree.BinaryLinear.bit (b i)]
Instances For
noncomputable def
MIPRE.QLD.PauliAnswerProgram.answerBits
{k m d : ℕ}
(E : SAT.BinField k)
(a : Answer E.carrier m d)
:
Equations
Instances For
noncomputable def
MIPRE.QLD.PauliAnswerProgram.decodeRows
{k : ℕ}
(E : SAT.BinField k)
(m d : ℕ)
(T : Ty)
(rows : List Cost.BitStr)
:
Equations
- One or more equations did not get rendered due to their size.
- MIPRE.QLD.PauliAnswerProgram.decodeRows E m d (MIPRE.QLD.Ty.point W) rows = MIPRE.QLD.Answer.val (E.ofBits (rows.getD 0 []))
- MIPRE.QLD.PauliAnswerProgram.decodeRows E m d (MIPRE.QLD.Ty.aline W) rows = MIPRE.QLD.Answer.apoly fun (i : Fin (d + 1)) => E.ofBits (rows.getD ↑i [])
- MIPRE.QLD.PauliAnswerProgram.decodeRows E m d (MIPRE.QLD.Ty.dline W) rows = MIPRE.QLD.Answer.dpoly fun (i : Fin (m * d + 1)) => E.ofBits (rows.getD ↑i [])
- MIPRE.QLD.PauliAnswerProgram.decodeRows E m d (MIPRE.QLD.Ty.pairB W) rows = MIPRE.QLD.Answer.bit (MIPRE.LowDegree.ofBool (List.getD (rows.getD 0 []) 0 false))
- MIPRE.QLD.PauliAnswerProgram.decodeRows E m d (MIPRE.QLD.Ty.var j) rows = MIPRE.QLD.Answer.bit (MIPRE.LowDegree.ofBool (List.getD (rows.getD 0 []) 0 false))
- MIPRE.QLD.PauliAnswerProgram.decodeRows E m d (MIPRE.QLD.Ty.con i) rows = MIPRE.QLD.Answer.bitTriple fun (i : Fin 3) => MIPRE.LowDegree.ofBool (List.getD (rows.getD ↑i []) 0 false)
Instances For
theorem
MIPRE.QLD.PauliAnswerProgram.decodeRows_format
{k m d : ℕ}
(E : SAT.BinField k)
(q : Question E.carrier m)
(rows : List Cost.BitStr)
:
theorem
MIPRE.QLD.PauliAnswerProgram.answerRows_width
{k m d : ℕ}
(E : SAT.BinField k)
(q : Question E.carrier m)
(a : Answer E.carrier m d)
(h : q.fmtOk a = true)
(row : Cost.BitStr)
:
row ∈ answerRows E a → List.length row = width q.ty k
theorem
MIPRE.QLD.PauliAnswerProgram.decodeRows_answerRows
{k m d : ℕ}
(E : SAT.BinField k)
(q : Question E.carrier m)
(a : Answer E.carrier m d)
(h : q.fmtOk a = true)
:
theorem
MIPRE.QLD.PauliAnswerProgram.parser_answerBits
{k m d : ℕ}
(E : SAT.BinField k)
(hk : 0 < k)
(q : Question E.carrier m)
(a : Answer E.carrier m d)
(h : q.fmtOk a = true)
:
parser.toFun (q.ty, Cost.unary m, Cost.unary k, Cost.unary d, answerBits E a) = (true, answerRows E a)
noncomputable def
MIPRE.QLD.PauliAnswerProgram.decodeBits
{k : ℕ}
(E : SAT.BinField k)
(m d : ℕ)
(T : Ty)
(bs : Cost.BitStr)
:
Equations
- One or more equations did not get rendered due to their size.