Unrestricted depth-three lower bound: algebra language #
Adapted from OpenAI's formalization at revision adc7f1241b42e322a6451854ab7e4b4c146bf78a.
Source: https://github.com/openai/math/blob/adc7f1241b42e322a6451854ab7e4b4c146bf78a/lean/OAI/Computability/DepthThree/AlgebraLanguage.lean
Imports, namespaces, module visibility, documentation, and formatting are adapted for complexitylib. The source theorem statements and mathematical proofs are retained.
@[reducible, inline]
The polynomial quotient ring determined by the parsed modulus.
Equations
Instances For
@[instance_reducible]
noncomputable instance
Complexity.DepthThreeLowerBound.ParsedInput.quotientRingFintype
(q : ParsedInput)
:
The hashed input polynomial viewed in the quotient ring.
Equations
- q.quotientHash = (AdjoinRoot.mk q.modulus) q.hashPolynomial
Instances For
noncomputable def
Complexity.DepthThreeLowerBound.ParsedInput.quotientCoefficient
(q : ParsedInput)
(j : Fin q.coefficientCount)
:
A parsed coefficient polynomial viewed in the quotient ring.
Equations
- q.quotientCoefficient j = (AdjoinRoot.mk q.modulus) (q.coefficientPolynomial j)
Instances For
noncomputable def
Complexity.DepthThreeLowerBound.ParsedInput.quotientEvaluation
(q : ParsedInput)
:
Evaluate the coefficient polynomial at the hashed input in the quotient ring.
Equations
- q.quotientEvaluation = ∑ j : Fin q.coefficientCount, q.quotientCoefficient j * q.quotientHash ^ ↑j
Instances For
theorem
Complexity.DepthThreeLowerBound.ParsedInput.quotientHash_eq_encode
(q : ParsedInput)
:
q.quotientHash = BinaryAlgebra.encode (fun (i : Fin q.ringDegree) => BinaryAlgebra.bitValue (q.polynomial i))
fun (i : Fin q.ringDegree) => BinaryAlgebra.bitValue (BinaryHash.hashBool q.hashSeed q.data i)
theorem
Complexity.DepthThreeLowerBound.ParsedInput.quotientCoefficient_eq_encode
(q : ParsedInput)
(j : Fin q.coefficientCount)
:
q.quotientCoefficient j = BinaryAlgebra.encode (fun (i : Fin q.ringDegree) => BinaryAlgebra.bitValue (q.polynomial i))
fun (i : Fin q.ringDegree) => BinaryAlgebra.bitValue (q.coefficients j i)
noncomputable def
Complexity.DepthThreeLowerBound.ParsedInput.coefficientBitsEquiv
(q : ParsedInput)
:
Identify coefficient bit blocks with tuples of quotient-ring elements.
Equations
- One or more equations did not get rendered due to their size.
Instances For
@[simp]
theorem
Complexity.DepthThreeLowerBound.ParsedInput.coefficientBitsEquiv_apply
(q : ParsedInput)
(v : Fin q.ringDegree → Bool)
:
q.coefficientBitsEquiv v = BinaryAlgebra.encode (fun (i : Fin q.ringDegree) => BinaryAlgebra.bitValue (q.polynomial i))
fun (i : Fin q.ringDegree) => BinaryAlgebra.bitValue (v i)
theorem
Complexity.DepthThreeLowerBound.ParsedInput.coefficientBitsEquiv_coefficient
(q : ParsedInput)
(j : Fin q.coefficientCount)
:
@[simp]
theorem
Complexity.DepthThreeLowerBound.ParsedInput.quotient_degreeZero_one
(q : ParsedInput)
(hr : 0 < q.ringDegree)
:
theorem
Complexity.DepthThreeLowerBound.language_eq_true_iff_quotient
(w : List Bool)
:
language w = true ↔ InputFits w ∧ (BinaryAlgebra.degreeZero ⋯) (decodeInput w).quotientEvaluation = 0