# 强三元组的基本推理

## 强三元组 <a href="#truth-triplet" id="truth-triplet"></a>

<figure><img src="/files/JGbFMhluBQJ46nHEAVIa" alt="" width="375"><figcaption><p>强三元组</p></figcaption></figure>

如图所示。我们可以看到，本题一共有三个强区域和三个弱区域，但看起来有些奇怪。

我们发现，`r6c4(5)` 这个位置非常特殊，它处于两个强区域和一个弱区域的交点上。这一次不同于前面的所有例子是，它既在强区域上也在弱区域上，而且还不是正常的覆盖模式。

我们思考一下它会出现什么特殊的情况。假设 `r6c4(5)` 为真，则整个结构只能填两个数，一个在 `r6c4`，而另外一个在 `r3c26` 的其中一个位置上。似乎这两个位置的填充就足以让三个强区域得以全部覆盖，并不需要真正意义上填入三个数。

那么如果为假呢？如果 `r6c4(5)` 为假，就说明我们把这个特殊情况给排除掉了，剩下的位置均是被一个强区域和一个弱区域所覆盖的标准模式。那么想都不用想，它剩下的部分一定是正常的填 3 个数进去。

可以看出，当有了 `r6c4(5)` 的存在，整个结构实际填入的数字的总次数就会变为不定的数值。它可能是只填两次，也可能填三次，这将直接导致我们秩的结果不定。我们把某个候选数同时处于两个强区域和一个弱区域的特殊现象称为**强三元组**或**强三角区**（Truth Triplet）。强三元组这个概念一般也经常用于指代这个特殊占位的候选数 `r6c4(5)`。

## 强三元组的用法 <a href="#usage-on-truth-triplet" id="usage-on-truth-triplet"></a>

### 用真假讨论理解 <a href="#via-proof-of-cases" id="via-proof-of-cases"></a>

我们知道它的定义了，下面我们来看看它究竟怎么发挥作用。

我们还是回到刚才的题目里。

<figure><img src="/files/JGbFMhluBQJ46nHEAVIa" alt="" width="375"><figcaption><p>强三元组，还是刚才那个结构</p></figcaption></figure>

如图所示。可以看到，就只是单纯这个结构就已经可以存在删数。这是怎么得到的呢？我们来试着把刚才的分析过程严谨化一些。

讨论 `r6c4(5)` 的真假性。如果它为真，则我们会直接引发删数，因为 `r6c4` 恰好在 `c4` 删数这一列上；而如果它为假，则由于我们要保证三个强区域都有所覆盖，而现在弱区域还有三个仍未发生变动，所以结构剩下的情况是零秩的。所以，每个弱区域按理说都可以用于删数，所以这也包含 `c4`。

> 当然，这个题比较简单，如果你继续往下试数的话，你会发现，因为 `5r6` 和 `5b5` 是两个强区域，但只有两处摆放位置。我们都假设 `r6c4` 不填 5 了，那么理所应当地会直接使得 `r6c2` 和 `r5c6` 同时填 5。这样一来，会得到 `r3c4` 是唯一可以填在 `5r3` 这个强区域的位置。而 `r3c4` 此时刚好也在 `c4` 上，所以 `c4` 也可以用于删数。

总之，不论 `r6c4(5)` 的真假性，都可以得到删数合理成立，所以 `c4` 的别处都不能填 5。这便是强三元组的实际引发的效果。

### 用秩理解 <a href="#via-rank-theory" id="via-rank-theory"></a>

可能你看得懂我想说什么，但是看起来这个推演似乎不足以有一个通用的解题逻辑。换言之，它看起来好像只是这个结构的巧合。似乎不够通用。

下面我们就带着大家使用秩理论理解强三元组的魔法。

首先，整个结构是有 3 个强区域和 3 个弱区域的。我们先无需关心这个结构的秩是多少，因为它的实际填充次数并不知晓，因为并不存在一个稳定的大小（它可以填两个也可以填三个）。

我们这次反过来想。假设我们让删数成立，会出现什么情况。假设删数任意位置为真，那么都会使得这个结构 `5c4` 这个弱区域消失（这里想说的“消失”的实际含义是，在填了数字之后这个弱区域都没办法标到图里了）。但是，强区域数量并未发生变化，还是 3 个，只是说 3 个强区域要分配填数的所有可能位置里，刚好处于 `c4` 上的部分是无法填了。这恰好把我们最棘手的强三元组给干掉了。

