Documentation

MIPRE.Tailored.Intro.InputRuns

Running the input's calculator and processor on a clamped description and a clock #

The linear-constraints processor of the tailored introspection verifier (issue #281, P3e) needs, at index m = 2^n, the input's answer lengths T.lenOf m q κ (to split the input's answers in the padded layout) and its constraints T.consOf m qx qy aR bR (the source check). Its own description must have size ≤ C (λ + 1)^C whatever the input, so the input's programs cannot be embedded as they are. This module does what MIPRE.Introspection.seven does for normal form verifiers:

Correctness (runLen_eq, runLp_eq, lenRun_clamp, lpRun_clamp): for a λ-bounded T, m ≥ 2, and a clock of length at least the running-time bound IsBounded gives, m^λ (|args| + 1)^λ, the runs compute T.lenOf m q κ and T.consOf m qx qy aR bR exactly. At m = 2^n, n ≥ 1, with questions and readable answers of length at most (2^n)^λ, the clock ansBound 5 λ n = 2^{(λn + 1)^5} that seven computes suffices (len_clock_le, lp_clock_le; lenRun_seven, lpRun_seven), and any clock at least as long (ansBound_mono).

theorem MIPRE.Tailored.TailoredVerifier.IsBounded.two_le {ℓ lam : ℕ} {T : TailoredVerifier ℓ} (h : T.IsBounded lam) :
2 ≤ lam

A λ-bounded tailored verifier has λ ≥ 2: every program has size at least 2.

@[reducible, inline]

The stored description of the input: its three programs and the parameter λ.

Equations
Instances For
    @[reducible, inline]

    The arguments of the answer-length calculator: (m, q, κ).

    Equations
    Instances For
      @[reducible, inline]

      The arguments of the linear-constraints processor: (m, qx, qy, aR, bR).

      Equations
      Instances For

        Clamping the description #

        Clamp the three programs independently to size λ, keeping λ.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          theorem MIPRE.Tailored.Intro.InputRuns.clamp_eq_self (S L P : Cost.Prog) (lam : ℕ) (hS : Cost.esize S ≤ lam) (hL : Cost.esize L ≤ lam) (hP : Cost.esize P ≤ lam) :
          clamp.toFun ((S, L, P), lam) = ((S, L, P), lam)

          The clamp is the identity on a λ-bounded verifier's programs.

          The clamped description has size linear in λ + 1, whatever the input.

          The clocked runs #

          Run a stored program on encoded arguments, for at most the clock's length.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For

            An in-budget run is read back with its success tag.

            A clocked result read as a length: the spine of the result, 0 on a timeout.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For

              A clocked result read as a constraint list: bitsListD of the result, and the rejecting list on a timeout.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For

                On a timeout, the length read is 0 and the constraint list rejects.

                Correctness for a bounded input #

                theorem MIPRE.Tailored.Intro.InputRuns.runLen_eq (U : Cost.ClockedUniversalMachine) {ℓ lam m : ℕ} (T : TailoredVerifier ℓ) (hT : T.IsBounded lam) (hm : 2 ≤ m) (q : Cost.BitStr) (κ : Bool) {c : Cost.Unary} (hc : m ^ lam * (Cost.esize (q, κ) + 1) ^ lam ≤ List.length c) :
                (runLen U).toFun (c, T.len.prog, m, q, κ) = T.lenOf m q κ

                The clocked calculator computes lenOf for a λ-bounded input at an index m ≥ 2, when the clock covers the input's running-time bound m^λ (|(q, κ)| + 1)^λ.

                theorem MIPRE.Tailored.Intro.InputRuns.lenDefined {ℓ lam m : ℕ} (T : TailoredVerifier ℓ) (hT : T.IsBounded lam) (hm : 2 ≤ m) (q : Cost.BitStr) :

                A bounded input's calculator halts at every question of an index m ≥ 2.

                theorem MIPRE.Tailored.Intro.InputRuns.runLp_eq (U : Cost.ClockedUniversalMachine) {ℓ lam m : ℕ} (T : TailoredVerifier ℓ) (hT : T.IsBounded lam) (hm : 2 ≤ m) (qx qy aR bR : Cost.BitStr) {c : Cost.Unary} (hc : m ^ lam * (Cost.esize (qx, qy, aR, bR) + 1) ^ lam ≤ List.length c) :
                (runLp U).toFun (c, T.lp.prog, m, qx, qy, aR, bR) = T.consOf m qx qy aR bR

                The clocked processor computes consOf for a λ-bounded input at an index m ≥ 2, when the clock covers the input's running-time bound m^λ (|(qx, qy, aR, bR)| + 1)^λ.

                Reading the program from the clamped description #

                The calculator run, its program read from the description ((S, L, P), λ).

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For

                  The processor run, its program read from the description ((S, L, P), λ).

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    theorem MIPRE.Tailored.Intro.InputRuns.lenRun_clamp (U : Cost.ClockedUniversalMachine) {ℓ lam m : ℕ} (T : TailoredVerifier ℓ) (hT : T.IsBounded lam) (hm : 2 ≤ m) (q : Cost.BitStr) (κ : Bool) {c : Cost.Unary} (hc : m ^ lam * (Cost.esize (q, κ) + 1) ^ lam ≤ List.length c) :
                    (lenRun U).toFun (c, clamp.toFun (T.progs, lam), m, q, κ) = T.lenOf m q κ

                    lenOf from the clamped description, for a λ-bounded input.

                    theorem MIPRE.Tailored.Intro.InputRuns.lpRun_clamp (U : Cost.ClockedUniversalMachine) {ℓ lam m : ℕ} (T : TailoredVerifier ℓ) (hT : T.IsBounded lam) (hm : 2 ≤ m) (qx qy aR bR : Cost.BitStr) {c : Cost.Unary} (hc : m ^ lam * (Cost.esize (qx, qy, aR, bR) + 1) ^ lam ≤ List.length c) :
                    (lpRun U).toFun (c, clamp.toFun (T.progs, lam), m, qx, qy, aR, bR) = T.consOf m qx qy aR bR

                    consOf from the clamped description, for a λ-bounded input.

                    The clock at m = 2^n #

                    theorem MIPRE.Tailored.Intro.InputRuns.ansBound_mono {k k' lam lam' : ℕ} (n : ℕ) (hk : k ≤ k') (hl : lam ≤ lam') :

                    The introspection clock grows with its exponent and its parameter.

                    theorem MIPRE.Tailored.Intro.InputRuns.lp_clock_le {lam n : ℕ} (hl : 1 ≤ lam) (hn : 1 ≤ n) (qx qy aR bR : Cost.BitStr) (hx : List.length qx ≤ (2 ^ n) ^ lam) (hy : List.length qy ≤ (2 ^ n) ^ lam) (ha : List.length aR ≤ (2 ^ n) ^ lam) (hb : List.length bR ≤ (2 ^ n) ^ lam) :
                    (2 ^ n) ^ lam * (Cost.esize (qx, qy, aR, bR) + 1) ^ lam ≤ Introspection.ansBound 5 lam n

                    The processor's running-time bound at 2^n, on questions and readable answers of length at most (2^n)^λ, is within seven's clock 2^{(λn + 1)^5}.

                    theorem MIPRE.Tailored.Intro.InputRuns.len_clock_le {lam n : ℕ} (hl : 1 ≤ lam) (hn : 1 ≤ n) (q : Cost.BitStr) (κ : Bool) (hq : List.length q ≤ (2 ^ n) ^ lam) :
                    (2 ^ n) ^ lam * (Cost.esize (q, κ) + 1) ^ lam ≤ Introspection.ansBound 5 lam n

                    The calculator's running-time bound at 2^n, on a question of length at most (2^n)^λ, is within the same clock.

                    theorem MIPRE.Tailored.Intro.InputRuns.lenRun_seven (U : Cost.ClockedUniversalMachine) {ℓ lam : ℕ} (T : TailoredVerifier ℓ) {n : ℕ} (hT : T.IsBounded lam) (hn : 1 ≤ n) (q : Cost.BitStr) (κ : Bool) (hq : List.length q ≤ (2 ^ n) ^ lam) {c : Cost.Unary} (hc : Introspection.ansBound 5 lam n ≤ List.length c) :
                    (lenRun U).toFun (c, clamp.toFun (T.progs, lam), 2 ^ n, q, κ) = T.lenOf (2 ^ n) q κ

                    lenOf at 2^n with seven's clock, or any longer one.

                    theorem MIPRE.Tailored.Intro.InputRuns.lpRun_seven (U : Cost.ClockedUniversalMachine) {ℓ lam : ℕ} (T : TailoredVerifier ℓ) {n : ℕ} (hT : T.IsBounded lam) (hn : 1 ≤ n) (qx qy aR bR : Cost.BitStr) (hx : List.length qx ≤ (2 ^ n) ^ lam) (hy : List.length qy ≤ (2 ^ n) ^ lam) (ha : List.length aR ≤ (2 ^ n) ^ lam) (hb : List.length bR ≤ (2 ^ n) ^ lam) {c : Cost.Unary} (hc : Introspection.ansBound 5 lam n ≤ List.length c) :
                    (lpRun U).toFun (c, clamp.toFun (T.progs, lam), 2 ^ n, qx, qy, aR, bR) = T.consOf (2 ^ n) qx qy aR bR

                    consOf at 2^n with seven's clock, or any longer one.