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 ℕ n → List.Vector ℕ m} (hf : Primrec'.Vec f) :
      Vec f
      theorem Nat.Partrec'.cons {n m : ℕ} {f : List.Vector ℕ n → ℕ} {g : List.Vector ℕ n → List.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 ℕ n → List.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))