> For the complete documentation index, see [llms.txt](https://sudoku.kazusa.tech/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sudoku.kazusa.tech/rank-theory/12-jye-fish/01-virtual-set.md).

# 虚拟区域

Virtual Set

在学习内容之前，我们有必要介绍新的定义类型：**虚拟区域**（Virtual Set）。

一个虚拟区域指的是，通过其他技巧结构推算可得的一组候选数，即使他们从位置关系上没有任何关系，但仍具有强弱区域类似的规则。

## 虚拟强区域 <a href="#virtual-truth" id="virtual-truth"></a>

### 引例 <a href="#example-to-virtual-truth" id="example-to-virtual-truth"></a>

<figure><img src="https://3269563042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBwg2o9WwhosLFTuqyR3w%2Fuploads%2F1G0nojsO5R1pjlNrQfEN%2Fimage.png?alt=media&amp;token=02ba1bf4-c156-4bc4-82fe-e0abe0d0879f" alt="" width="375"><figcaption><p>虚拟强区域</p></figcaption></figure>

如图所示。这是一个基础的伪数组结构，不过我们换了个画法——用秩的视角。

我们再次使用秩理论的视角去看它。我们可以看到的是，数字 6、7、8、9 四个数字在四个单元格里出现，只有数字 6 会有跨区出现的可能。换言之，6 是唯一一个可以出现两次的数，而 7、8、9 最多只能出现一次。

按照秩理论的话，6 有两个弱区域构成，7、8、9 各有一个弱区域构成；而结构四个单元格构成四个强区域，所以是一个 5 个弱区域、4 个强区域的特殊结构，而此时 `r13c6(6)` 是作为弱三元组存在。

从秩的角度上理解，因为有 5 个弱区域和 4 个强区域，而有弱三元组存在，所以我们需要分析占位状态。之前说过，我们可以利用之前强行将这个结果当成秩的思维去理解它：虽然我们知道 5 和 4 不能直接相减，但我们可以从数值上证明出矛盾。由于弱三元组同时消失（都不占位）后，所有候选数均为精确覆盖的同时，强区域一个没少。所以弱区域数量会少 2 个单位，但强区域数量不变。于是，1 的结果会变为 -1，且这个 -1 代表的是精确覆盖情况下的弱减去强的结果，所以这个数就是余下的结构的秩，而 -1 又暗示了这个余下结构造成矛盾。

这说明什么？这说明两个弱三元组不能同时都不占位。这是我们通过秩去理解的结果。不过，就只有这个结论吗？不是的。

### 强区域定义推广 <a href="#generalized-definition-to-truth" id="generalized-definition-to-truth"></a>

之前的强区域我们知道一点的是，由于强区域要么是一个单元格，要么是一整个行列宫，所以这些被选择出来的候选数之间显然是无法同真的。换言之，按照弱区域的互补定义的话，弱区域是最多只能填一次，那么强区域理应被定义为“最少填一次”。可问题是，强区域天生的结构长相就无法允许它填两次及以上，所以只能规定成填入恰好一次，故这是两者定义上不对称的地方。

但是，请你仔细看上面的结构。如果我们把这 4 个 6 强行算成强区域呢？它里面能一个 6 都不填吗？这显然是不能的，因为前面我们说过了，四个 6 里都不填暗含了“弱三元组 `r13c6(6)` 不占位”这个情况，而这个情况一定造成矛盾，所以四个 6 也就不可能都不填。所以，这四个 6 看成一起的话，那么它至少填 1 次 6、最多填两次 6。

从这个角度来看，它似乎符合强区域的定义，即使强区域天生定义不和弱区域对称。那么我们现在就让定义推广成对称的样子：

* **当任意一组候选数里，至少存在一个数为真，则这一组候选数构成一个强区域。**
* **当任意一组候选数里，最多存在一个数为真，则这一组候选数构成一个弱区域。**

这个定义很关键，这甚至派生出了一个新的秩理论的理解视角。这便是下一篇内容里要介绍的内容。不过现在我要继续把内容说完。先继续看这里。

我们把这里四个候选数 `{r134c6, r3c5}(6)` 也称为一个强区域，一个推广了定义之后才有的强区域。我们也称这个新构造出来的强区域为**虚拟强区域**（Virtual Truth）。

> 需要注意的是，当如果遇到虚拟强区域时，由于定义变为“至少一次”而非“只能一次”，因此在可能造成多次填数时的时候需要小心计算总可填次数（可能并非定值）。不过，之后的若干例子考虑到教程的学习难度，暂时还都不会涉及复杂的次数计算，所以暂时不用太担心。但是，还请留意此点。

## 虚拟弱区域 <a href="#virtual-link" id="virtual-link"></a>

### 引例 <a href="#example-to-virtual-link" id="example-to-virtual-link"></a>

<figure><img src="https://3269563042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBwg2o9WwhosLFTuqyR3w%2Fuploads%2FsH3ROe5wBrz2RtwdsYvc%2Fimage.png?alt=media&amp;token=10029ecb-d5eb-4ead-bca8-17418c51f711" alt="" width="375"><figcaption><p>虚拟弱区域</p></figcaption></figure>

如图所示。这还是一个伪数组，不过长得不太一样。这不重要。

我们仔细观察两处没有任何强弱区域连接的孤立候选数 `r2c8(5)` 和 `r6c5(5)`。如果这两个候选数同时为真会如何？由于目前 `r24c7` 和 `r6c89` 四个单元格只有 4、5、8、9 四种不同的数字，而且除了 5 以外都还只能出现最多一次，所以 5 非常关键：它也必须最少出现一次。

那么从这个视角来说的话，外部的 `r2c8(5)` 和 `r6c5(5)` 就无法同真了。因为同真之后，他们会直接排除掉伪数组里的全部 5 的可填位置，这使得结构直接少一个数字，显然 4、8、9 是放不满四个单元格的（毕竟刚刚我们就知道了，这三个数最多都只能填一个）。所以，这肯定会造成矛盾。

因此，这两个 5 不同真。那么既然它俩不同真，那么我们可以把它俩视为一个整体，和前面虚拟强区域一样。不过，这次我们发现，这两个 5 是不同真，也就是不能同时填两次，那也就是最多一次。这符合弱区域的定义，因此我们将这两个候选数 `{r2c8, r6c5}(5)` 看成一个**虚拟弱区域**（Virtual Link）。

好了。这就是我想说的。下一篇内容我们就来学习如何使用好虚拟区域。
