2个不稳定版本
| 0.2.0 | 2021年11月5日 |
|---|---|
| 0.1.0 | 2021年10月31日 |
#1605 in 数学
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