亚结构逻辑在数理逻辑中,特别是联合上证明理论的时候,一些亚结构逻辑已经作为比常规系统弱的命题演算系统被介入了。同常规系统的不同之处在于它们有更少的结构规则可用: 结构规则的概念是基于相继式(sequent)表达,而不是自然演绎的公式化表达。两个重要的亚结构逻辑是相干逻辑和线性逻辑。
在相继式演算中,你可以把证明的每一行写为
:。
这里的结构规则是重写相继式左手端的 Γ 的规则,Γ 是最初被构想为命题的字符串。这个字符串的标准解释是合取式: 我们希望把相继式符号
:
读做
:(A 与 B) 蕴涵 C。
这里我们把右手端的 Σ 采纳为一个单一的命题 C (这是直觉主义风格的相继式); 但是所有的东西都同样的适用于一般情况,因为所有的操作都发生在十字转门(turnstile)符号的左边。
因为合取是交换性和结合性的操作,相继式理论的形式架设通常包括相应的结构规则来重写相继式的 Γ - 例如
:
演绎自
:。
还有对应于合取特性的等幂性和单调性的进一步的结构规则: 从
:
我们可以演绎出
:。
还有从
:
我们可以演绎出,对于任何 B,
:。
在线性逻辑中有重复的假设(hypothese)'被认为'不同于单一的出现,它排除了这两个规则。而相干逻辑只排除后者的规则,因为 B 明显的与结论无关。
这些是结构规则的基本例子。在应用到常规命题演算的时候,这些规则是没有任何争议的。它们自然的出现于证明理论中,并在那里被首次注意到(在获得一个名字之前)。
外部链接
- [http://plato.stanford.edu/entries/logic-substructural/ Article on Substructural logics] at the Stanford Encyclopedia of Philosophy
Category:逻辑
数理逻辑数理逻辑是数学的一个分支,其研究对象是对证明和计算这两个直观概念进行符号化以后的形式系统。数理逻辑是数学基础的一个不可缺少的组成部分。
数理逻辑的研究范围是逻辑中可被数学模式化的部分。以前称为符号逻辑(相对于哲学逻辑),又称元数学,后者的使用现已局限于证明论的某些方面。
历史
“数理逻辑”的名称由皮亚诺(Peano)首先给出,他又称其为符号逻辑。数理逻辑在本质上依然是亚里士多德的逻辑学,但从记号学的观点来讲,它是用抽象代数来记述的。
某些哲学倾向浓厚的数学家对用符号或代数方法来处理形式逻辑作过一些尝试,比如说莱布尼兹和兰伯特(Johann Heinrich Lambert);但他们的工作鲜为人知,后继无人。直到19世纪中叶,乔治·布尔和其后的奥古斯都·德·摩根才提出了一种处理逻辑问题的系统性的数学方法(当然不是定量性的)。
亚里士多德以来的传统逻辑得到改革和完成,由此也得到了研究数学基本概念的合适工具。虽然这并不意味着1900年至1925年间的有关数学基础的争论已有了定论,但这“新”逻辑在很大程度上澄清了有关数学的哲学问题。
传统的逻辑研究(参见逻辑论题列表)较偏重于“论据的形式”,而当代数理逻辑的态度也许可以被总结为对于内容的组合研究。它同时包括“语形”(例如,从一形式语言把一个文字串传送给一编译器程序,从而转写为机器指令)和“语义”(在模型论中构造特定模型或全部模型的集合)。
数理逻辑的里程碑式著作有哥特洛布·弗雷格(Gottlob Frege)的《概念文字》(Begriffsschrift)和伯特兰·罗素的《数学原理》(Principia Mathematica)。
数理逻辑论的体系
数理逻辑的主要分支包括:模型论、证明论、递归函数论。有时还包括公理集合论。数理逻辑和计算机科学有许多重合之处,这是因为许多计算机科学的先驱者既是数学家、又是逻辑学家,比如说象阿兰·图灵。
程序语言学、语义学的研究从模型论衍生而来,而程序验证则从模型论的模型检测衍生而来。
柯里-霍华德同构(Curry-Howard isomorphism)给出“证明”和“程序”的等价性,这一结果与证明论有关,直觉逻辑和线性逻辑在此起了很大作用。λ演算以及其它演算和组合逻辑现在属于理想程序语言。
计算机科学在自动验证和自动寻找证明等技巧方面的成果对逻辑研究做出了贡献,比如说自动定理证明和逻辑编程。
一些基本结果
一些重要结果是:
- 一阶公式的普遍有效性的推定证明可用算法来检查有效性。用技术语言来说,证明集合是原始递归的。实质上,这就是哥德尔完备性定理,虽然那个定理的通常陈述使它与算法之间的关系不明显。
- 有效的一阶公式的集合是不可计算的,也就是说,不存在检测普遍有效性的算法。尽管以下算法存在:对此算法输入一个一阶公式,如果这个一阶公式是普遍有效的,那么算法将在某一时刻停机,如果不是普遍有效的,那么算法将会永远不停地计算下去。然而,即使算法已经运行了亿万年,公式是否有效仍是未知数。换句话说,这一集合是“递归可数的”,用更通俗的话来讲,是“半可判定的”。
- 普遍有效的二阶公式的集合甚至不是递归可数的。这是哥德尔不完备定理的一个结果。
- 勒文海姆-斯科伦定理(Löwenheim-Skolem theorem)。
- 相继式演算(sequent calculus)中的切割-消去法。
- 保罗·科恩(Paul Cohen)在1963年证明的连续统假设的独立性。
技术参考
一阶语言和结构
定义 一阶语言 是一组独特的印刷上的符号,分类如下:
# 等价符号 ;连结词 ,;全称量词 和圆括号 ,。
# 变量符号的可数集合 。
# 常量符号的集合 。
# 函数符号的集合 。
# 关系符号的集合 。
所以,要指定一个语言,通常只指定一组常量符号、函数符号和关系符号就足够了,因为第一组符号是标准的。圆括号只充当形成符号的群组的目的,在公式中书写函数和关系的时候被非形式的使用。
这些符号就是符号。它们不代表任何东西。他们不意味任何事物。加入语义和语言学要点对数学语言的形式化是没有用的。
因为确实需要在这些形式化之外获得某些意义。在语言之上的模型的概念就提供着这种语义。
定义 在语言 上的 -结构是由非空集合 构成的包(bundle),它是结构的全集,包括了:
# 对于来自 的每个常量符号 ,有一个元素 。
# 对于来自 的每个 -元函数符号 ,有一个 -元函数 。
# 对于来自 的每个 -元关系符号 ,有一个在 上的 -元关系,就是说一个子集 。
在这个上下文中对这种结构使用模型这个词。但是理解它的动机或许是重要的,见下。
项、公式和句子
定义 -项是来自 的符号的非空有限字符串 ,如
- 是一个变量符号。
- 是一个常量符号。
- 是形如 的字符串,这里的 是 -元函数符号而 , ..., 是 的项。
定义 -公式是来自 的符号的非空有限字符串 ,如
- 是形如 的字符串,这里的 和 是 的项。
- 是形如 的字符串,这里的 是 -元关系符号而 , ..., 是 的项。
- 形如 ,这里的 是 -公式。
- 形如 ,这里的 和 二者是 -公式。
- 形如 ,这里的 是来自 的变量符号而 是 -公式。
定义 由要么第一个要么第二个子句来特征描述的 -公式被称为原子。
定义 设 是一个 -公式。来自 的变量符号 被称为在 中是自由的,如果
- 是原子,而 出现在 中。
- 形如 ,而 在 中是自由的。
- 形如 ,而 在 或 中是自由的。
- 形如 ,这里的 和 不是同一个变量符号而 在 中是自由的。
定义 句子是没有自由变量的公式。
指派函数
此后, 将指称一阶语言, 是 -结构,它下层的全集用 指称。每个公式都将被理解为 -公式。
定义 到 的变量指派函数(v.a.f.)是自 的变量集合到 的函数。
定义 设 是到 的 v.a.f.。我们定义项指派函数(t.a.f.) ,自 -项的集合到 ,如:
- 如果 是变量符号 ,则 。
- 如果 是常量符号 ,则 。
- 如果 形如 ,则 。
定义 设 是到 的 v.a.f.,假定 是一个变量而 。我们定义 v.a.f. ,指称为 -指派函数的修改 ,为
逻辑满足
定义 设 是公式,并假定 是到 的 v.a.f.。我们称 通过指派 满足 ,并写为 ,如果:
- 形如 ,而 。
- 形如 ,而 。
- 形如 ,而 。
- 形如 ,而 或者 。
- 形如 ,而对于每个元素 ,。
定义 设 是公式,并对到 的每个 v.a.f. 假定 。则我们称 建模 ,并写为 。
定义 设 是公式的集合,并对每个公式 假定 ,则我们称 建模 ,并写为 。
在 是句子的情况下,就是没有自由变量的公式,存在一个单一的 v.a.f.,对于它 ,直接的蕴涵了 。
定义 设 是一个句子,并假定 。则我们称 为在 中是真实的。
逻辑蕴含和真实
定义 设 和 是公式的集合。我们称 为逻辑蕴涵 ,并写为 ,如果对于所有结构 , 蕴涵 。
作为简写,在处理单元素集合(singleton)的时候,我们经常写 替代 。
定义 设 是公式,并假定 。则我们称 是全集有效,或者简单有效,在这种情况下我们简单的写为 。
假如公式 是有效的,实际上意味着所有 -结构 建模 。
定义 设 是一个句子,并假定 。则我们称 为真实的。
变量代换
定义 设 是项,并假定 是变量,而 是另一个项。我们定义这个项 ,读做把 替换为 的 ,如下:
- 如果 是变量符号 ,则 被定义为是项 。
- 如果 是不是 的变量符号,则 被定义为项 。
- 如果 是常量符号,则 被定义为项 。
- 如果 形如 ,则 被定义为项 。
定义 设 是公式,并假定 是变量,而 是项。我们定义公式 ,读做把 替换为 的 ,如下:
- 如果 形如 ,则 被定义为公式 。
- 如果 形如 ,则 被定义为公式 。
- 如果 形如 ,则 被定义为公式 。
- 如果 形如 ,则 被定义为公式 。
- 如果 形如 ,则
- 如果 and 是同一个变量符号,则 被定义为公式 。
- 否则 被定义为公式 。
可代换性
定义 设 是公式,并假定 是变量,而 是项。我们称 对 在 中是可代换的,如果:
- 是原子。
- 形如 ,而 对 在 中是可代换的。
- 形如 ,而 对 在 和 二者中是可代换的。
- 形如 ,而
- 要么 在 中不是自由变量。
- 要么 在 中不出现,而 对 在 中是可代换的。
项于变量的可代换性的概念相应于在代换在项或公式中完成之后保持真实性的概念。严格的说,代换总是允许的,但可代换性将是强制的,以此生成意义不被代换所破坏的公式。
引用
- A. S. Troelstra & H. Schwichtenberg (2000). Basic Proof Theory (Cambridge Tracts in Theoretical Computer Science) (2nd ed.). Cambridge University Press. ISBN 0521779111.
- George Boolos & Richard Jeffrey (1989). Computability and Logic (3rd ed.). Cambridge University Press. ISBN 0521007585.
- Elliott Mendelson (1997). Introduction to Mathematical Logic (4th ed.) Chapman & Hall.
- A. G. Hamilton (1988). Logic for Mathematicians Cambridge University Press.
外部链接
- [http://www.uni-bonn.de/logic/world.html Mathematical Logic around the world]
- [http://home.swipnet.se/~w-33552/logic/home/index.htm Polyvalued logic]
- [http://www.cis.upenn.edu/~giorgi/cl.html Computability logic] 数理逻辑的新方向 - 从真理的理论到可计算性的理论。
参见条目
- 逻辑
- 可计算性逻辑
- 博弈语义学
- 可证明性逻辑
- 可解释性逻辑
- 相继式演算
- 直觉逻辑
- 谓词逻辑
Category:數理邏輯
ja:数理論理学
命题演算在数理逻辑中命题演算或句子演算是一个形式演绎系统,其原子公式是命题变量。(相对于谓词逻辑,它是量化的并且它的原子公式是谓词函数;和模态逻辑,它可以是非真值泛函的。)
演算是用来证明有效的公式(就是说它的定理)和论证(argument)的逻辑系统。它是公理的集合(它可以为空或是可数无限集合)或公理模式(schemata),和推导有效的推理的推导规则。形式文法(或语法)递归定义语言的表达式和合式(well-formed)公式(wff)。此外给出定义真值(truth)和求值(valuation)(或释义(interpretation))的语义。它允许我们确定哪个 wff 是有效的(也就是定理)。
在命题演算中语言由命题变量(或者叫占位符(placeholder))和句子算子(或者叫连结词)。wff 是任何原子公式或在句子操作符之上建造的公式。
在下文中我们描述一种标准命题演算。很多不同的公式系统存在,它们都或多或少等价但在下列方面不同:(1)它们的语言(就是说哪些操作符和变量是语言的一部分); (2) 它们有哪些(如果有的话)公理; (3)采用了哪些推理规则。
文法
语言的构成:
# 字母表的大写字母,表示命题变量。它们是原子公式。惯例上,使用拉丁字母(A, B, C)或希腊字母(χ, φ, ψ),但是不能混合使用。
# 表示连结词(connective)(或逻辑算子)的符号: ¬、∧、∨、→、↔。(我们可以使用更少的算子(和相应的符号),因为一些算子是简写形式 — 例如,P → Q 等价于 ¬ P ∨ Q)。
# 左右圆括号: (,)。
合式公式(wff)的集合右如下规则递归的定义:
# 基础: 字母表的字母(通常是大写的,如A、B、φ、χ 等)是 wff。
# 归纳条款 I: 如果 φ 是 wff,则 ¬ φ 是 wff。
# 归纳条款 II 如果 φ 和 ψ 是 wff,则 (φ ∧ ψ)、(φ ∨ ψ)、(φ → ψ) 和 (φ ↔ ψ) 是 wff。
# 闭包条款: 其他东西都不是 wff。
重复的应用这三个公式允许生成复杂的 wff。例如:
# 通过规则 1,A 是 wff。
# 通过规则 2,¬ A 是 wff。
# 通过规则 1,B 是 wff。
# 通过规则 3,( ¬ A ∨ B ) 是 wff。
演算
为了简单化,我们使用自然演绎系统,它没有公理;或者等价的说,它有空的公理集合。
使用我们的演算的推导将用编号后的行的列表,在每行之上有一个单一的 wff 和一个断定(justification)的形式展示出来。任何前提(premise)都在定部,并带有 "p" 作为它们的断定。结论将在最后一行。推导将被看作完备的,条件是所有行都是通过正确的应用一个规则而从前面的行得出的。
(作为一种对比的方式,参见证明树)。
公理
我们的公理集合是空集。
推理规则
我们的命题演算有十个推理(inference)规则。这些规则允许我们从给定的一组假定为真的公式中推导出其他为真的公式。前八个简单的陈述我们可以从其他 wff 推论出(infer)特定的 wff。但是最后两个规则使用了假言(hypothetical)推理,这意味着在规则的前提中我们可以临时的假定一个(未证明的)假设(hypothesis)作为推导出的公式集合的一部分,来查看我们是否能推导出一个特定的其他公式。因为前八个规则不是这样而通常被描述为非假言规则,而最后两个就叫做假言规则。
; 双重否定除去: 从 wff ¬ ¬ φ,我们可以推出 φ。
; 合取介入: 从任何 wff φ 和任何 wff ψ,我们可以推出 ( φ ∧ ψ )。
; 合取除去: 从任何 wff ( φ ∧ ψ ),我们可以推出 φ 和 ψ。
; 析取介入: 从任何 wff φ,我们可以推出 (φ ∨ ψ) 和 (ψ ∨ φ),这里的 ψ 是任何 wff。
; 析取除去: 从 ( φ ∨ ψ )、( φ → χ ) 和 ( ψ → χ ) 形式的wff,我们可以推出 χ。
; 双条件介入: 从 ( φ → ψ ) 和 ( ψ → φ ) 形式的 wff,我们可以推出 ( φ ↔ ψ )。
; 双条件除去: 从 wff ( φ ↔ ψ ),我们可以推出 ( φ → ψ ) 和 ( ψ → φ )。
; 肯定前件: 从 φ 和 ( φ → ψ ) 形式的 wff,我们可以推出 ψ。
; 条件证明: 如果在假定假设 φ 的时候可以推导出 ψ,我们可以推出 ( φ → ψ )。
; 反证证明: 如果在假定假设 φ 的时候可以推导出 ψ 和 ¬ ψ,我们可以推出 ¬ φ。
证明的例子
下面是(语法上的)证明的一个例子:
要证明:
证明:
解释 为 "假定 A,推导出 A"。读 为 "不假定任何东西,推导出 A 蕴涵 A" ,或者 "A 蕴涵 A 是重言式" ,或者 "A 蕴涵 A 是永真的"。
规则的可靠性和完备性
这组规则的关键特性是它们是可靠的和完备的。非形式的,这意味着规则是正确的并且不再需要其他规则。这些要求可以如下这样正式的提出。
我们定义真值指派为把命题变量映射到真或假的函数。非形式的,这种真值指派可以被理解为对事件的可能状态(或可能性世界)的描述,在这里特定的陈述是真而其他为假。公式的语义因而可以被形式化,通过对它们把那些"事件状态"认定为真的定义。
我们通过如下规则定义这种真值 A 在什么时候满足特定 wff:
- A 满足命题变量 P 当且仅当 A(P) = 真
- A 满足 ¬ φ 当且仅当 A 不满足 φ
- A 满足 (φ ∧ ψ) 当且仅当 A 满足 φ 与 ψ 二者
- A 满足 (φ ∨ ψ) 当且仅当 A 满足 φ 和 ψ 中至少一个
- A 满足 (φ → ψ) 当且仅当没有 A 满足 φ 但不满足 ψ 的事例
- A 满足 (φ ↔ ψ) 当且仅当 A 满足 φ 与 ψ 二者,或则不满足它们中的任何一个
通过这个定义,我们现在可以形式化公式 φ 被特定公式集合 S 蕴涵的意义。非形式的,就是在使给定公式集合 S 成立的所有可能情况下公式 φ 也成立。这导引出了下面的形式化定义: 我们说 wff 的集合 S 语义蕴涵(蕴涵:entail 或 imply)特定的 wff φ,条件是满足在 S 中的公式的所有真值指派也满足 φ。
最后我们定义语法蕴涵,φ 被 S 语法蕴涵,当且仅当我们可以在有限步骤内使用我们提出的上述推理规则推导出它。这允许我们精确的公式化推理规则的可靠性和完备性的意义:
; 可靠性 : 如果 wff 集合 S 语法蕴涵 wff φ,则 S 语义蕴涵 φ
; 完备性 : 如果 wff 集合 S 语义蕴涵 wff φ,则 S 语法蕴涵 φ
对上述规则集合这些都成立。
可靠性证明的梗概
(对于多数逻辑系统,这是相当"简单的"证明方向)
符号约定: 设 "G" 是涉及语句集合的变量。设 "A"、"B" 和 "C" 是涉及句子的变量。我们把 "G 语法蕴涵 A" 写成 "G 证明 A"。我们把 "G 语义蕴涵 A" 写成 "G 蕴涵 A"。
我们要展示: (A)(G)(如果 G 证明 A,则 G 蕴涵 A)
我们注意到 "G 证明 A" 有一个归纳定义,这给予我们直接的办法来证实(demonstrate)"如果 G 证明 A,则 . . ."形式的断言。所以我们的证明是用归纳法进行的。
- I. 基础。展示: 如果 A 是 G 的成员则 G 蕴涵 A
- [II. 基础。展示: 如果 A 是公理,则 G 蕴涵 A
- III. 归纳步骤: (a) 假定对于任意的 G 和 A,如果 G 证明 A 则 G 蕴涵 A。(如果需要的话,对 B、C 等做同样的假定)
::(b) 对于针对 A 的推论的规则的,导出一个新的句子 B 的每个可能的应用,展示 G 蕴涵 B。
(N.B. 对于上述演算基础步骤 II 可以省略,它是自然演绎系统而没有公理。基本上,它涉及展示每个公理都是(语义上)逻辑真理。)
基础步骤证实了对于任何 G 来自 G 的最简单的可证明的语句都被 G 所蕴涵。(这是简单的,因为集合蕴涵它的任何一个成员是语义事实,这是平凡的(trivial))。归纳步骤将有系统的覆盖所有的进一步的可证明的句子--通过考虑我们能够使用推理规则达成逻辑结论的每种情况--并展示如果一个新句子是可证明的,它也是在逻辑上被蕴涵的。(例如,我们可能有一个告诉我们从 "A" 可以推导出 "A 或 B"。在 III.(a) 中我们假定如果 A 是可证明的则是被蕴涵的。我们也知道如果 A 是可证明的,则 "A 或 B" 是可证明的。我们必须展示接着 "A 或 B" 也是被蕴涵的。我们求助于语义定义和我们所做的假定来完成。我们假定了 A 从 G 是可证明出来的。所以它也被 G 所蕴涵。所以使 G 全部为真的任何语义求值也使 A 为真。此外通过"或"的语义定义,使 A 为真的任何求值都使 "A 或 B" 为真。所以使 G 的全部为真的任何求值都使 "A 或 B" 为真。所以 "A 或 B"被蕴涵了。)一般的,归纳步骤将由有一定长度的,却是推论的所有规则的简单的逐个例的分析组成的,它展示每个"保持的"语义蕴涵。
通过可证明性的定义,除了 G 的成员、公理、或从规则得出的句子之外没有是可证明的;所以如果所有这些都是语义上被蕴涵的,则演绎演算是可靠的。
完备性证明的梗概
(这通常是非常困难的证明方向。)
我们接受同上面一样的符号约定。
我们要展示: 如果 G 蕴涵 A,则 G 证明 A。我们通过反证法来进行: 我们转而展示如果 G 不证明 A,则 G 不蕴涵 A。
- I. G 不证明 A。(假定)
- II. 如果 G 不证明 A,则我们可以构造一个(有限的)"最大化的集合" G - ,它是 G 的超集并且不证明 A。
- (a)在这个语言的所有句子上加置一个"次序"。(比如,字母表次序),并把它们编号为 E1, E2, . . .
- (b)归纳的定义集合(G0, G1 . . . )的一个序列(series) Gn 为如下 (i)G0=G。 (ii) 如果 证明 A,则 G(k+1)=Gk。 (iii) 如果 不证明 A,则 G(k+1)=
- (c)定义 G - 为所有 Gn 的并集。(就是说,G - 在任何 Gn 中的所有句子的集合)。
- (d) 可以容易的展示 (i) G - 包含(是其超集) G (通过 (b.i));(ii) G - 不证明 A (因为如果它证明 A 则某些句子被增加到某个 Gn 上而导致它证明了 A; 但是这被定义所排除);和 (iii) G - 是(关于 A) "最大化的集合": 如果任何更多的句子不管怎样的被增加到 G - ,它就会证明 A。(因为如果有可能增加任何更多的句子,再次根据定义,在构造 Gn 期间被遇到的时候它们就应当已经被增加进去了。)
- III. 如果 G - 是(关于 A)的最大化集合,则它是"类真理的"。这意味着它包含句子 "A",只在它不包含非-A 的句子的条件下; 如果它包含 "A" 并且包含 "如果 A 则 B",则它也包含 "B";以此类推。
- IV. 如果 G - 是类真理的,则有这个语言的 "G - -规范"求值: 它使在 G - 中每个句子为真而在 G - 之外的所有句子为假,而仍然遵守在这个语言的语义合成(composition)的法则。
- V. G - -规范求值将使我们最初的集合 G 全部为真,而使 A 为假。
- VI. 如果有在其上 G 是真而 A 是假的求值,则 G 不(语义上)蕴涵 A。
Q.E.D.
可供选择的演算
有可能定义其他版本的命题演算,它通过公理的方式定义了多数逻辑算子的语法,并且它只使用一个推理规则。
公理
设 φ、χ 和 ψ 表示合式公式。(wff 自身将不包含任何希腊字母,而只包含大写罗马字母、连结算子和圆括号)。公理有
- THEN-1: φ → (χ → φ)
- THEN-2: (φ → (χ → ψ)) → ((φ → χ) → (φ → ψ))
- AND-1: φ ∧ χ → φ
- AND-2: φ ∧ χ → χ
- AND-3: φ → (χ → (φ ∧ χ))
- OR-1: φ → φ ∨ χ
- OR-2: χ → φ ∨ χ
- OR-3: (φ → ψ) → ((χ → ψ) → (φ ∨ χ → ψ))
- NOT-1: (φ → χ) → ((φ → ¬ χ) → ¬ φ)
- NOT-2: φ → (¬ φ → χ)
- NOT-3: φ ∨ ¬ φ
公理 THEN-2 可以被看作是"关于蕴涵的蕴涵的分配特性"。公理 AND-1 和 AND-2 对应于"合取除去"。在 AND-1 和 AND-2 之间的关系反映了合取算子的交换性。公理 AND-3 对应于"合取介入"。公理 OR-1 和 OR-2 对应于"析取介入"。在 OR-1 和 OR-2 之间的关系反映了析取算子的交换性。公理 NOT-1 对应于"反证法"。公理 NOT-2 说明了"从矛盾中可以推导出任何东西"。公理 NOT-3 叫做"排中律" (拉丁语 tertium non datur: "排除第三者")并反映了命题公式的语义求值: 公式可以有的真值要么是真要么是假。至少在经典逻辑中,没有第三个真值。直觉逻辑不接受公理 NOT-3。
推理规则
推理规则是肯定前件:
- .
如果还使用双箭头的等价算子的话,则要增加如下"自然"推理规则:
- IFF-1:
- IFF-2:
元推理规则
设示范被表示为相继式,假设在十字转门(turnstile)的左侧而结论在十字转门的右侧。则演绎定理可以被陈述如下:
: 如果相继式
::
: 已经被证实了,则也有可能证实相继式
::。
这个演绎定理(DT)自身没有公式化为命题演算: 它不命题演算的定理,而是关于命题演算的一个定理。在这个意义上,它是元定理,相当于关于命题演算可靠性和完备性的定理。
在另一方面,DT 对与简化语法上的证明过程是如此的有用以至于它看作和用做推理规则,同肯定前件一起使用。在这个意义上,DT 对应于自然条件证明推理规则,它是在本文中提出的第一个版本的命题演算的一部分。
DT 的逆定理也是有效的:
: 如果相继式
::
: 已经被证实了,则也有可能正式相继式
::
实际上,DT 的逆定理的有效性相对于 DT 而言是平凡的:
: 如果
::
: 则
:: 1:
:: 2:
: 并且可以演绎自 (1) 和 (2)
:: 3:
: 通过肯定前件的方式,Q.E.D.
DT 的拟命题有着强有力的蕴涵: 它可以用来把公理转换成推理规则。例如,公理 AND-1,
:
可以通过演绎定理的逆定理的方式被转换成推理规则
:
这是合取除去,是(在本文中)第一个版本的命题演算中使用的十个推理规则中的一个。
证明的例子
下面是(语法上)证明的一个例子,只涉及到公理 THEN-1 和 THEN-2:
要证明: A → A (蕴涵的自反性)。
证明:
:1. (A → ((A → A) → A)) → ((A → (A → A)) → (A → A))
::公理 THEN-2 通过 φ = A, χ = A → A, ψ = A
:2. A → ((A → A) → A)
::公理 THEN-1 通过 φ = A, χ = A → A
:3. (A → (A → A)) → (A → A)
::得自 (1) 和 (2) 通过肯定前件。
:4. A → (A → A)
::公理 THEN-1 通过 φ = A, χ = A
:5. A → A
::得自 (3) 和 (4) 通过肯定前件。
其他逻辑演算
命题演算大概是在所有当前使用的逻辑演算中最简单的一种。(亚里士多德的"三段论"演算,在现代逻辑中在很大程度上被替代了,它与命题逻辑相比在某些方面更简单--但在其他方面更加复杂)。它可以按很多方式来扩展。
最直接的方式是开发一个更加复杂的逻辑演算,介入对所用于的句子的更精细的细节敏感的规则。在命题逻辑中的"原子句子"被分解成项、变量、谓词和量词的时候,它们就生成了一阶逻辑,或者叫做一阶谓词逻辑,它保持命题逻辑的所有规则并增加了一些新规则。(例如,从"所有的狗都是动物"我们可以推出"如果 Rover 是狗,则 Rover 是动物")。
通过一阶逻辑的工具,有可能公式化一些理论,要么带有显式的公理要么通过推理规则,而把它们自身当作逻辑演算。算术是其中最周知的理论;其他的还包括集合论和 mereology。
模态逻辑也提供了一种推理的变体,它不能在命题演算中捕获。例如,从"必然性的 p" 我们可以推出 p。从 p 我们可以推出 "可能性的 p"。
多值逻辑是允许句子有除了真和假之外的值的逻辑。(例如,都不和都是是标准的"额外值";"连续统逻辑"允许每个句子有任何的在真和假之间的表示"真实程度"的有限的数值)。这些逻辑经常要求与命题逻辑非常不同的运算设备。
参见
- 布尔代数主题列表
- 哥德尔、埃舍尔、巴赫
- 布尔逻辑
- 弗雷格的命题演算
外部链接
- [http://www.iep.utm.edu/p/prop-log.htm Article on Propositional logic] at the Internet Encyclopedia of Philosophy
- [http://www.ltn.lv/~podnieks/mlog/ml2.htm Introduction to Mathematical Logic]
Category:离散数学
Category:数理逻辑
th:แคลคูลัสเชิงประพจน์
相干逻辑相干逻辑,也叫做相关逻辑,是一类非经典亚结构逻辑,它在蕴含上施加了特定限制。(一般但不完全的,澳大利亚逻辑学家称之为 relevant logic,其他说英语的逻辑学家称之为 relevance logic)。
相干逻辑致力于捕获在经典真值泛函逻辑中被"实质蕴含"算子所忽略的蕴含方面。这个想法不是新的: 它导致 C. I. Lewis 发明模态逻辑,特别是严格蕴含,依据是在经典逻辑中谬误蕴涵任何命题是成立的。因此 "如果我是教皇,则 2+2=5" 是真的。但是很明显即使你是教皇,2+2 也不能是 5(参见反事实)。所以蕴涵关系应该是必然性的。
甚至在除去了实质蕴涵悖论之后还有另一个问题。Anderson 和 Belnap (见后)枚举了一些"严格蕴涵悖论": 例如,矛盾仍蕴涵任何事物,甚至蕴涵重言式(tautology)。反直觉的是蕴涵 - 在我们使用这个术语的时候 - 需要在前提和结论之间有某种在主旨上的联系。
在相干逻辑中的本质新颖是以有效的论证的前提必须有关于结论。在命题演算中,这包括了要求前提和结论共享原子公理;和特定的真值泛函规则,比如增加律(对于任何 q 的从 p 到 p 或 q 的推论)是受限的,这样"无关"信息不能带入。在谓词演算中,相关性要求在前提和结论之间共享变量和常量。
标准的证明论(比如 Fitch 式的自然演绎)适合提供相关性,通过在每行推导的末端介入指示"相关"的前提。Gentzen 式的演算可以为此做修改,通过除去允许在相继式右手端的介入任意公式的弱化规则。
相干蕴涵的基本想法出现在中世纪逻辑中,Ackermann 在 1950 年代做了一些先驱工作。在他的工作之上,Nuel Belnap 和 Alan Ross Anderson(和其他人)在1970年代写了这个主题的代表作: "Entailment: The Logic of Relevance and Necessity"。
相干逻辑的显著特征是它们是次协调逻辑: 矛盾的存在不会导致逻辑爆炸。
引用
- A. R. Anderson and N. D. Belnap, 1975. Entailment:the logic of relevance and necessity, vol. I. Princeton University Press.
- A. R. Anderson, N. D. Belnap and J. M. Dunn, 1992. Entailment: the logic of relevance and necessity, vol. II, Princeton University Press.
外部链接
- [http://plato.stanford.edu/entries/logic-relevance/ Relevance logic] at the Stanford Encyclopaedia of Philosophy.
Category:逻辑
字符串字符串或串(String)是由零个或多个字符组成的有限序列。一般记为 s='a1a2•••an'(n>=0)。它是编程语言中表示文本的数据类型。
通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。
编程语言中的表示法
一种常用的表示法是使用一个字符代码的数组,每个字符占用一个字节(如在ASCII代码中)或两个字节(如在unicode中)。它的长度可以使用一个结束符(一般是NUL,ASCII代码是0,在C编程语言中使用这种方法)。或者在前面加入一个整数值来表示它的长度(在Pascal语言中使用这种方法)。
这是一个用NUL结束的字符串的例子,它用10个byte存储,用ASCII表示法:
| F | R | A | N | K | | k | f | f | w |
| 46 | 52 | 41 | 4E | 4B | 00 | 6B | 66 | 66 | 77 |
上面的字符串的长度为5个字符,但注意它占用6个字节。结束符后的字符没有任何意义。
这是相同的Pascal字符串:
| | F | R | A | N | K | k | f | f | w |
| 05 | 46 | 52 | 41 | 4E | 4B | 6B | 66 | 66 | 77 |
当然,可能还有其它的表示法。使用树和列表可以使得一些字符串操作(如插入和删除)更高效。
定长顺序存储表示
存储结构
/ - 串的定长顺序存储表示 - /
#define MAX_STR_LEN 40 / - 用户可在255(1个字节)以内定义最大串长 - /
typedef char SString[MAX_STR_LEN+1]; / - 0号单元存放串的长度 - /
基本操作
/ - 串采用定长顺序存储结构的基本操作(13个) - /
/ - SString是数组,故不需引用类型 - /
#define DestroyString ClearString / - DestroyString()与ClearString()作用相同 - /
Status StrAssign(SString T,char - chars)
void StrCopy(SString T,SString S)
Status StrEmpty(SString S)
int StrCompare(SString S,SString T)
int StrLength(SString S)
void ClearString(SString S)
Status Concat(SString T,SString S1,SString S2) / - 算法4.2改 - /
Status SubString(SString Sub,SString S,int pos,int len)
int Index(SString S,SString T,int pos)
Status StrInsert(SString S,int pos,SString T)
Status StrDelete(SString S,int pos,int len)
Status Replace(SString S,SString T,SString V) / - 此函数与串的存储结构无关 - /
void StrPrint(SString T)
堆分配存储表示
存储结构
/ - 串的堆分配存储 - /
typedef struct
HString;
基本操作
/ - 串采用堆分配存储结构的基本操作(14个) - /
#define DestroyString ClearString / - DestroyString()与ClearString()作用相同 - /
void StrAssign(HString - T,char - chars)
void StrCopy(HString - T,HString S)
Status StrEmpty(HString S)
int StrCompare(HString S,HString T)
int StrLength(HString S)
void ClearString(HString - S)
void Concat(HString - T,HString S1,HString S2)
Status SubString(HString - Sub, HString S,int pos,int len)
void InitString(HString - T)
int Index(HString S,HString T,int pos) / - 算法4.1 - /
Status StrInsert(HString - S,int pos,HString T) / - 算法4.4 - /
Status StrDelete(HString - S,int pos,int len)
Status Replace(HString - S,HString T,HString V) / - 此函数与串的存储结构无关 - /
void StrPrint(HString T)
块链存储表示
存储结构
/ - 串的块链存储表示 - /
#define CHUNK_SIZE 4 / - 可由用户定义的块大小 - /
typedef struct Chunk
Chunk;
typedef struct
LString;
基本操作
/ - 串采用块链存储结构的基本操作(15个) - /
#define DestroyString ClearString / - DestroyString()与ClearString()作用相同 - /
void InitString(LString - T)
Status StrAssign(LString - T,char - chars)
Status ToChars(LString T,char - - chars)
Status StrCopy(LString - T,LString S)
Status StrEmpty(LString S)
int StrCompare(LString S,LString T)
int StrLength(LString S)
void ClearString(LString - S)
Status Concat(LString - T,LString S1,LString S2)
Status SubString(LString - Sub, LString S,int pos,int len)
int Index(LString S,LString T,int pos)
Status StrInsert(LString - S, int pos,LString T)
Status StrDelete(LString - S,int pos,int len)
Status Replace(LString - S,LString T,LString V) / - 此函数与串的存储结构无关 - /
void StrPrint(LString T)
字符串实用程序
一些编程语言设计为编写字符串处理程序更容易编写。这是一些例子:
- awk
- Icon
- perl
- MUMPS
- sed
- SNOBOL
很多UNIX实用程序进行简单的字符串处理,并能用于简单地编写一些强大的字符串处理算法。文件和有限流可以像字符串一样查看。
一些新的编程语言,包括Perl、Python和Ruby,借助正则表达式来帮助文字处理。
字符串操作
A simple operation on strings is concatenation: this means simply that one writes a first string S, then a second string T next to it, to get ST.
Other common operations include searching a substring in a longer string, sorting a list of strings and parsing a string. Because there are so many practical uses for strings there are many associated algorithms with various tradeoffs.
Advanced string algorithms often employ complex mechanisms and data structures, among them suffix trees and finite state machines.
算法 Strings in theoretical computer science
In theoretical computer science, one starts with a non-empty finite set called the alphabet; strings are then defined as finite sequences of elements from the alphabet, including the empty sequence. The set of all strings over a given alphabet, together with string concatentation, then forms a monoid, in fact a free monoid. Formal languages, the central objects of study, are defined as subsets of this monoid.
参见
- 正则表达式
category:程序设计语言
category:電腦術語
category:数据结构
相干逻辑相干逻辑,也叫做相关逻辑,是一类非经典亚结构逻辑,它在蕴含上施加了特定限制。(一般但不完全的,澳大利亚逻辑学家称之为 relevant logic,其他说英语的逻辑学家称之为 relevance logic)。
相干逻辑致力于捕获在经典真值泛函逻辑中被"实质蕴含"算子所忽略的蕴含方面。这个想法不是新的: 它导致 C. I. Lewis 发明模态逻辑,特别是严格蕴含,依据是在经典逻辑中谬误蕴涵任何命题是成立的。因此 "如果我是教皇,则 2+2=5" 是真的。但是很明显即使你是教皇,2+2 也不能是 5(参见反事实)。所以蕴涵关系应该是必然性的。
甚至在除去了实质蕴涵悖论之后还有另一个问题。Anderson 和 Belnap (见后)枚举了一些"严格蕴涵悖论": 例如,矛盾仍蕴涵任何事物,甚至蕴涵重言式(tautology)。反直觉的是蕴涵 - 在我们使用这个术语的时候 - 需要在前提和结论之间有某种在主旨上的联系。
在相干逻辑中的本质新颖是以有效的论证的前提必须有关于结论。在命题演算中,这包括了要求前提和结论共享原子公理;和特定的真值泛函规则,比如增加律(对于任何 q 的从 p 到 p 或 q 的推论)是受限的,这样"无关"信息不能带入。在谓词演算中,相关性要求在前提和结论之间共享变量和常量。
标准的证明论(比如 Fitch 式的自然演绎)适合提供相关性,通过在每行推导的末端介入指示"相关"的前提。Gentzen 式的演算可以为此做修改,通过除去允许在相继式右手端的介入任意公式的弱化规则。
相干蕴涵的基本想法出现在中世纪逻辑中,Ackermann 在 1950 年代做了一些先驱工作。在他的工作之上,Nuel Belnap 和 Alan Ross Anderson(和其他人)在1970年代写了这个主题的代表作: "Entailment: The Logic of Relevance and Necessity"。
相干逻辑的显著特征是它们是次协调逻辑: 矛盾的存在不会导致逻辑爆炸。
引用
- A. R. Anderson and N. D. Belnap, 1975. Entailment:the logic of relevance and necessity, vol. I. Princeton University Press.
- A. R. Anderson, N. D. Belnap and J. M. Dunn, 1992. Entailment: the logic of relevance and necessity, vol. II, Princeton University Press.
外部链接
- [http://plato.stanford.edu/entries/logic-relevance/ Relevance logic] at the Stanford Encyclopaedia of Philosophy.
Category:逻辑
IntaglioIntaglio may refer to:
- Intaglio (printmaking), a printmaking technique with an incised image
- Intaglio (burial mound), a similar effect in burial mounds
Intaglio may also be:
- Intaglio, the annual international business school meet of the Indian Institute of Management, Calcutta
- Intaglio, a vector-based drawing program for Mac OS X, published by Purgatory Design
aminokwasy tablice Varsovia hotel narty sowacja Aloes
|