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.
A simplified basis for Partrec.
- prim {n : ℕ} {f : List.Vector ℕ n → ℕ} : Primrec' f → Partrec' ↑f
- comp {m n : ℕ} {f : List.Vector ℕ n →. ℕ} (g : Fin n → List.Vector ℕ m →. ℕ) : Partrec' f → (∀ (i : Fin n), Partrec' (g i)) → Partrec' fun (v : List.Vector ℕ m) => (List.Vector.mOfFn fun (i : Fin n) => g i v) >>= f
- rfind {n : ℕ} {f : List.Vector ℕ (n + 1) → ℕ} : Partrec' ↑f → Partrec' fun (v : List.Vector ℕ n) => Nat.rfind fun (n_1 : ℕ) => Part.some (decide (f (n_1 ::ᵥ v) = 0))
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)
:
Partrec' g
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)
:
theorem
Nat.Partrec'.map
{n : ℕ}
{f : List.Vector ℕ n →. ℕ}
{g : List.Vector ℕ (n + 1) → ℕ}
(hf : Partrec' f)
(hg : Partrec' ↑g)
:
Analogous to Nat.Partrec' for ℕ-valued functions, a predicate for partial recursive
vector-valued functions.
Equations
- Nat.Partrec'.Vec f = ∀ (i : Fin m), Nat.Partrec' fun (v : List.Vector ℕ n) => ↑(some ((f v).get i))
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))