Documentation

Complexity.Computability.Probabilistic.Traverse

Strict PPT list traversal #

An ordinary List.mapM traversal of a strict PPT program is strict PPT on framed list encodings. One polynomial coin budget, chosen from the complete encoded input list, bounds the budget of every element. Independent blocks of one random tape realize all calls. The existing deterministic list calculus charges the traversal, row extraction and complete output encoding.

Main results #

theorem Cslib.Probability.IsPPTOn.mapM {α β : Type} {input : α ↪ List Bool} {output : β ↪ List Bool} {program : α → ProbComp β} (hprogram : IsPPTOn input output program) :
IsPPTOn (Turing.MultiTapeTM.encList input) (Turing.MultiTapeTM.encList output) fun (list : List α) => List.mapM program list

Traverse a framed input list with a strict PPT program. One machine and polynomial clock work for all lists, including the empty list, and charge the complete encoded output list.

theorem Cslib.Probability.IsPPTOn.mapMWith {α β γ : Type} {input : α ↪ List Bool} {element : β ↪ List Bool} {output : γ ↪ List Bool} {list : α → List β} {program : α → β → ProbComp γ} (hprogram : IsPPTOn (Turing.MultiTapeTM.encPair input element) output fun (p : α × β) => program p.1 p.2) (hlist : Turing.MultiTapeTM.ComputableTidilyInPolyTime list input (Turing.MultiTapeTM.encList element)) :
IsPPTOn input (Turing.MultiTapeTM.encList output) fun (a : α) => List.mapM (program a) (list a)

A list traversal may use the complete original input in every call. Preparing the pairs charges for repeated captured data as well as all elements of the computed list.