Documentation

Complexitylib.SAT.CookLevin.Internal.EmitterFamilies

The clause-family emitters #

One emitting machine per tableauCNFFlat family handled here — the accept, state/cell/head one-hot, and frame families — each with a Hoare specification appending exactly that family's CNF.encode image. (The start and active families are emitted in EmitterStart and EmitterActive.)

The emitter's tape layout is fixed once (Emit.nT = 20 work tapes, named indices below), so register-distinctness side conditions are all decide.

@[reducible, inline]

Number of work tapes of the reduction emitter.

Equations
Instances For
    @[reducible, inline]

    Register holding radix A = steps + 1.

    Equations
    Instances For
      @[reducible, inline]

      Register holding radix B = max Qc 3.

      Equations
      Instances For
        @[reducible, inline]

        Register holding radix C = P + 2.

        Equations
        Instances For
          @[reducible, inline]

          Register holding radix D = 4.

          Equations
          Instances For
            @[reducible, inline]

            Numeral scratch register.

            Equations
            Instances For
              @[reducible, inline]

              Second numeral scratch register.

              Equations
              Instances For
                @[reducible, inline]

                Register holding the input length |x|.

                Equations
                Instances For
                  @[reducible, inline]

                  Register holding steps = p.eval |x|.

                  Equations
                  Instances For
                    @[reducible, inline]

                    Register holding P = steps + |x| + 1.

                    Equations
                    Instances For
                      @[reducible, inline]

                      Register holding the row counter t.

                      Equations
                      Instances For
                        @[reducible, inline]

                        Register holding the row-loop fuel.

                        Equations
                        Instances For
                          @[reducible, inline]

                          Register holding the successor row t + 1.

                          Equations
                          Instances For
                            @[reducible, inline]

                            Register holding the position counter (pos / pi).

                            Equations
                            Instances For
                              @[reducible, inline]

                              Register holding the position-loop fuel (P + 1).

                              Equations
                              Instances For
                                @[reducible, inline]

                                Register holding the second position counter (pos' / pw).

                                Equations
                                Instances For
                                  @[reducible, inline]

                                  Register holding the second position fuel (P + 1).

                                  Equations
                                  Instances For
                                    @[reducible, inline]

                                    Register holding the third position counter (po).

                                    Equations
                                    Instances For
                                      @[reducible, inline]

                                      Register holding the third position fuel (P + 1).

                                      Equations
                                      Instances For
                                        @[reducible, inline]

                                        Spare register.

                                        Equations
                                        Instances For
                                          @[reducible, inline]

                                          Second spare register.

                                          Equations
                                          Instances For
                                            theorem Complexity.SAT.forall₂_map_map {α : Type u_1} {β : Type u_2} {γ : Type u_3} {R : βγProp} (g : αβ) (h : αγ) {l : List α} (hp : al, R (g a) (h a)) :

                                            Pointwise Forall₂ between two maps of the same list.

                                            theorem Complexity.SAT.forall₂_append {α : Type u_1} {β : Type u_2} {R : αβProp} {l₁ u₁ : List α} {l₂ u₂ : List β} :
                                            List.Forall₂ R l₁ l₂List.Forall₂ R u₁ u₂List.Forall₂ R (l₁ ++ u₁) (l₂ ++ u₂)

                                            Forall₂ is preserved by appending componentwise-related lists.

                                            def Complexity.SAT.atMostOneD {n : } (mk : LitDesc n) :

                                            Descriptor mirror of atMostOne.

                                            Equations
                                            Instances For
                                              def Complexity.SAT.exactlyOneD {n : } (mkPos mkNeg : LitDesc n) (qs : List ) :

                                              Descriptor mirror of exactlyOne.

                                              Equations
                                              Instances For
                                                theorem Complexity.SAT.forall₂_atMostOneD {n : } {R : LitDesc nLitProp} (mk : LitDesc n) (f : ) {qs : List } :
                                                (∀ qqs, R (mk q) { sign := false, var := f q })List.Forall₂ (List.Forall₂ R) (atMostOneD mk qs) (Tableau.atMostOne (List.map f qs))

                                                atMostOneD mk qs denotes atMostOne (qs.map f) clause-by-clause, provided each descriptor mk q denotes the negative literal on f q.

                                                theorem Complexity.SAT.forall₂_exactlyOneD {n : } {R : LitDesc nLitProp} (mkPos mkNeg : LitDesc n) (f : ) {qs : List } (hpos : qqs, R (mkPos q) { sign := true, var := f q }) (hneg : qqs, R (mkNeg q) { sign := false, var := f q }) :

                                                exactlyOneD mkPos mkNeg qs denotes exactlyOne (qs.map f) clause-by-clause, given the positive/negative literal denotations.

                                                theorem Complexity.SAT.atMostOneD_length_le {n : } (mk : LitDesc n) (qs : List ) (c : List (LitDesc n)) :
                                                c atMostOneD mk qsc.length 2

                                                Clause sizes in atMostOneD are 2.

                                                theorem Complexity.SAT.atMostOneD_card_le {n : } (mk : LitDesc n) (qs : List ) :

                                                atMostOneD over m indices has at most clauses.

                                                noncomputable def Complexity.SAT.acceptDescs (N : NTM 1) :

                                                Descriptors of the two accept clauses.

                                                Equations
                                                • One or more equations did not get rendered due to their size.
                                                Instances For
                                                  noncomputable def Complexity.SAT.emitAcceptTM (N : NTM 1) :

                                                  The accept-family emitter.

                                                  Equations
                                                  • One or more equations did not get rendered due to their size.
                                                  Instances For
                                                    theorem Complexity.SAT.emitAcceptTM_hoareTime (N : NTM 1) (steps P M : ) (hM : 4 * (steps + 1) * max (Fintype.card N.Q) 3 * (P + 2) * 4 M) (inp₀ : Tape) (work₀ : Fin Emit.nTTape) (ys : List Bool) (hinp₀ : TM.Parked inp₀) (hwork₀ : ∀ (i : Fin Emit.nT), TM.Parked (work₀ i)) (hrA : work₀ Emit.rA = TM.regTape (steps + 1)) (hrB : work₀ Emit.rB = TM.regTape (max (Fintype.card N.Q) 3)) (hrC : work₀ Emit.rC = TM.regTape (P + 2)) (hrD : work₀ Emit.rD = TM.regTape 4) (hsteps : work₀ Emit.stepsReg = TM.regTape steps) :

                                                    emitAcceptTM Hoare specification: appends the encoded accept clauses.

                                                    Leaf descriptors: exactly one state at the row read from tReg.

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

                                                      The state one-hot emitter: loop the leaf over all rows.

                                                      Equations
                                                      • One or more equations did not get rendered due to their size.
                                                      Instances For
                                                        theorem Complexity.SAT.emitOneHotStatesTM_hoareTime (N : NTM 1) (steps P M : ) (hM : 4 * (steps + 1) * max (Fintype.card N.Q) 3 * (P + 2) * 4 M) (inp₀ : Tape) (work₀ : Fin Emit.nTTape) (ys : List Bool) (hinp₀ : TM.Parked inp₀) (hwork₀ : ∀ (i : Fin Emit.nT), TM.Parked (work₀ i)) (hrA : work₀ Emit.rA = TM.regTape (steps + 1)) (hrB : work₀ Emit.rB = TM.regTape (max (Fintype.card N.Q) 3)) (hrC : work₀ Emit.rC = TM.regTape (P + 2)) (hrD : work₀ Emit.rD = TM.regTape 4) (htReg : work₀ Emit.tReg = TM.regTape 0) (htFuel : work₀ Emit.tFuel = TM.regTape (steps + 1)) :

                                                        emitOneHotStatesTM Hoare specification: appends the encoded state one-hot family, leaving the row counter at steps + 1.

                                                        Leaf descriptors: exactly one symbol per row/tape/position.

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

                                                          Position sweep at one tape index: loop the leaf over positions, then return the position counter to zero.

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

                                                            The oneHotCells row body: position sweeps at the three tape indices.

                                                            Equations
                                                            Instances For
                                                              theorem Complexity.SAT.posChunkTM_hoareTime (tp : ) (htp : tp < 3) (Qc steps P M i : ) (hM : 4 * (steps + 1) * max Qc 3 * (P + 2) * 4 M) (hi : i steps) (inp₀ : Tape) (V : Fin Emit.nTTape) (ys : List Bool) (hinp₀ : TM.Parked inp₀) (hV : ∀ (j : Fin Emit.nT), TM.Parked (V j)) (hVrA : V Emit.rA = TM.regTape (steps + 1)) (hVrB : V Emit.rB = TM.regTape (max Qc 3)) (hVrC : V Emit.rC = TM.regTape (P + 2)) (hVrD : V Emit.rD = TM.regTape 4) (hVt : V Emit.tReg = TM.regTape i) (hVp1 : V Emit.pos1Reg = TM.regTape 0) (hVf1 : V Emit.pos1Fuel = TM.regTape (P + 1)) :

                                                              posChunkTM Hoare specification (at row i, tape index tp).

                                                              Budget of the oneHotCells row body.

                                                              Equations
                                                              Instances For
                                                                theorem Complexity.SAT.cellsBodyTM_hoareTime (Qc steps P M i : ) (hM : 4 * (steps + 1) * max Qc 3 * (P + 2) * 4 M) (hi : i steps) (inp₀ : Tape) (V : Fin Emit.nTTape) (ys : List Bool) (hinp₀ : TM.Parked inp₀) (hV : ∀ (j : Fin Emit.nT), TM.Parked (V j)) (hVrA : V Emit.rA = TM.regTape (steps + 1)) (hVrB : V Emit.rB = TM.regTape (max Qc 3)) (hVrC : V Emit.rC = TM.regTape (P + 2)) (hVrD : V Emit.rD = TM.regTape 4) (hVt : V Emit.tReg = TM.regTape i) (hVp1 : V Emit.pos1Reg = TM.regTape 0) (hVf1 : V Emit.pos1Fuel = TM.regTape (P + 1)) :

                                                                cellsBodyTM Hoare specification (at row i).

                                                                theorem Complexity.SAT.emitOneHotCellsTM_hoareTime (Qc steps P M : ) (hM : 4 * (steps + 1) * max Qc 3 * (P + 2) * 4 M) (inp₀ : Tape) (work₀ : Fin Emit.nTTape) (ys : List Bool) (hinp₀ : TM.Parked inp₀) (hwork₀ : ∀ (i : Fin Emit.nT), TM.Parked (work₀ i)) (hrA : work₀ Emit.rA = TM.regTape (steps + 1)) (hrB : work₀ Emit.rB = TM.regTape (max Qc 3)) (hrC : work₀ Emit.rC = TM.regTape (P + 2)) (hrD : work₀ Emit.rD = TM.regTape 4) (htReg : work₀ Emit.tReg = TM.regTape 0) (htFuel : work₀ Emit.tFuel = TM.regTape (steps + 1)) (hp1 : work₀ Emit.pos1Reg = TM.regTape 0) (hf1 : work₀ Emit.pos1Fuel = TM.regTape (P + 1)) :

                                                                emitOneHotCellsTM Hoare specification: appends the encoded cell one-hot family, leaving the row counter at steps + 1.

                                                                theorem Complexity.SAT.flatMap_congr {α : Type u_1} {β : Type u_2} {l : List α} {f g : αList β} (h : al, f a = g a) :

                                                                flatMap respects pointwise-equal functions on the list's members.

                                                                theorem Complexity.SAT.atMostOne_map_range (m : ) (f : ) :
                                                                Tableau.atMostOne (List.map f (List.range m)) = List.flatMap (fun (q : ) => List.map (fun (j : ) => [{ sign := false, var := f q }, { sign := false, var := f (q + 1 + j) }]) (List.range (m - (q + 1)))) (List.range m)

                                                                atMostOne over a mapped range as rectangle loops with shrinking inner ranges — the shape the head emitter's nested loops produce.

                                                                def Complexity.SAT.headLitD (sign : Bool) (tp : ) (posSrc : Fin Emit.nT) :

                                                                One head literal: row from tReg, tape index hardwired, position from posSrc.

                                                                Equations
                                                                Instances For

                                                                  The at-least-one head clause: loop the positive literal over all positions, close the clause, return the position counter.

                                                                  Equations
                                                                  • One or more equations did not get rendered due to their size.
                                                                  Instances For
                                                                    theorem Complexity.SAT.headLitD_spec {tp : } (htp : tp < 3) {Qc steps P M i pos : } (hM : 4 * (steps + 1) * max Qc 3 * (P + 2) * 4 M) (hi : i steps) (hpos : pos P) {posSrc : Fin Emit.nT} (hst : posSrc Emit.tmp) (hst2 : posSrc Emit.tmp2) {base : Fin Emit.nTTape} (sgn : Bool) (hbt : base Emit.tReg = TM.regTape i) (hbp : base posSrc = TM.regTape pos) :
                                                                    LitDesc.Spec base Emit.tmp Emit.tmp2 M (steps + 1) (max Qc 3) (P + 2) 4 (headLitD sgn tp posSrc) { sign := sgn, var := Tableau.vHeadF Qc steps P i tp pos }

                                                                    The head-literal denotation lemma, shared by both head clause shapes.

                                                                    theorem Complexity.SAT.headAtLeastTM_hoareTime (tp : ) (htp : tp < 3) (Qc steps P M i : ) (hM : 4 * (steps + 1) * max Qc 3 * (P + 2) * 4 M) (hi : i steps) (inp₀ : Tape) (V : Fin Emit.nTTape) (ys : List Bool) (hinp₀ : TM.Parked inp₀) (hV : ∀ (j : Fin Emit.nT), TM.Parked (V j)) (hVrA : V Emit.rA = TM.regTape (steps + 1)) (hVrB : V Emit.rB = TM.regTape (max Qc 3)) (hVrC : V Emit.rC = TM.regTape (P + 2)) (hVrD : V Emit.rD = TM.regTape 4) (hVt : V Emit.tReg = TM.regTape i) (hVp1 : V Emit.pos1Reg = TM.regTape 0) (hVf1 : V Emit.pos1Fuel = TM.regTape (P + 1)) :

                                                                    headAtLeastTM Hoare specification (at row i, tape index tp).

                                                                    The pairwise at-most-one clauses: outer loop over the first position; per outer step, mirror the counter past it, sweep the (offset, shrinking) inner loop, and shrink the fuel.

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

                                                                      The pairwise at-most-one head sweep: loop headPairBodyTM over the outer position, then return the position counter to zero.

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

                                                                        Budget of one outer step of the pairwise sweep.

                                                                        Equations
                                                                        Instances For
                                                                          def Complexity.SAT.pairWord (Qc steps P i tp q : ) :

                                                                          The per-outer-position word of the pairwise sweep.

                                                                          Equations
                                                                          • One or more equations did not get rendered due to their size.
                                                                          Instances For
                                                                            theorem Complexity.SAT.headPairBodyTM_hoareTime (tp : ) (htp : tp < 3) (Qc steps P M i q : ) (hM : 4 * (steps + 1) * max Qc 3 * (P + 2) * 4 M) (hi : i steps) (hq : q P) (inp₀ : Tape) (V : Fin Emit.nTTape) (ys : List Bool) (hinp₀ : TM.Parked inp₀) (hV : ∀ (j : Fin Emit.nT), TM.Parked (V j)) (hVrA : V Emit.rA = TM.regTape (steps + 1)) (hVrB : V Emit.rB = TM.regTape (max Qc 3)) (hVrC : V Emit.rC = TM.regTape (P + 2)) (hVrD : V Emit.rD = TM.regTape 4) (hVt : V Emit.tReg = TM.regTape i) (hVp2 : V Emit.pos2Reg = TM.regTape 0) :

                                                                            headPairBodyTM Hoare specification (at row i, outer position q): emits the pair clauses (q, q') for all q' > q, mirrors the counters home, and shrinks the fuel.

                                                                            theorem Complexity.SAT.headAtMostTM_hoareTime (tp : ) (htp : tp < 3) (Qc steps P M i : ) (hM : 4 * (steps + 1) * max Qc 3 * (P + 2) * 4 M) (hi : i steps) (inp₀ : Tape) (V : Fin Emit.nTTape) (ys : List Bool) (hinp₀ : TM.Parked inp₀) (hV : ∀ (j : Fin Emit.nT), TM.Parked (V j)) (hVrA : V Emit.rA = TM.regTape (steps + 1)) (hVrB : V Emit.rB = TM.regTape (max Qc 3)) (hVrC : V Emit.rC = TM.regTape (P + 2)) (hVrD : V Emit.rD = TM.regTape 4) (hVt : V Emit.tReg = TM.regTape i) (hVp1 : V Emit.pos1Reg = TM.regTape 0) (hVf1 : V Emit.pos1Fuel = TM.regTape (P + 1)) (hVp2 : V Emit.pos2Reg = TM.regTape 0) (hVaux : V Emit.auxReg = TM.regTape P) :

                                                                            headAtMostTM Hoare specification (at row i, tape index tp): appends the encoded pairwise at-most-one clauses, consuming the shrink fuel (auxReg: P in, 0 out).

                                                                            One (row, tape) head leaf: initialize the shrink fuel, then the exactly-one block.

                                                                            Equations
                                                                            Instances For
                                                                              theorem Complexity.SAT.headLeafTM_hoareTime (tp : ) (htp : tp < 3) (Qc steps P M i : ) (hM : 4 * (steps + 1) * max Qc 3 * (P + 2) * 4 M) (hi : i steps) (inp₀ : Tape) (V : Fin Emit.nTTape) (ys : List Bool) (hinp₀ : TM.Parked inp₀) (hV : ∀ (j : Fin Emit.nT), TM.Parked (V j)) (hVrA : V Emit.rA = TM.regTape (steps + 1)) (hVrB : V Emit.rB = TM.regTape (max Qc 3)) (hVrC : V Emit.rC = TM.regTape (P + 2)) (hVrD : V Emit.rD = TM.regTape 4) (hVt : V Emit.tReg = TM.regTape i) (hVp1 : V Emit.pos1Reg = TM.regTape 0) (hVf1 : V Emit.pos1Fuel = TM.regTape (P + 1)) (hVp2 : V Emit.pos2Reg = TM.regTape 0) (hVaux : V Emit.auxReg = TM.regTape 0) (hVpReg : V Emit.pReg = TM.regTape P) :

                                                                              headLeafTM Hoare specification (at row i, tape index tp).

                                                                              The oneHotHeads row body: head leaves at the three tape indices.

                                                                              Equations
                                                                              Instances For

                                                                                Budget of the oneHotHeads row body.

                                                                                Equations
                                                                                Instances For
                                                                                  theorem Complexity.SAT.headsBodyTM_hoareTime (Qc steps P M i : ) (hM : 4 * (steps + 1) * max Qc 3 * (P + 2) * 4 M) (hi : i steps) (inp₀ : Tape) (V : Fin Emit.nTTape) (ys : List Bool) (hinp₀ : TM.Parked inp₀) (hV : ∀ (j : Fin Emit.nT), TM.Parked (V j)) (hVrA : V Emit.rA = TM.regTape (steps + 1)) (hVrB : V Emit.rB = TM.regTape (max Qc 3)) (hVrC : V Emit.rC = TM.regTape (P + 2)) (hVrD : V Emit.rD = TM.regTape 4) (hVt : V Emit.tReg = TM.regTape i) (hVp1 : V Emit.pos1Reg = TM.regTape 0) (hVf1 : V Emit.pos1Fuel = TM.regTape (P + 1)) (hVp2 : V Emit.pos2Reg = TM.regTape 0) (hVaux : V Emit.auxReg = TM.regTape 0) (hVpReg : V Emit.pReg = TM.regTape P) :

                                                                                  headsBodyTM Hoare specification (at row i).

                                                                                  theorem Complexity.SAT.emitOneHotHeadsTM_hoareTime (Qc steps P M : ) (hM : 4 * (steps + 1) * max Qc 3 * (P + 2) * 4 M) (inp₀ : Tape) (work₀ : Fin Emit.nTTape) (ys : List Bool) (hinp₀ : TM.Parked inp₀) (hwork₀ : ∀ (i : Fin Emit.nT), TM.Parked (work₀ i)) (hrA : work₀ Emit.rA = TM.regTape (steps + 1)) (hrB : work₀ Emit.rB = TM.regTape (max Qc 3)) (hrC : work₀ Emit.rC = TM.regTape (P + 2)) (hrD : work₀ Emit.rD = TM.regTape 4) (htReg : work₀ Emit.tReg = TM.regTape 0) (htFuel : work₀ Emit.tFuel = TM.regTape (steps + 1)) (hp1 : work₀ Emit.pos1Reg = TM.regTape 0) (hf1 : work₀ Emit.pos1Fuel = TM.regTape (P + 1)) (hp2 : work₀ Emit.pos2Reg = TM.regTape 0) (haux : work₀ Emit.auxReg = TM.regTape 0) (hpReg : work₀ Emit.pReg = TM.regTape P) :

                                                                                  emitOneHotHeadsTM Hoare specification: appends the encoded head one-hot family, leaving the row counter at steps + 1.

                                                                                  theorem Complexity.SAT.forall₂_flatMap {α : Type u_1} {β : Type u_2} {γ : Type u_3} {R : βγProp} (F : αList β) (G : αList γ) {l : List α} (h : al, List.Forall₂ R (F a) (G a)) :

                                                                                  Forall₂ is preserved by flatMap with pointwise-related images.

                                                                                  Descriptors of the two frame clauses at symbol s, tape index tp.

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

                                                                                    The frame leaf at one (row, tape, position): both clauses for all four symbols.

                                                                                    Equations
                                                                                    Instances For

                                                                                      Frame position sweep at one tape index.

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

                                                                                        The frame row body: bump the successor-row register, then sweep the three tapes.

                                                                                        Equations
                                                                                        • One or more equations did not get rendered due to their size.
                                                                                        Instances For
                                                                                          def Complexity.SAT.frameLeafF (Qc steps P t tp pos : ) :

                                                                                          The frame leaf formula at one (row, tape, position).

                                                                                          Equations
                                                                                          • One or more equations did not get rendered due to their size.
                                                                                          Instances For
                                                                                            theorem Complexity.SAT.framePosChunkTM_hoareTime (tp : ) (htp : tp < 3) (Qc steps P M i : ) (hM : 4 * (steps + 1) * max Qc 3 * (P + 2) * 4 M) (hi : i < steps) (inp₀ : Tape) (V : Fin Emit.nTTape) (ys : List Bool) (hinp₀ : TM.Parked inp₀) (hV : ∀ (j : Fin Emit.nT), TM.Parked (V j)) (hVrA : V Emit.rA = TM.regTape (steps + 1)) (hVrB : V Emit.rB = TM.regTape (max Qc 3)) (hVrC : V Emit.rC = TM.regTape (P + 2)) (hVrD : V Emit.rD = TM.regTape 4) (hVt : V Emit.tReg = TM.regTape i) (hVtp : V Emit.tPlusReg = TM.regTape (i + 1)) (hVp1 : V Emit.pos1Reg = TM.regTape 0) (hVf1 : V Emit.pos1Fuel = TM.regTape (P + 1)) :
                                                                                            (framePosChunkTM tp).HoareTime (TM.EmitPred inp₀ (TM.scratch V Emit.tmp Emit.tmp2 0) ys) (TM.EmitPred inp₀ (TM.scratch V Emit.tmp Emit.tmp2 0) (ys ++ List.flatMap (fun (pos : ) => (frameLeafF Qc steps P i tp pos).encode) (List.range (P + 1)))) (framePosChunkBudget M)

                                                                                            framePosChunkTM Hoare specification (at row i, tape tp; the successor-row register holds i + 1).

                                                                                            theorem Complexity.SAT.frameRowTM_hoareTime (Qc steps P M i : ) (hM : 4 * (steps + 1) * max Qc 3 * (P + 2) * 4 M) (hi : i < steps) (inp₀ : Tape) (V : Fin Emit.nTTape) (ys : List Bool) (hinp₀ : TM.Parked inp₀) (hV : ∀ (j : Fin Emit.nT), TM.Parked (V j)) (hVrA : V Emit.rA = TM.regTape (steps + 1)) (hVrB : V Emit.rB = TM.regTape (max Qc 3)) (hVrC : V Emit.rC = TM.regTape (P + 2)) (hVrD : V Emit.rD = TM.regTape 4) (hVt : V Emit.tReg = TM.regTape i) (hVtp : V Emit.tPlusReg = TM.regTape i) (hVp1 : V Emit.pos1Reg = TM.regTape 0) (hVf1 : V Emit.pos1Fuel = TM.regTape (P + 1)) :

                                                                                            frameRowTM Hoare specification (at row i < steps; the successor-row register enters at i and leaves at i + 1).

                                                                                            theorem Complexity.SAT.emitFrameTM_hoareTime (Qc steps P M : ) (hM : 4 * (steps + 1) * max Qc 3 * (P + 2) * 4 M) (inp₀ : Tape) (work₀ : Fin Emit.nTTape) (ys : List Bool) (hinp₀ : TM.Parked inp₀) (hwork₀ : ∀ (i : Fin Emit.nT), TM.Parked (work₀ i)) (hrA : work₀ Emit.rA = TM.regTape (steps + 1)) (hrB : work₀ Emit.rB = TM.regTape (max Qc 3)) (hrC : work₀ Emit.rC = TM.regTape (P + 2)) (hrD : work₀ Emit.rD = TM.regTape 4) (htReg : work₀ Emit.tReg = TM.regTape 0) (htFuel : work₀ Emit.tFuel = TM.regTape steps) (htp : work₀ Emit.tPlusReg = TM.regTape 0) (hp1 : work₀ Emit.pos1Reg = TM.regTape 0) (hf1 : work₀ Emit.pos1Fuel = TM.regTape (P + 1)) :

                                                                                            emitFrameTM Hoare specification: appends the encoded frame family, leaving row counter and successor-row register at steps.