Skip to main content

一个实现各种 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 文档可以按如下方式生成和打开:

  1. 打开命令行。
  2. 导航到 «docs» 目录。
  3. 运行命令make html

打开文件即可读取<project_path>/docs/build/html/index.html

链接

资源
我怎么知道要使用什么逻辑系统? 去做
文档 去做

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

mvl-0.2.0.tar.gz (13.1 kB 查看哈希)

已上传 source

内置分布

mvl-0.2.0-py3-none-any.whl (14.9 kB 查看哈希

已上传 py3