Documentation

Complexitylib.Circuits.DepthThree.LowerBound.Internal.HashTriangular

Unrestricted depth-three lower bound: hash triangular #

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

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

theorem Complexity.DepthThreeLowerBound.BinaryHash.exists_last_nonzero {d : ℕ} (w : Data d) (hw : w ≠ 0) :
∃ (s : Fin d), w s ≠ 0 ∧ ∀ (a : Fin d), ↑s < ↑a → w a = 0
noncomputable def Complexity.DepthThreeLowerBound.BinaryHash.lastIndex {d : ℕ} (w : Data d) (hw : w ≠ 0) :
Fin d

The last nonzero coordinate used as a pivot in the hash argument.

Equations
Instances For
    theorem Complexity.DepthThreeLowerBound.BinaryHash.zero_after_lastIndex {d : ℕ} (w : Data d) (hw : w ≠ 0) (a : Fin d) (ha : ↑(lastIndex w hw) < ↑a) :
    w a = 0

    Seed positions other than the chosen pivot positions.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      def Complexity.DepthThreeLowerBound.BinaryHash.triangularMap {d r : ℕ} (w : Data d) (hw : w ≠ 0) (u : Seed d r) :
      Output r × (Nonpivot w hw → F2)

      The triangular coordinate map used to solve the hash equations.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        noncomputable def Complexity.DepthThreeLowerBound.BinaryHash.triangularEquiv {d r : ℕ} (w : Data d) (hw : w ≠ 0) :
        Seed d r ≃ Output r × (Nonpivot w hw → F2)

        Invert the triangular map by solving for the pivot coordinates.

        Equations
        Instances For
          @[simp]
          theorem Complexity.DepthThreeLowerBound.BinaryHash.triangularEquiv_fst {d r : ℕ} (w : Data d) (hw : w ≠ 0) (u : Seed d r) :
          ((triangularEquiv w hw) u).1 = hashF2 u w
          @[simp]
          theorem Complexity.DepthThreeLowerBound.BinaryHash.triangularEquiv_snd {d r : ℕ} (w : Data d) (hw : w ≠ 0) (u : Seed d r) (j : Nonpivot w hw) :
          ((triangularEquiv w hw) u).2 j = u ↑j