术语 | 图灵完备语言(Turing-Complete Language)

简介: 如果一个计算机语言具有图灵完备性(Turing Completeness),那么这个语言就是图灵完备语言(Turing-Complete Language)。

图灵完备语言

概述

如果一个计算机语言具有图灵完备性(Turing Completeness),那么这个语言就是图灵完备语言(Turing-Complete Language)。

背景

艾伦·图灵

艾伦·麦席森·图灵

艾伦·麦席森·图灵(Alan Mathison Turing,1912.6.23 - 1954.6.7),1 英国数学家、逻辑学家、密码学家和英国首位计算机科学家,被誉为计算机科学和人工智能之父。2

他对计算机科学的发展有着很高的影响力,他用图灵机提供了算法和计算概念的形式化,图灵机可以被视为通用计算机的模型。3 他的图灵测试对人工智能的发展,作出了重要的、典型的、具挑战性的和持久的贡献。4

图灵机

在 1928 年第八届国际数学家大会上,德国数学家希尔伯特(David Hilbert,1862 - 1943)提出了关于数学的三个精辟问题:

First, was mathematics complete …(数学是完备的吗?)
Second, was mathematics consistent …(数学是一致的吗?)
And thirdly, was mathematics decidable ?(数学是可判定的吗?)

图灵机模型

希尔伯特的第三个问题又被称为判定性问题(Entscheidungsproblem)。为了证否这个命题,1936 年,图灵发表了一篇论文,题为《论可计算数,及其在判定性问题上的应用》(On Computable Numbers, with an Application to the Entscheidungsproblem)。在这篇论文里,图灵提出了一种假设的计算装置,他称之为 A-Machine(Automatic Machine,自动机器),这就是图灵机(Turing Machine)。

可计算函数

1938 年,在美国普林斯顿大学攻读博士学位的图灵,发表了一篇博士论文,题为《基于序数的逻辑系统》(Systems of Logic Based on Ordinals)。在这篇论文里,图灵定义了可计算函数(Computable Function):

A function is effectively calculable if its values can be found by some purely mechanical process.
如果一个函数的值可以通过某种纯机械的过程找到,那么这个函数就可以有效地计算出来。

在作为特定计算模型的图灵机上产生的可计算函数,就被称为图灵可计算函数

图灵完备性

如果一个计算系统可以计算每一个图灵可计算函数,那么这个系统就是图灵完备的;或者说,这个系统可以模拟通用图灵机

图灵完备性也可以用来描述计算机语言的计算能力。

定义

具有图灵完备性的计算机语言,就被称为图灵完备语言。绝大多数的编程语言,都是图灵完备语言。这包括:

  • 广泛使用的所有通用语言:

    • 过程式语言,如 FORTRAN、Pascal 等。
    • 面向对象语言,如 Java、Python 等。
    • 多范式语言,如 Ada、C++ 等。
  • 使用不太常见范式的大多数语言:

    • 函数式语言,如 Haskell、Mercury 等。
    • 逻辑式语言,如 Logtalk、Prolog 等。
    • 声明式语言,如 SQL、XSLT 等。
    • 深奥的语言(Esoteric Programming Language),一种奇特的数学娱乐形式,程序员用极其困难但数学上图灵等价的语言来实现基本的编程结构。

非图灵完备语言

并非所有的计算机语言都是图灵完备的,例如标记语言,或者更恰当地称为“容器语言”或“数据描述语言”,就不是图灵完备的。

非图灵完备语言(Non-Turing-Complete Language),包括 HTML、JSON、XML、YAML 等。

目录
相关文章
|
6月前
|
算法 安全 编译器
【C++20 新特性Concepts 概念】C++20 Concepts: Unleashing the Power of Template Programming
【C++20 新特性Concepts 概念】C++20 Concepts: Unleashing the Power of Template Programming
261 0
|
6月前
|
程序员 Swift
在Swift编程语言中,Control Transfer Statements
在Swift编程语言中,Control Transfer Statements
58 2
|
4月前
|
C++ 开发者
C++一分钟之-概念(concepts):C++20的类型约束
【7月更文挑战第6天】C++20引入了Concepts,提升模板编程的精确性和可读性。概念允许设定模板参数的编译时约束。常见问题包括过度约束、不完整约束及重载决议复杂性。要避免这些问题,需适度约束、全面覆盖约束条件并理解重载决议。示例展示了如何定义和使用`Incrementable`概念约束函数模板。概念是C++模板编程的强大力量,但也需谨慎使用以优化效率和代码质量。
99 0
|
5月前
|
算法 程序员 编译器
C++一分钟之概念(concepts):C++20的类型约束
【6月更文挑战第30天】C++20的Concepts革新了模板编程,允许更清晰地表达类型要求,提升代码可读性和编译错误反馈。本文探讨Concepts基础、应用场景、易错点及避免策略,展示如何通过概念定义如Iterable、Addable,创建更健壮的泛型代码,强调了理解和利用编译器错误信息的重要性,以及概念与类型别名的区别。Concepts现已成为现代C++程序员的关键技能。
102 0
|
6月前
|
Rust 算法 开发者
【Rust 控制流入门指南】 Introduction to Control Flow in Rust
【Rust 控制流入门指南】 Introduction to Control Flow in Rust
55 0
|
存储 Java BI
聊聊 C 语言和 ABAP 这两门编程语言的关系(二)
TIOBE 2022年3月的编程语言排行榜显示: https://www.tiobe.com/tiobe-index/ C 语言和 C++ 分别名列第二和第四位:
150 0
聊聊 C 语言和 ABAP 这两门编程语言的关系(二)
|
存储 Ubuntu Java
聊聊 C 语言和 ABAP 这两门编程语言的关系(一)
TIOBE 2022年3月的编程语言排行榜显示: https://www.tiobe.com/tiobe-index/ C 语言和 C++ 分别名列第二和第四位:
140 0
聊聊 C 语言和 ABAP 这两门编程语言的关系(一)
|
C++ 索引
Effective C++ 英中简繁术语对照
Effective C++ 英中简繁术语对照
171 0
Effective C++ 英中简繁术语对照
|
Java
Q#语言入门1 操作operation
Q# 程序会包含一个或多个操作(operation)。操作描述了量子操作带来的影响。 还可以包含一个或多个方法(function)。方法用来操作经典数据,只用来计算。   每个操作还可以调用其他操作(这不就是java里的方法吗?说对了一半,是java里的静态方法)。
1184 0