Documentation

Complexitylib.Circuits.DepthThree.LowerBound.Internal.LanguageBitHashUpdates

Unrestricted depth-three lower bound: language bit hash updates #

Adapted from OpenAI's formalization at revision adc7f1241b42e322a6451854ab7e4b4c146bf78a. Source: https://github.com/openai/math/blob/adc7f1241b42e322a6451854ab7e4b4c146bf78a/lean/OAI/Computability/DepthThree/LanguageBitHashUpdates.lean

Imports, namespaces, module visibility, documentation, and formatting are adapted for complexitylib. The source theorem statements and mathematical proofs are retained.

Accumulate one row of the bit-level hash computation.

Equations
Instances For
    theorem Complexity.DepthThreeLowerBound.hashUpdateRow_step (u x : List Bool) (i j : ℕ) (js : List ℕ) (c : List Bool) :
    hashUpdateRow u x i (j :: js) c = hashUpdateRow u x i js (xorListAt c i (u.getD (i + j) false && x.getD j false))
    theorem Complexity.DepthThreeLowerBound.hashUpdateRow_append (u x : List Bool) (i : ℕ) (js ks : List ℕ) (c : List Bool) :
    hashUpdateRow u x i (js ++ ks) c = hashUpdateRow u x i ks (hashUpdateRow u x i js c)
    theorem Complexity.DepthThreeLowerBound.hashUpdateRow_getD (u x : List Bool) (i : ℕ) (js : List ℕ) (c : List Bool) (k : ℕ) (hi : i < c.length) :
    (hashUpdateRow u x i js c).getD k false = (c.getD k false ^^ if i = k then xorBits (List.map (fun (j : ℕ) => u.getD (i + j) false && x.getD j false) js) else false)
    theorem Complexity.DepthThreeLowerBound.hashUpdateRow_getD_self (u x : List Bool) (i : ℕ) (js : List ℕ) (c : List Bool) (hi : i < c.length) :
    (hashUpdateRow u x i js c).getD i false = (c.getD i false ^^ xorBits (List.map (fun (j : ℕ) => u.getD (i + j) false && x.getD j false) js))
    theorem Complexity.DepthThreeLowerBound.hashUpdateRow_getD_ne (u x : List Bool) (i : ℕ) (js : List ℕ) (c : List Bool) (k : ℕ) (hi : i < c.length) (hik : i ≠ k) :
    (hashUpdateRow u x i js c).getD k false = c.getD k false

    The bit contributed by one hash row at a selected output coordinate.

    Equations
    Instances For

      Accumulate the rows of the bit-level hash computation.

      Equations
      Instances For
        theorem Complexity.DepthThreeLowerBound.hashUpdateRows_getD (u x : List Bool) (is : List ℕ) (c : List Bool) (k : ℕ) (hbound : ∀ i ∈ is, i < c.length) :
        (hashUpdateRows u x is c).getD k false = (c.getD k false ^^ xorBits (List.map (fun (i : ℕ) => if i = k then hashRowBit u x i else false) is))
        theorem Complexity.DepthThreeLowerBound.hashUpdateRow_range'_prefix (u x : List Bool) (i s m n : ℕ) (c : List Bool) (hm : m ≤ n) :
        hashUpdateRow u x i (List.range' (s + m) (n - m)) (hashUpdateRow u x i (List.range' s m) c) = hashUpdateRow u x i (List.range' s n) c
        theorem Complexity.DepthThreeLowerBound.hashUpdateRow_range'_snoc (u x : List Bool) (i s n : ℕ) (c : List Bool) :
        hashUpdateRow u x i (List.range' s (n + 1)) c = xorListAt (hashUpdateRow u x i (List.range' s n) c) i (u.getD (i + (s + n)) false && x.getD (s + n) false)
        theorem Complexity.DepthThreeLowerBound.hashReadIndex_lt {d r i j : ℕ} (hi : i < r) (hj : j < d) :
        i + j < d + r - 1
        theorem Complexity.DepthThreeLowerBound.hashUpdateRows_getD_nodup (u x : List Bool) (is : List ℕ) (c : List Bool) (k : ℕ) (hbound : ∀ i ∈ is, i < c.length) (hn : is.Nodup) :
        (hashUpdateRows u x is c).getD k false = (c.getD k false ^^ if k ∈ is then hashRowBit u x k else false)
        theorem Complexity.DepthThreeLowerBound.hashRowBit_ofFn {d r : ℕ} (u : BitWord (d + r - 1)) (x : BitWord d) (i : Fin r) :