Documentation

Complexitylib.Circuits.DepthThree.LowerBound.Internal.LanguageBitReductionLoop

Unrestricted depth-three lower bound: language bit reduction loop #

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

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

Apply the shifted-modulus updates used in coefficient cancellation.

Equations
Instances For
    @[simp]
    theorem Complexity.DepthThreeLowerBound.modulusUpdateLoop_step (p : List Bool) (v : Bool) (shift j : ℕ) (c : List Bool) :
    modulusUpdateLoop p v shift (j + 1) c = xorListAt (modulusUpdateLoop p v shift j c) (shift + j) (v && p.getD j false)
    theorem Complexity.DepthThreeLowerBound.modulusUpdateLoop_getD (p : List Bool) (v : Bool) (shift j : ℕ) (c : List Bool) (hbound : shift + j ≤ c.length) (k : ℕ) :
    (modulusUpdateLoop p v shift j c).getD k false = (c.getD k false ^^ if shift ≤ k ∧ k < shift + j then v && p.getD (k - shift) false else false)
    theorem Complexity.DepthThreeLowerBound.modulusUpdateLoop_above (p : List Bool) (v : Bool) (shift j : ℕ) (c : List Bool) (hbound : shift + j ≤ c.length) (k : ℕ) (hk : shift + j ≤ k) :
    (modulusUpdateLoop p v shift j c).getD k false = c.getD k false
    theorem Complexity.DepthThreeLowerBound.modulusUpdateLoop_high (p : List Bool) (v : Bool) (shift : ℕ) (c : List Bool) (hbound : shift + p.length ≤ c.length) :
    (modulusUpdateLoop p v shift p.length c).getD (shift + p.length) false = c.getD (shift + p.length) false

    Cancel a leading coefficient through list updates.

    Equations
    Instances For
      theorem Complexity.DepthThreeLowerBound.cancelByUpdates_getD (p c : List Bool) (shift : ℕ) (hbound : shift + p.length < c.length) (k : ℕ) :
      (cancelByUpdates p c shift).getD k false = if shift + p.length = k then false else c.getD k false ^^ if shift ≤ k ∧ k < shift + p.length then c.getD (shift + p.length) false && p.getD (k - shift) false else false
      theorem Complexity.DepthThreeLowerBound.cancelStep_read {r m : ℕ} (p : BitWord r) (a : BitWord m) (shift : ℕ) (hbound : shift + r < m) (i : Fin m) :
      cancelStep p (shift + r) a i = if shift + r = ↑i then false else a i ^^ if shift ≤ ↑i ∧ ↑i < shift + r then a ⟨shift + r, hbound⟩ && wordGet p (↑i - shift) else false
      theorem Complexity.DepthThreeLowerBound.cancelByUpdates_eq_cancelStep {r m : ℕ} (p : BitWord r) (a : BitWord m) (shift : ℕ) (hbound : shift + r < m) :
      cancelByUpdates (wordList p) (wordList a) shift = wordList (cancelStep p (shift + r) a)
      theorem Complexity.DepthThreeLowerBound.reduceLoop_below {r m : ℕ} (p : BitWord r) (k : ℕ) (a : BitWord m) (hk : k ≤ r) :
      reduceLoop p k a = a
      theorem Complexity.DepthThreeLowerBound.reduceByUpdates_word_eq {r m : ℕ} (p : BitWord r) (s : ℕ) (a : BitWord m) (hbound : r + s ≤ m) :