一个实现各种 n 值逻辑系统的包。
项目描述
MVL(多值逻辑)
MVL(多值逻辑)是一个灵活、富有表现力和可扩展的 python 包,它可以很容易地使用许多值逻辑系统:使用超过 2 个或无限真值的逻辑系统,超出 «True» 和 «False»。
| 最新发布的 | 0.2.0 |
目录
问题陈述
默认情况下,python 不为 «True» 和 «False» 以外的值提供任何布尔基础结构。这使得处理涉及许多有价值逻辑的情况变得冗长、困难或不可能。
例子
为了演示这个限制,我们将使用一个逻辑示例。考虑以下句子:
The apple is red.
我们有一个有点红黄色的苹果,或者在中间的某个地方。所以这个问题的答案是一个非常三心二意的“也许?”。
现在考虑这个句子:
The apple is red, and the apple is not red.
在 2 值逻辑中,这总是错误的。但是我们的苹果可能是红色的,但也可能不是红色的。
3 值逻辑可以解决此类问题,其中我们的真值范围介于真假之间。说我们对第一个问题的回答就是maybe那么我们对第二个问题的回答就可以了maybe and maybe。所以我们对第二个问题的最终答案是maybe。
在现实生活中,SQL 使用 3 值逻辑来实现其逻辑。MVL 提供了一种在 python 中实现这些检查的简单方法。
MVL 是做什么的?
MVL 提供了实现 3、n 或 ∞ 值逻辑的类和函数,这些逻辑可以在代码库中导入和使用。它提供浮点数和逻辑值之间的转换以允许不同程度的真实性,提供默认运算符库,并允许实现可用于分析任意值的逻辑语句的自定义运算符。
示例用法
回到我们的苹果示例,要对可能被按下的键进行逻辑处理,我们需要的不仅仅是“true”和“false”值来处理这个问题——我们需要 3 个值的逻辑。
为第二句编写逻辑条件如下所示:
if (priest.bool_(
priest.or_(is_red(apple), priest.not_(is_red(apple)))
)):
do something
让我们分解一下。
首先,想象一下在is_red(apple)其他地方定义的某个函数,它返回 3 个逻辑值之一,告诉我们是否apple为红色。
我们将使用牧师逻辑,这意味着我们使用 3 个布尔值,当我们将其转换为 python 的 2 值布尔系统时,任何不是“假”的东西都会评估为“真”。我们使用的 3 个值是(«priest.f» 表示«false»;«priest.u» 表示«unknown»;«priest.t» 表示«true»)。
if(...)是一个正常的pythonif语句。这需要一个正常的 2 值 python 布尔值才能工作。我们会回到这个。
priest.bool_(...)将我们的 3 值逻辑值转换为 2 值 python 布尔值。具体如何定义取决于我们选择使用的逻辑系统。我们使用了牧师逻辑,所以«priest.u»和«priest.t»将评估为python的内置«True»,而«priest.f»将评估为python的内置«False»。
这个功能在幕后还有更多。本示例不需要它,但如果您有兴趣,可以在文档中阅读它。
该示例的其余部分是由键状态(按下或未按下)与我们希望它们成为的牧师逻辑值之间的比较组成的逻辑语句。这将为我们提供一个介于 0 和 1 之间的浮点数的结果。
将结果传递priest.bool_给python布尔值,将其传递给if语句以决定是否输出大写字母。
在哪里得到它
源代码托管在 github 上,网址为https://github.com/andrewjunyoung/mvl。
PyPI(点)
要通过 pip 安装 mvl,请打开命令行界面并运行
$ pip install mvl
特征
概括
- 可以使用 3、n 或无限逻辑值的逻辑系统。
- 丰富的逻辑运算符库,用于 3、n 和 ∞ 值逻辑。
- 浮点数和逻辑值之间的转换。
支持的逻辑系统
MVL 支持以下 3 种有价值的逻辑系统:
- 博赫瓦尔
- 克莱恩
- 牧师
MVL 支持以下 n 值逻辑系统:
- 乌卡谢维奇
- 哥德尔(以«goedel»名义)
- 产品逻辑
- 发布逻辑
计划在未来支持以下系统:
- 贝尔纳普的 4 值逻辑
使用示例
使用 MVL 旨在尽可能地与现有的 python 基础设施集成。下面给出了 kleene 和 lukasiewicz 逻辑的示例用法。
导入和使用3个有价值的系统
>>> from mvl import kleene
>>> kleene.t
LukasiewiczLogicValue.True
>>> kleene.and_(k.t, k.u)
0.5
>>> kleene.or_(k.u, k.u)
0.5
>>> kleene.implies(k.u, k.u)
0.5
>>> kleene.implies(k.f, k.u)
1.0
创建 n 值逻辑系统
>>> from mvl.lukasiewicz import *
>>> ls = LogicSystem(5, LukasiewiczLogicValue)
>>> ls.values
[LukasiewiczLogicValue(0.0), LukasiewiczLogicValue(0.25), LukasiewiczLogicValue(0.5), LukasiewiczLogicValue(0.75), LukasiewiczLogicValue(1.0)]
>>> t = ls.values[4]
>>> bool(t)
True
>>> bool(ls.values[3])
False
创建任意逻辑值
>>> from mvl.lukasiewicz import *
>>> x = LukasiewiczLogicValue(0.123)
>>> x
LukasiewiczLogicValue(0.123)
>>> bool(x)
False
>>> s_and(x, 1)
0.123
执照
无牌。
文档
sphinx 文档可以按如下方式生成和打开:
- 打开命令行。
- 导航到 «docs» 目录。
- 运行命令
make html
打开文件即可读取<project_path>/docs/build/html/index.html。
链接
| 资源 | |
|---|---|
| 我怎么知道要使用什么逻辑系统? | 去做 |
| 文档 | 去做 |
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。