Documentation

Complexitylib.Models.TuringMachine.Combinators.WorkBranch.Internal

Direct work-symbol branch combinator -- proof internals #

def Complexity.TM.workBranchBlankWrap {n : } (idx : Fin n) (onBlank onNonblank : TM n) (c : Cfg n onBlank.Q) :
Cfg n (branchWorkBlankTM idx onBlank onNonblank).Q

Embed a blank-branch configuration into the combined controller.

Equations
Instances For
    def Complexity.TM.workBranchNonblankWrap {n : } (idx : Fin n) (onBlank onNonblank : TM n) (c : Cfg n onNonblank.Q) :
    Cfg n (branchWorkBlankTM idx onBlank onNonblank).Q

    Embed a nonblank-branch configuration into the combined controller.

    Equations
    Instances For
      theorem Complexity.TM.workBranchBlankWrap_halted_iff_internal {n : } (idx : Fin n) (onBlank onNonblank : TM n) (c : Cfg n onBlank.Q) :
      (branchWorkBlankTM idx onBlank onNonblank).halted (workBranchBlankWrap idx onBlank onNonblank c) onBlank.halted c
      theorem Complexity.TM.workBranchNonblankWrap_halted_iff_internal {n : } (idx : Fin n) (onBlank onNonblank : TM n) (c : Cfg n onNonblank.Q) :
      (branchWorkBlankTM idx onBlank onNonblank).halted (workBranchNonblankWrap idx onBlank onNonblank c) onNonblank.halted c
      theorem Complexity.TM.branchWorkBlankTM_blank_step_internal {n : } (idx : Fin n) (onBlank onNonblank : TM n) {c c' : Cfg n onBlank.Q} (hstep : onBlank.step c = some c') :
      (branchWorkBlankTM idx onBlank onNonblank).step (workBranchBlankWrap idx onBlank onNonblank c) = some (workBranchBlankWrap idx onBlank onNonblank c')
      theorem Complexity.TM.branchWorkBlankTM_nonblank_step_internal {n : } (idx : Fin n) (onBlank onNonblank : TM n) {c c' : Cfg n onNonblank.Q} (hstep : onNonblank.step c = some c') :
      (branchWorkBlankTM idx onBlank onNonblank).step (workBranchNonblankWrap idx onBlank onNonblank c) = some (workBranchNonblankWrap idx onBlank onNonblank c')
      theorem Complexity.TM.branchWorkBlankTM_blank_reachesIn_internal {n : } (idx : Fin n) (onBlank onNonblank : TM n) {t : } {c c' : Cfg n onBlank.Q} (hreach : onBlank.reachesIn t c c') :
      (branchWorkBlankTM idx onBlank onNonblank).reachesIn t (workBranchBlankWrap idx onBlank onNonblank c) (workBranchBlankWrap idx onBlank onNonblank c')
      theorem Complexity.TM.branchWorkBlankTM_nonblank_reachesIn_internal {n : } (idx : Fin n) (onBlank onNonblank : TM n) {t : } {c c' : Cfg n onNonblank.Q} (hreach : onNonblank.reachesIn t c c') :
      (branchWorkBlankTM idx onBlank onNonblank).reachesIn t (workBranchNonblankWrap idx onBlank onNonblank c) (workBranchNonblankWrap idx onBlank onNonblank c')
      theorem Complexity.TM.branchWorkBlankTM_dispatch_blank_internal {n : } (idx : Fin n) (onBlank onNonblank : TM n) (inp : Tape) (work : Fin nTape) (out : Tape) (hblank : (work idx).read = Γ.blank) (hinp : inp.read Γ.start) (hwork : ∀ (i : Fin n), (work i).read Γ.start) (hout : out.read Γ.start) :
      (branchWorkBlankTM idx onBlank onNonblank).step { state := (branchWorkBlankTM idx onBlank onNonblank).qstart, input := inp, work := work, output := out } = some (workBranchBlankWrap idx onBlank onNonblank { state := onBlank.qstart, input := inp, work := work, output := out })
      theorem Complexity.TM.branchWorkBlankTM_dispatch_nonblank_internal {n : } (idx : Fin n) (onBlank onNonblank : TM n) (inp : Tape) (work : Fin nTape) (out : Tape) (hnonblank : (work idx).read Γ.blank) (hinp : inp.read Γ.start) (hwork : ∀ (i : Fin n), (work i).read Γ.start) (hout : out.read Γ.start) :
      (branchWorkBlankTM idx onBlank onNonblank).step { state := (branchWorkBlankTM idx onBlank onNonblank).qstart, input := inp, work := work, output := out } = some (workBranchNonblankWrap idx onBlank onNonblank { state := onNonblank.qstart, input := inp, work := work, output := out })
      theorem Complexity.TM.branchWorkBlankTM_reachesIn_blank_frame_internal {n : } (idx : Fin n) (onBlank onNonblank : TM n) (inp : Tape) (work : Fin nTape) (out : Tape) {t : } {c' : Cfg n onBlank.Q} (hblank : (work idx).read = Γ.blank) (hinp : inp.read Γ.start) (hwork : ∀ (i : Fin n), (work i).read Γ.start) (hout : out.read Γ.start) (hreach : onBlank.reachesIn t { state := onBlank.qstart, input := inp, work := work, output := out } c') (hhalt : onBlank.halted c') :
      ∃ (C : Cfg n (branchWorkBlankTM idx onBlank onNonblank).Q), (branchWorkBlankTM idx onBlank onNonblank).reachesIn (t + 1) { state := (branchWorkBlankTM idx onBlank onNonblank).qstart, input := inp, work := work, output := out } C (branchWorkBlankTM idx onBlank onNonblank).halted C C.input = c'.input C.work = c'.work C.output = c'.output
      theorem Complexity.TM.branchWorkBlankTM_reachesIn_nonblank_frame_internal {n : } (idx : Fin n) (onBlank onNonblank : TM n) (inp : Tape) (work : Fin nTape) (out : Tape) {t : } {c' : Cfg n onNonblank.Q} (hnonblank : (work idx).read Γ.blank) (hinp : inp.read Γ.start) (hwork : ∀ (i : Fin n), (work i).read Γ.start) (hout : out.read Γ.start) (hreach : onNonblank.reachesIn t { state := onNonblank.qstart, input := inp, work := work, output := out } c') (hhalt : onNonblank.halted c') :
      ∃ (C : Cfg n (branchWorkBlankTM idx onBlank onNonblank).Q), (branchWorkBlankTM idx onBlank onNonblank).reachesIn (t + 1) { state := (branchWorkBlankTM idx onBlank onNonblank).qstart, input := inp, work := work, output := out } C (branchWorkBlankTM idx onBlank onNonblank).halted C C.input = c'.input C.work = c'.work C.output = c'.output
      theorem Complexity.TM.branchWorkBlankTM_hoareTime_internal {n : } (idx : Fin n) (onBlank onNonblank : TM n) {pre blankPre nonblankPre blankPost nonblankPost : TapePred n} {blankTime nonblankTime : } (hframe : ∀ (inp : Tape) (work : Fin nTape) (out : Tape), pre inp work outinp.read Γ.start (∀ (i : Fin n), (work i).read Γ.start) out.read Γ.start) (hblankPre : ∀ (inp : Tape) (work : Fin nTape) (out : Tape), pre inp work out(work idx).read = Γ.blankblankPre inp work out) (hnonblankPre : ∀ (inp : Tape) (work : Fin nTape) (out : Tape), pre inp work out(work idx).read Γ.blanknonblankPre inp work out) (hblank : onBlank.HoareTime blankPre blankPost blankTime) (hnonblank : onNonblank.HoareTime nonblankPre nonblankPost nonblankTime) :
      (branchWorkBlankTM idx onBlank onNonblank).HoareTime pre (fun (inp : Tape) (work : Fin nTape) (out : Tape) => blankPost inp work out nonblankPost inp work out) (branchWorkBlankTime blankTime nonblankTime)
      theorem Complexity.TM.branchWorkBlankTM_hoareTimeSpace_internal {n : } (idx : Fin n) (onBlank onNonblank : TM n) {pre blankPre nonblankPre blankPost nonblankPost : TapePred n} {blankTime nonblankTime inputLength blankSpace nonblankSpace : } (hframe : ∀ (inp : Tape) (work : Fin nTape) (out : Tape), pre inp work outinp.read Γ.start (∀ (i : Fin n), (work i).read Γ.start) out.read Γ.start) (hblankPre : ∀ (inp : Tape) (work : Fin nTape) (out : Tape), pre inp work out(work idx).read = Γ.blankblankPre inp work out) (hnonblankPre : ∀ (inp : Tape) (work : Fin nTape) (out : Tape), pre inp work out(work idx).read Γ.blanknonblankPre inp work out) (hblank : onBlank.HoareTimeSpace blankPre blankPost blankTime inputLength blankSpace) (hnonblank : onNonblank.HoareTimeSpace nonblankPre nonblankPost nonblankTime inputLength nonblankSpace) :
      (branchWorkBlankTM idx onBlank onNonblank).HoareTimeSpace pre (fun (inp : Tape) (work : Fin nTape) (out : Tape) => blankPost inp work out nonblankPost inp work out) (branchWorkBlankTime blankTime nonblankTime) inputLength (max blankSpace nonblankSpace)
      theorem Complexity.TM.IsTransducer.branchWorkBlankTM_internal {n : } {idx : Fin n} {onBlank onNonblank : TM n} (hblank : onBlank.IsTransducer) (hnonblank : onNonblank.IsTransducer) :
      (branchWorkBlankTM idx onBlank onNonblank).IsTransducer

      A canonical little-endian natural reads blank exactly at zero.