Multi-tape machines decide only recursive predicates
DefinitionDecidability by multi-tape machines#✓fully proved
Let \(\alpha\) be a primcodable type (it has an encoding \(\mathrm{encode} : \alpha \to \mathbb{N}\) whose decoding is primitive recursive). A predicate \(p\) on \(\alpha\) is decidable by a multi-tape machine when there are a number \(k\) and a deterministic Turing machine \(M\) with finitely many states, a read-only input tape, \(k\) work tapes and a write-only output tape, all over the Boolean alphabet, such that for every \(a \in \alpha\) there is a Boolean \(b\) for which \(M\) computes the one-letter word \(b\) on the binary word of \(\mathrm{encode}(a)\) (least significant bit first), and \(b\) is true exactly when \(p(a)\) holds. Here \(M\) computes a word \(v\) on an input word \(w\) when its run started on \(w\) halts with \(v\) on its output tape.
DefinitionRecognizability by multi-tape machines#✓fully proved
Let \(\alpha\) be a primcodable type (it has an encoding \(\mathrm{encode} : \alpha \to \mathbb{N}\) whose decoding is primitive recursive). A predicate \(p\) on \(\alpha\) is recognizable by a multi-tape machine when there are a number \(k\) and a deterministic Turing machine \(M\) with finitely many states, a read-only input tape, \(k\) work tapes and a write-only output tape, all over the Boolean alphabet, such that for every \(a \in \alpha\), the run of \(M\) started on the binary word of \(\mathrm{encode}(a)\) (least significant bit first) halts if and only if \(p(a)\) holds.
DefinitionCo-recognizability by multi-tape machines#✓fully proved
Let \(\alpha\) be a primcodable type (it has an encoding \(\mathrm{encode} : \alpha \to \mathbb{N}\) whose decoding is primitive recursive). A predicate \(p\) on \(\alpha\) is co-recognizable by a multi-tape machine when its complement \(\neg p\) is recognizable by a multi-tape machine.
def MultiTapeCoRecognizable (p : α → Prop) : Prop :=
MultiTapeRecognizable fun a ↦ ¬p a
def MultiTapeRecognizable (p : α → Prop) : Prop :=
∃ (k : ℕ) (State : Type) (_ : Finite State) (tm : MultiTapeTM k Bool State),
∀ a, (∃ o, tm.Computes (encodeNat (encode a)) o) ↔ p a
CSLibExt/Computability/Machines/Turing/MultiTape/Bridge.lean:90
Uses 1
TheoremA predicate recognizable by a multi-tape machine is recursively enumerable#✓fully proved
Let \(\alpha\) be a primcodable type (it has an encoding \(\mathrm{encode} : \alpha \to \mathbb{N}\) whose decoding is primitive recursive). If a predicate \(p\) on \(\alpha\) is recognizable by a multi-tape machine, then \(p\) is recursively enumerable, that is, the partial function on \(\alpha\) that is defined, with a trivial value, exactly where \(p\) holds is partial recursive.
theorem MultiTapeRecognizable.rePred (h : MultiTapeRecognizable p) : REPred p
def MultiTapeRecognizable (p : α → Prop) : Prop :=
∃ (k : ℕ) (State : Type) (_ : Finite State) (tm : MultiTapeTM k Bool State),
∀ a, (∃ o, tm.Computes (encodeNat (encode a)) o) ↔ p a
CSLibExt/Computability/Machines/Turing/MultiTape/Bridge.lean:90
Uses 15 · Used by 1
TheoremA predicate decided by a multi-tape machine is recursively enumerable#✓fully proved
Let \(\alpha\) be a primcodable type (it has an encoding \(\mathrm{encode} : \alpha \to \mathbb{N}\) whose decoding is primitive recursive). If a predicate \(p\) on \(\alpha\) is decidable by a multi-tape machine, then \(p\) is recursively enumerable, that is, the partial function on \(\alpha\) that is defined, with a trivial value, exactly where \(p\) holds is partial recursive.
theorem MultiTapeDecidable.rePred (h : MultiTapeDecidable p) : REPred p
def MultiTapeDecidable (p : α → Prop) : Prop :=
∃ (k : ℕ) (State : Type) (_ : Finite State) (tm : MultiTapeTM k Bool State),
∀ a, ∃ b : Bool, tm.Computes (encodeNat (encode a)) [b] ∧ (b = true ↔ p a)
CSLibExt/Computability/Machines/Turing/MultiTape/Bridge.lean:83
Uses 16 · Used by 1
TheoremA predicate decided by a multi-tape machine has a recursively enumerable complement#✓fully proved
Let \(\alpha\) be a primcodable type (it has an encoding \(\mathrm{encode} : \alpha \to \mathbb{N}\) whose decoding is primitive recursive). If a predicate \(p\) on \(\alpha\) is decidable by a multi-tape machine, then its complement \(\neg p\) is recursively enumerable, that is, the partial function on \(\alpha\) that is defined, with a trivial value, exactly where \(\neg p\) holds is partial recursive.
theorem MultiTapeDecidable.rePred_not (h : MultiTapeDecidable p) :
REPred fun a ↦ ¬p a
def MultiTapeDecidable (p : α → Prop) : Prop :=
∃ (k : ℕ) (State : Type) (_ : Finite State) (tm : MultiTapeTM k Bool State),
∀ a, ∃ b : Bool, tm.Computes (encodeNat (encode a)) [b] ∧ (b = true ↔ p a)
CSLibExt/Computability/Machines/Turing/MultiTape/Bridge.lean:83
Uses 16 · Used by 1
TheoremA predicate decided by a multi-tape machine is computable#✓fully proved
Let \(\alpha\) be a primcodable type (it has an encoding \(\mathrm{encode} : \alpha \to \mathbb{N}\) whose decoding is primitive recursive). If a predicate \(p\) on \(\alpha\) is decidable by a multi-tape machine, then \(p\) is computable, that is, \(p\) is decidable and its Boolean characteristic function \(\alpha \to \mathrm{Bool}\) is computable.
This is Post's theorem applied to \(p\) and its complement, both recursively enumerable.
theorem MultiTapeDecidable.computablePred (h : MultiTapeDecidable p) : ComputablePred p
def MultiTapeDecidable (p : α → Prop) : Prop :=
∃ (k : ℕ) (State : Type) (_ : Finite State) (tm : MultiTapeTM k Bool State),
∀ a, ∃ b : Bool, tm.Computes (encodeNat (encode a)) [b] ∧ (b = true ↔ p a)
CSLibExt/Computability/Machines/Turing/MultiTape/Bridge.lean:83
Uses 3 · Used by 1
TheoremMulti-tape machines decide no more than multi-stack machines#✓fully proved
Let \(\alpha\) be a primcodable type (it has an encoding \(\mathrm{encode} : \alpha \to \mathbb{N}\) whose decoding is primitive recursive). Every predicate on \(\alpha\) that is decidable by a multi-tape machine is decidable by a multi-stack machine.
theorem multiTapeDecidable_implies_tm2Decidable (h : MultiTapeDecidable p) :
TM2Decidable p
def MultiTapeDecidable (p : α → Prop) : Prop :=
∃ (k : ℕ) (State : Type) (_ : Finite State) (tm : MultiTapeTM k Bool State),
∀ a, ∃ b : Bool, tm.Computes (encodeNat (encode a)) [b] ∧ (b = true ↔ p a)
CSLibExt/Computability/Machines/Turing/MultiTape/Bridge.lean:83
def TM2Decidable (p : α → Prop) : Prop :=
∃ f : ℕ → ℕ, Nonempty (TM2Computable encodeNat encodeNat f) ∧ ∀ a, f (encode a) = 1 ↔ p a
CSLibExt/Computability/Decidability/Basic.lean:60
TheoremMulti-tape machines recognize no more than multi-stack machines#✓fully proved
Let \(\alpha\) be a primcodable type (it has an encoding \(\mathrm{encode} : \alpha \to \mathbb{N}\) whose decoding is primitive recursive). Every predicate on \(\alpha\) that is recognizable by a multi-tape machine is recognizable by a multi-stack machine.
theorem multiTapeRecognizable_implies_tm2Recognizable (h : MultiTapeRecognizable p) :
TM2Recognizable p
def MultiTapeRecognizable (p : α → Prop) : Prop :=
∃ (k : ℕ) (State : Type) (_ : Finite State) (tm : MultiTapeTM k Bool State),
∀ a, (∃ o, tm.Computes (encodeNat (encode a)) o) ↔ p a
CSLibExt/Computability/Machines/Turing/MultiTape/Bridge.lean:90
def TM2Recognizable (p : α → Prop) : Prop :=
∃ (tm : FinTM2) (e : tm.Γ tm.k₀ ≃ Bool),
∀ a, p a ↔ TM2HaltsOn tm ((encodeNat (encode a)).map e.symm)
CSLibExt/Computability/Decidability/Basic.lean:65
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.