但是，剩余结构对吗？不对。因为剩下 3 个强区域，却只有 2 个弱区域覆盖了。因为我们此时已经把强三元组给干掉了，所以题目影响填充次数变动的唯一可能都被我们干掉了，这样的话，秩的公式就能发挥它的作用了。代入秩的公式这么算下来，子结构的秩就成为了负数（2 - 3 = -1）。负数的秩说明这必然是矛盾的。所以，删数为真这个状态不成立，故要删除他们。

秩的计算公式确实有这么个毛病，就是当在强三元组存在时，计算就会失效——因为我们无法判断结构最终填入多少数字，也就是说数字的数量都是不定的一个数，于是我们无法精确记录其被减数，自然就不能得到一个合适的结果。

但是这似乎并不是很重要。我们在分析三元组的时候，是考虑将其占位与否的状态进行排列得来的。虽说我们也会存在很多无法通过占位并且一步完成结论得到的情况（这种例子往往过于复杂，所以我们只会在之后的内容里才能继续“畅谈”他们），但是目前我们接触的例子都还比较简单，所以这样大大方方去理解就行。

### 总结 <a href="#conclusion" id="conclusion"></a>

当结构存在强三元组时，我们不妨通过占位的方式去说明结构最终填充的形态是否可以引发删数，删数的原因如何。

* **当强三元组占位**：它会同时满足两个强区域的规则，所以强区域数减去 2，弱区域数随结构变化配合进行减少（一般是两个强区域和一个弱区域这么覆盖，所以一般是弱区域数减去 1）。
  * 因为秩的计算是弱区域数减去强区域数，所以弱区域数（被减数）只减少 1，没有强区域数（减数）会减少 2 多，因此秩会**轻微变小**。
  * 大多数时候我们会利用轻微变小这一点得到一些结论，但实际上结构并不总是长成这样（比如它可能会被多个强区域或者多个弱区域覆盖之类的），此时确实需要灵活处理；但这种考虑一般都更难，所以需要递归分析，这一点会在之后再说。
* **当强三元组不占位**：结构的其余部分退为标准的覆盖规则（全部候选数都是刚好被一个强区域和一个弱区域覆盖），于是讨论秩的计算算法可以得到结构的秩。
* **综合考虑**
  * **删数理解层面**：先假设删数为真，它此时多半会造成强三元组占位状态消失，于是退为普通结构，代入秩计算公式验证此时子结构的秩为负数得到矛盾；
  * **推广**：因为强三元组占位可导致秩会轻微变小，所以我们一般这类结构总是强弱区域数量均等，并带有一个强三元组。这样可以套用删数推矛盾的规则，即当强三元组占位时会造成强区域数未变，弱区域数少 1，因此秩变为负数。

## 一个例子 <a href="#an-example" id="an-example"></a>

下面我们来看一个实际的例子。

<figure><img src="/files/roJwDdDcBBgd74B2w2B1" alt="" width="375"><figcaption><p>一个例子</p></figcaption></figure>

如图所示。这个例子有 4 个强区域和 4 个弱区域。很显然，`r4c5(1)` 是强三元组。按照讨论的方式，假设它为真（占位），则直接引发删数；如果它为假，则余下的结构将不存在任何的强三元组，进而退化为标准结构（所有候选数均只被一个强区域和一个弱区域覆盖）。强区域和弱区域数量都未发生变动，因为你还可以填在其他位置上，按理说还需要进一步讨论。但是很明显，因为这个例子比较特殊，强三元组就这一处，去掉后结构就成普通结构了，于是强弱区域仍旧是相等的，故此时结构的秩为 0，直接按零秩结构删数即可。

按两种情况讨论可以发现，不论哪一种，`1r4` 都是可以删数的弱区域，所以这个题的结论是 `r4c8 <> 1`。

下一节我们将带着大家看一些例子，讨论强三元组的使用。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://sudoku.kazusa.tech/rank-theory/03-triplet/01-reasoning-of-truth-triplet.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
