问题标签 [three-valued-logic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
688 浏览

sql - 为什么`NOT(NULL=NULL)` 是假的?

(NULL = NULL)的。美好的。记住“NULL被定义为不等于任何东西”。

(NULL = NULL)的。呃……好吧,很公平。记住“NULL 代表一个未定义的值,所以你永远不知道它是否等于其他值”。

NOT(NULL = NULL)的。等等,什么!?

说真的,这怎么可能有效?“NOT()”运算符的行为如何取决于正在评估的表达式的详细信息!?所有的 SQL 系统都这样做吗?


演示查询:

0 投票
0 回答
214 浏览

logical-operators - 模态三值逻辑中的逻辑运算(XOR、IMP EQV)

据我了解,模态量词可能会放宽逻辑合的行为:

我的问题是:它对其他操作(如独占析取蕴涵等价)有什么具体影响吗?这些例子怎么样(我自己想不通):

0 投票
1 回答
65 浏览

sql - SQL的三值逻辑的实现

在任何 SQL 实现中是否有一个模块可以检查 3 值逻辑中公式的可满足性/有效性?如果是这样,是否有开源的?我的目的是评估此类模块(如果存在)在检查 3 值逻辑中公式的可满足性/有效性的特定任务上的性能,而不是用于一般查询计算。

0 投票
2 回答
128 浏览

sql - NOT IN 不会产生与 NOT EXISTS 相同的结果

这些是相当基本的陈述。我有一个链接到另一个表中的项目的图形列表。我想检查有多少图形没有使用,理论上可以删除。

所以首先我使用了 NOT IN 子句:

结果为零,这对我来说似乎很奇怪。将其重写为 NOT EXISTS 后,我得到了大约 600 个结果:

所以我想我真的没有问题,因为第二个语句有效,但据我了解,第一个语句不应该给出相同的结果吗?

0 投票
4 回答
658 浏览

java - 比较三个变量并返回具有最小值/最大值的变量(不是值)

我有 3 个长值变量timestamp1 timestamp2 timestamp3和一个 arraylist timestampList。我想在 if/else 中比较它们。这三个时间戳可能具有不同的值,因此我想将具有最小值的值添加到列表中。我还应该提到,这些时间戳每 2 分钟出现一次。

当三个变量相同时,我可以简单地做

现在在 else 中,如果我想检查三个时间戳并获取具有最小值的变量,而不是值本身。因为我需要在代码中进一步使用其他变量的变量。当然,我也想将最小值添加到列表中。我可以想象,我可以在 else 中做更多的 if/else 分支

但这太过分了,肯定有更好的方法。

0 投票
1 回答
59 浏览

sql - 谁能告诉我为什么我的 case 语句返回 null(good)

我有一个带有 case 语句的查询 return null(good),但是当对每个 case 使用 where 语句时,输出中有记录。

一个 | 乙 | 系统日期 | 结果

空 | 空| 19 年 7 月 10 日 |好

空 | 空| 19 年 7 月 10 日 |好

空 | 空| 19 年 7 月 10 日 |好

空 | 空| 19 年 7 月 10 日 |好

当我执行这个查询(或其他两个)时,我有输出

输出(在哪里查询):

一个 | 乙 | 系统日期

15 年 4 月 10 日| 06-APR-15| 19 年 7 月 10 日|

06-APR-15| 06-APR-15| 19 年 7 月 10 日|

02-APR-15| 01-APR-15| 19 年 7 月 10 日|

0 投票
1 回答
7225 浏览

scala - Spark Scala:检查字符串是否不为空或为空

首先,由于三值逻辑,这不仅仅是对空或空检查的任何有效实现的否定。

我想做一个函数isNotNullish,它尽可能接近 isNotNull 但也过滤掉空字符串。我遇到了一些奇怪的问题,涉及列/列类型的工作方式以及三值逻辑。到目前为止,我拥有的最好的是:

如果这看起来很奇怪,那是因为它是。据我所知,如果该行包含 null 或(一些!)非字符串类型,questionable === lit("")将返回给定行。null在三值逻辑中,在某些我希望它返回的情况下true && null = null,这会导致questionable.isNotNull && (questionable =!= lit("")返回。代码永远不应产生空值,始终为真或假。nulltruequestionable.isNotNull && (!oddish || oddish.isNull)

这几乎不是很有效:出于某种我不明白的原因,=== 比较很高兴为数字类型返回 null,但对于复杂类型则失败。(即使我试图做的事情是不可能或不可取的,我也希望对此作出解释。)

检查架构并简单地对字符串类型进行与其他类型不同的测试可能更负责,但据我所知,这需要将数据帧作为参数传递。我试图避免这种情况,特别是对于所述参数可能是匿名的长序列转换。

(在有人问之前,我知道以这种草率的方式处理 null 和类型在一般 scala 中会很糟糕,但我认为它在 Spark/SQL/不同模式的巨大数据帧的上下文中是不同的。具体情况是自动探索粗略数据,因此能够回答诸如“我不知道这些列是什么,但告诉我它们保持实际值的频率”之类的问题很有用。)

0 投票
1 回答
62 浏览

z3 - 带有 Z3 求解器的三值布尔逻辑

我一直在尝试使用 Z3 SMT Solver 定义一个三值命题逻辑和推理。更准确地说,我用三个值定义了一个排序布尔值:TRUE、FALSE 和 NULL,并带有一些断言。

接下来,假设我>=在此逻辑下定义整数运算符的语义,假设整数可以为 NULL。

最后,通过上述定义,我>=_B在断言中使用了该函数,但不断收到意外的 UNSAT 或未知。我想知道是什么让这个理论落入了不可判定的领域。是因为我做了布尔排序吗?还是因为我在 Int 的无限集上量化的断言?