2个不稳定版本

0.2.0 2021年11月5日
0.1.0 2021年10月31日

#1605 in 数学

MIT/Apache

61KB
1K SLoC

最后一阶逻辑

一种实验性的逻辑语言。

基于论文最后一阶逻辑

=== Last Order Logic 0.2 ===
Type `help` for more information.
> a := 1 ~= 0
a := 1 ~= 0
LOL: Added `a` to definitions
> a ~ 0
a ~ 0
> ty
1

要从您的终端运行LOL,请输入

cargo install --example lolz last_order_logic

然后,要运行

lolz

如何学习LOL

要学习如何使用LOL,请在LOLZ中输入"help"。此命令列出所有主题,例如"help path"。

示例

动机

一阶逻辑中,量词表达式的真值取决于评估。这意味着自动定理证明器必须对表达式进行标注以真值,以便在修改源代码时高效地运行。语言的使用者无法直接访问这些信息。

最后一阶逻辑弥合了可用性和自动定理证明之间的差距。

  • 提高可读性和改进通信
  • 有效重用真值
  • 可扩展到高阶真值

例如

∀ x { ... } - 很难看出这是 true 还是 false

换句话说,一阶逻辑在计算上不是进步的。

最后一阶逻辑通过让量词表达式评估为自身,而真值编码在类型中,来解决此问题。

∀ x : I { ... } : un(1) - 很容易看出这是 true

类型用于传达程序的意图。最后一阶逻辑使用此功能来提高可读性。

un(..) 语法表示“统一”,其中 un(1) 表示 ,而 un(0) 表示 。相应地,nu(..) 表示“非统一”,其中 nu(1) 表示 ,而 nu(0) 表示

另一个原因是表达路径上的真值,例如 un(0 ~= 1)。这些都是高维真值,不能用一阶逻辑表达。

统一与非统一真值的区别源于Avatar Extensions理论。只有非统一真值才有有意义的示例来显示其真值。

文件格式

  • 常规文本格式 (.lol.txt)
  • Markdown文本格式 (.lol.md)

Markdown格式是为了提高可读性设计的

  • 必须以 # (Markdown标题) 开头
  • 代码块必须使用 3 个反引号和 lol

LOLZ环境中的特殊命令不受支持。要引用LOLZ的使用,请使用 3 个反引号和 text

依赖关系

~250KB