Unrestricted depth-three lower bound: language slice #
Adapted from OpenAI's formalization at revision adc7f1241b42e322a6451854ab7e4b4c146bf78a.
Source: https://github.com/openai/math/blob/adc7f1241b42e322a6451854ab7e4b4c146bf78a/lean/OAI/Computability/DepthThree/LanguageSlice.lean
Imports, namespaces, module visibility, documentation, and formatting are adapted for complexitylib. The source theorem statements and mathematical proofs are retained.
def
Complexity.DepthThreeLowerBound.sliceParsedInput
(n : ℕ)
(u : Fin (dataDimension n + hashDimension (dataDimension n) - 1) → Bool)
(p : Fin (hashDimension (dataDimension n)) → Bool)
(b : Fin (independenceOrder (dataDimension n)) → Fin (hashDimension (dataDimension n)) → Bool)
(x : Fin (dataDimension n) → Bool)
:
The parsed input obtained from a fixed-parameter slice.
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
Complexity.DepthThreeLowerBound.canonicalSlice
(n : ℕ)
(u : Fin (dataDimension n + hashDimension (dataDimension n) - 1) → Bool)
(p : Fin (hashDimension (dataDimension n)) → Bool)
(b : Fin (independenceOrder (dataDimension n)) → Fin (hashDimension (dataDimension n)) → Bool)
:
Fin n → Fin (dataDimension n) ⊕ Bool
The canonical input substitution fixing a chosen parameter tuple.
Equations
Instances For
def
Complexity.DepthThreeLowerBound.canonicalSliceWord
(n : ℕ)
(u : Fin (dataDimension n + hashDimension (dataDimension n) - 1) → Bool)
(p : Fin (hashDimension (dataDimension n)) → Bool)
(b : Fin (independenceOrder (dataDimension n)) → Fin (hashDimension (dataDimension n)) → Bool)
(x : Fin (dataDimension n) → Bool)
:
Encode a data assignment as a word in the canonical slice.
Equations
Instances For
@[simp]
theorem
Complexity.DepthThreeLowerBound.canonicalSliceWord_length
(n : ℕ)
(u : Fin (dataDimension n + hashDimension (dataDimension n) - 1) → Bool)
(p : Fin (hashDimension (dataDimension n)) → Bool)
(b : Fin (independenceOrder (dataDimension n)) → Fin (hashDimension (dataDimension n)) → Bool)
(x : Fin (dataDimension n) → Bool)
:
theorem
Complexity.DepthThreeLowerBound.canonicalSlice_first
(n : ℕ)
(u : Fin (dataDimension n + hashDimension (dataDimension n) - 1) → Bool)
(p : Fin (hashDimension (dataDimension n)) → Bool)
(b : Fin (independenceOrder (dataDimension n)) → Fin (hashDimension (dataDimension n)) → Bool)
(i : Fin (dataDimension n))
:
theorem
Complexity.DepthThreeLowerBound.canonicalSlice_unused
(n : ℕ)
(u : Fin (dataDimension n + hashDimension (dataDimension n) - 1) → Bool)
(p : Fin (hashDimension (dataDimension n)) → Bool)
(b : Fin (independenceOrder (dataDimension n)) → Fin (hashDimension (dataDimension n)) → Bool)
(i : Fin n)
(hi : blockLen (dataDimension n) ≤ ↑i)
:
theorem
Complexity.DepthThreeLowerBound.canonicalSliceWord_fits
(n : ℕ)
(u : Fin (dataDimension n + hashDimension (dataDimension n) - 1) → Bool)
(p : Fin (hashDimension (dataDimension n)) → Bool)
(b : Fin (independenceOrder (dataDimension n)) → Fin (hashDimension (dataDimension n)) → Bool)
(x : Fin (dataDimension n) → Bool)
(hd : 0 < dataDimension n)
(ht : 2 ≤ independenceOrder (dataDimension n))
(hlen : blockLen (dataDimension n) ≤ n)
:
InputFits (canonicalSliceWord n u p b x)
theorem
Complexity.DepthThreeLowerBound.decodeInput_canonicalSliceWord
(n : ℕ)
(u : Fin (dataDimension n + hashDimension (dataDimension n) - 1) → Bool)
(p : Fin (hashDimension (dataDimension n)) → Bool)
(b : Fin (independenceOrder (dataDimension n)) → Fin (hashDimension (dataDimension n)) → Bool)
(x : Fin (dataDimension n) → Bool)
(_hd : 0 < dataDimension n)
(_ht : 2 ≤ independenceOrder (dataDimension n))
(hlen : blockLen (dataDimension n) ≤ n)
:
theorem
Complexity.DepthThreeLowerBound.language_canonicalSliceWord
(n : ℕ)
(u : Fin (dataDimension n + hashDimension (dataDimension n) - 1) → Bool)
(p : Fin (hashDimension (dataDimension n)) → Bool)
(b : Fin (independenceOrder (dataDimension n)) → Fin (hashDimension (dataDimension n)) → Bool)
(x : Fin (dataDimension n) → Bool)
(hd : 0 < dataDimension n)
(ht : 2 ≤ independenceOrder (dataDimension n))
(hlen : blockLen (dataDimension n) ≤ n)
:
theorem
Complexity.DepthThreeLowerBound.language_ofFn_canonicalSlice
(n : ℕ)
(u : Fin (dataDimension n + hashDimension (dataDimension n) - 1) → Bool)
(p : Fin (hashDimension (dataDimension n)) → Bool)
(b : Fin (independenceOrder (dataDimension n)) → Fin (hashDimension (dataDimension n)) → Bool)
(x : Cube (Fin (dataDimension n)))
(hd : 0 < dataDimension n)
(ht : 2 ≤ independenceOrder (dataDimension n))
(hlen : blockLen (dataDimension n) ≤ n)
:
language (List.ofFn (GateInput.assignment (canonicalSlice n u p b) x)) = (sliceParsedInput n u p b x).evaluate
theorem
Complexity.DepthThreeLowerBound.language_canonicalSlice_quotient
(n : ℕ)
(u : Fin (dataDimension n + hashDimension (dataDimension n) - 1) → Bool)
(p : Fin (hashDimension (dataDimension n)) → Bool)
(b : Fin (independenceOrder (dataDimension n)) → Fin (hashDimension (dataDimension n)) → Bool)
(x : Cube (Fin (dataDimension n)))
(hd : 0 < dataDimension n)
(ht : 2 ≤ independenceOrder (dataDimension n))
(hlen : blockLen (dataDimension n) ≤ n)
:
language (List.ofFn (GateInput.assignment (canonicalSlice n u p b) x)) = true ↔ (BinaryAlgebra.degreeZero ⋯) (sliceParsedInput n u p b x).quotientEvaluation = 0
theorem
Complexity.DepthThreeLowerBound.language_canonicalSlice_acceptEval
(n : ℕ)
(u : Fin (dataDimension n + hashDimension (dataDimension n) - 1) → Bool)
(p : Fin (hashDimension (dataDimension n)) → Bool)
(b : Fin (independenceOrder (dataDimension n)) → Fin (hashDimension (dataDimension n)) → Bool)
(x : Fin (dataDimension n) → Bool)
[Fact (Irreducible (BinaryAlgebra.inputPolynomialBits p))]
(hd : 0 < dataDimension n)
(ht : 2 ≤ independenceOrder (dataDimension n))
(hlen : blockLen (dataDimension n) ≤ n)
:
language (List.ofFn (GateInput.assignment (canonicalSlice n u p b) x)) = Interpolation.acceptEval (BinaryAlgebra.degreeZero ⋯) (independenceOrder (dataDimension n))
(fun (y : Fin (dataDimension n) → Bool) =>
BinaryAlgebra.encode (fun (i : Fin (hashDimension (dataDimension n))) => BinaryAlgebra.bitValue (p i))
fun (i : Fin (hashDimension (dataDimension n))) => BinaryAlgebra.bitValue (BinaryHash.hashBool u y i))
(fun (j : Fin (independenceOrder (dataDimension n))) =>
BinaryAlgebra.encode (fun (i : Fin (hashDimension (dataDimension n))) => BinaryAlgebra.bitValue (p i))
fun (i : Fin (hashDimension (dataDimension n))) => BinaryAlgebra.bitValue (b j i))
x