Documentation

DescriptiveComplexity.Problems.Wide.RegChannelReduce

The reduction into the register channel #

DescriptiveComplexity.Problems.Wide.Reduce assembles the reduction into DescriptiveComplexity.WideAccept: the record, the interpretation, the transport and the hardness statement. This file does the same at the register channel – the same record, the same doubling, the same transport, and one change: the interpretation writes down the handed program (nexInterpHandedPad), whose channel writes for the argument elements and the one below them, and the problem it lands in is DescriptiveComplexity.WideRegAccept.

The transport is unchanged because it never reads which problem is being asked about (wideRegProblem_wideRegInterp_iff is wideProblem_wideInterp_iff at the other interpretation), so this half of the reduction is free. What is not free is the machine's correctness, which is the run of DescriptiveComplexity.Draw.Data.wideRegAccept_regLaid_of_rules on the yes-side and DescriptiveComplexity.Problems.Wide.DrawNo on the no-side.

The interpretation the reduction emits #

The handed machine of a source, written down over the doubled universe: DescriptiveComplexity.Draw.dblWideInterp with the clocked program that is handed its file, and the channel that writes for the argument elements and the element below them. The program carries n junk rule names, which is what buys its clock the room the count asks for (PadRules.lean); at n = 0 it is the plain program with its sites relabeled.

Equations
Instances For
    Dependency graph

    The handed machine of a source, written down in the instance: the machine over the doubled universe, composed with the doubling.

    Equations
    Instances For
      Dependency graph

      The composite's universe is the machine's #

      The composite interpretation's universe is the machine's over the doubled universe, at the handed machine: the composition equivalence followed by the order extension's, exactly as at the laid one.

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

        The interpreted structure reads the handed program's table #

        @[reducible, inline]

        The two orders the run layer wants on the handed program's rule names and phases: an arbitrary one on each, the same one the interpretation compares tags with.

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

          The interpreted structure reads the handed program's tablesrcReads at the program a reduction into DescriptiveComplexity.WideRegAccept emits.

          Dependency graph

          The machine decides the fixed point #

          theorem DescriptiveComplexity.Draw.wideRegAccept_srcEnv_iff {L : FirstOrder.Language} [L.IsRelational] (X : ExpExpansion L) (d : StepDef (X.E.sum FirstOrder.Language.order)) (A : Type) [L.Structure A] [LinearOrder A] [Finite A] [Nonempty A] (n : ) (_harity : ∀ (iv : (srcDt X d).d.B.ι), 0 < (srcDt X d).d.B.arity iv) (_htags : 52 * (4 + (srcDt X d).eDim) * Nat.card (srcDt X d).KIx + 52 * (4 + (srcDt X d).eDim) + 52 * (15 + (srcDt X d).dimC) + 2 Nat.card ((srcDt X d).NexRIxPad ((srcDt X d).d.B.ιBool) n)) :
          WideRegAccept.Holds ((dblWideRegInterp X d n).Map (srcEnv L A).α) ∃ (σ : (srcDt X d).d.B.Assignment ((srcDt X d).X.Map (srcEnv L A).α)), (srcDt X d).X.Map (srcEnv L A).α (srcDt X d).d.out

          The emitted machine accepts exactly when some stage satisfies the kernel, read over the doubled universe and at the order the encoding pulls back. This is dwideAcceptSpace_srcEnv_iff at the handed machine: the record's own facts – its table is read (srcRegReads), its payload fits, its dimension has slack, its channel marks the argument elements – plus the two the source side owes, that every guessed variable has an argument and that the padded rule names outnumber the constant the clock is measured against.

          Dependency graph
          theorem DescriptiveComplexity.Draw.wideRegAccept_kernel_iff {L : FirstOrder.Language} [L.IsRelational] (A : Type) [L.Structure A] [LinearOrder A] [Finite A] [Nonempty A] (K : NexKernel L) (n : ) (_harity : ∀ (iv : (srcDt K.X K.toStepDef).d.B.ι), 0 < (srcDt K.X K.toStepDef).d.B.arity iv) (_htags : 52 * (4 + (srcDt K.X K.toStepDef).eDim) * Nat.card (srcDt K.X K.toStepDef).KIx + 52 * (4 + (srcDt K.X K.toStepDef).eDim) + 52 * (15 + (srcDt K.X K.toStepDef).dimC) + 2 Nat.card ((srcDt K.X K.toStepDef).NexRIxPad ((srcDt K.X K.toStepDef).d.B.ιBool) n)) :

          The handed machine decides the kernel, at the doubled universe: the record's correctness (wideRegAccept_srcEnv_iff) read through NexKernel.holds_iff_structure₁, which is the same proposition spelled the kernel's way. This is hmach's content, with the two obligations the source side owes still in front of it.

          Dependency graph

          The emitted instance is a yes-instance exactly when the source is, for any problem about wide machines: the composite's universe is the machine's over the doubled universe (wideRegInterpEquiv), the caller says what the machine decides there, and the relativized expansion's points are the original's. Which problem PW is, the transport never asks – which is why the register channel costs nothing here.

          Dependency graph

          The emitted instance is a yes-instance of acceptance on a clock at the register channel exactly when the source is, given the handed machine's own correctness at the doubled universe.

          Dependency graph

          The reduction, and NEXPTIME-hardness #

          Every NEXPTIME source problem reduces to acceptance on a clock at the register channel. The drawing is the EXPSPACE reduction's at the kernel's own step definition; only the program written down and the channel it is handed change. Two paddings make it unconditional: the kernel's variables gain an argument (NexKernel.withArg), which the machine needs to address a stage on its tape, and the program gains as many junk rule names as the clock's count asks for (PadRules.lean), which costs the drawing nothing and buys its budget outright.

          Dependency graph

          Acceptance on a clock at the register channel is NEXPTIME-hard.

          Dependency graph

          Acceptance on a clock at the register channel is NEXPTIME-complete. The membership half is DescriptiveComplexity.wideRegAccept_mem_NEXPTIME.

          Dependency graph