Documentation

Mathlib.Computability.PartrecBasis

A simplified basis for partial recursive functions #

This file defines Nat.Partrec', an inductive predicate that provides an alternative, structural basis for partial recursive functions using vectors. It establishes the equivalence between this vector-based definition and the standard Partrec definition.

inductive Nat.Partrec' {n : } :

A simplified basis for Partrec.

Instances For
    theorem Nat.Partrec'.of_eq {n : } {f g : List.Vector n →. } (hf : Partrec' f) (H : ∀ (i : List.Vector n), f i = g i) :
    theorem Nat.Partrec'.of_prim {n : } {f : List.Vector n} (hf : Primrec f) :
    theorem Nat.Partrec'.tail {n : } {f : List.Vector n →. } (hf : Partrec' f) :
    Partrec' fun (v : List.Vector n.succ) => f v.tail
    theorem Nat.Partrec'.bind {n : } {f : List.Vector n →. } {g : List.Vector (n + 1) →. } (hf : Partrec' f) (hg : Partrec' g) :
    Partrec' fun (v : List.Vector n) => (f v).bind fun (a : ) => g (a ::ᵥ v)
    theorem Nat.Partrec'.map {n : } {f : List.Vector n →. } {g : List.Vector (n + 1)} (hf : Partrec' f) (hg : Partrec' g) :
    Partrec' fun (v : List.Vector n) => Part.map (fun (a : ) => g (a ::ᵥ v)) (f v)

    Analogous to Nat.Partrec' for -valued functions, a predicate for partial recursive vector-valued functions.

    Equations
    Instances For
      theorem Nat.Partrec'.Vec.prim {n m : } {f : List.Vector nList.Vector m} (hf : Primrec'.Vec f) :
      Vec f
      theorem Nat.Partrec'.cons {n m : } {f : List.Vector n} {g : List.Vector nList.Vector m} (hf : Partrec' f) (hg : Vec g) :
      Vec fun (v : List.Vector n) => f v ::ᵥ g v
      theorem Nat.Partrec'.comp' {n m : } {f : List.Vector m →. } {g : List.Vector nList.Vector m} (hf : Partrec' f) (hg : Vec g) :
      Partrec' fun (v : List.Vector n) => f (g v)
      theorem Nat.Partrec'.comp₁ {n : } (f : →. ) {g : List.Vector n} (hf : Partrec' fun (v : List.Vector 1) => f v.head) (hg : Partrec' g) :
      Partrec' fun (v : List.Vector n) => f (g v)
      theorem Nat.Partrec'.rfindOpt {n : } {f : List.Vector (n + 1)} (hf : Partrec' f) :
      Partrec' fun (v : List.Vector n) => Nat.rfindOpt fun (a : ) => Denumerable.ofNat (Option ) (f (a ::ᵥ v))