# 牺牲的基本推理

## 先来看一个例子 <a href="#a-weird-example" id="a-weird-example"></a>

<figure><img src="https://3269563042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBwg2o9WwhosLFTuqyR3w%2Fuploads%2FroE4oFFF3iWkhNds0RXS%2Fimage.png?alt=media&#x26;token=bf0ba26f-f799-4a66-a26f-14a05ad0f206" alt="" width="375"><figcaption><p>牺牲例子，毛刺为假的环</p></figcaption></figure>

如图所示。我们发现，如果我们忽略 `r1c2(5)` 的话，此时会有这样一个连续环的结构。

这个结构看起来没什么问题。假设要用于删数呢？删数肯定是所有弱链上都可以删，我们可以找到比如 `r2c58(5)`、`r9c3(5)`、`r9c7(3)` 这些位置可以作为删数。前一节末尾我们把它称为预备删数，因为它没有实际的删数效果，仅仅是当这个连续环成立时才可以用于删数。

那么我们来看毛刺为真的情况。很遗憾的是，此时我们没办法找到毛刺为真而绽放的视角，即毛刺为真时推得某预备删数为真的状态。这可有些棘手了。我们不想放弃它，毕竟这个环看起来确实不错。

那么怎么办呢？没关系，我们还是继续我们的强制链分支的搜索。

<figure><img src="https://3269563042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBwg2o9WwhosLFTuqyR3w%2Fuploads%2FXSP4PSHlW17QN1zx9C5t%2Fimage.png?alt=media&#x26;token=a38d5326-3992-44df-8c41-08dcc0976886" alt="" width="375"><figcaption><p>牺牲例子，毛刺为真的分支</p></figcaption></figure>

如图所示。请将此图和上面的图进行对比理解。对比什么呢？删数位置。

前面那个图里，我们知道，毛刺连续环的预备删数包含 `r2c58(5)` 两处；而对于这个图里，一个是作为实际删数（的涂色），一个则作为的是……等会儿？`c8` 强链关系是什么情况？怎么绕过了 `r2c8(5)`？

是的，当毛刺为真时，我们可以忽略一部分预备删数。具体忽略哪一部分呢？**请将所有毛刺连续环里可用的预备删数均列举出来。我们需要瞄准其中一个位置，将其锁定作为实际的删数（因为毛刺为假时本身就可以删，所以我们这里只讨论毛刺为真时是否可以删它即可）；而其他不作为删数的预备删数，我们均可视为不存在**。这句话非常奇怪。我们稍后讲解这句话运作的本质原理。你先这么用就行。

我们忽略掉 `r2c8(5)` 后，`c8` 就会有强链关系，于是把剩下的 5 直接串起来形成强链关系即可。这样我们可以跟随这个强制链分支，直接得到 `r2c7(5)` 为真的结论。

因为 `r2c7(5)` 为真，所以此时可以排除掉 `r2c5(5)` 这个候选数。而它本身就是预备删数（换言之，是毛刺连续环在毛刺为假时本身就可以删除的数），所以综合来看，这个数均可删除，所以，我们可以认为，这个删数结论是成立的。故本题的结论是 `r2c5 <> 5`。

奇妙吧？我们将毛刺无法得到绽放效果时，将预备删数分为两组，一组作为实际删数（瞄准他们去删数），另一组直接忽略它的存在（跳过他们）、直接延伸强链关系的行为称为**牺牲**（Sacrifice），这种观察视角就被称为牺牲视角。

## 为什么牺牲是正确的逻辑？ <a href="#why-sacrifice-is-correct-logic" id="why-sacrifice-is-correct-logic"></a>

我知道你肯定理解不了它。这是这个思路理解起来最为困难的一点。我们仅去记结论也可以帮助我们找到很多可用结论；但是，我还是想跟各位讲解一下它的原理。不过，要想证明正确性，确实是一件困难的事情。我不强求各位能够真正理解这个的原理，因为它实在是过于复杂。但是，它可以给你带来非常有趣的证明思路。

### 逻辑学的蕴含式 <a href="#entailment-in-logic" id="entailment-in-logic"></a>

有一门学科叫逻辑学。在逻辑学这门学科里，我们会接触到诸如且、或、非的处理规则，将两个命题的真假性结合起来的推理过程，整合起来判别它整体的结果的真假性的东西。简要概括的话，这门学科是专门研究逻辑的真假性的。

在这门学科里，我们把推出的行为称为**蕴含**（Entailment，或 Logical Consequence），记作 $$P \to Q$$，其中的 $$P$$ 和 $$Q$$ 是两个命题（可用来判断对错的说辞）。

蕴含式也是可以判断真假性的。这一点非常诡异。它其实和我们日常生活中“如果……则……”的说辞非常像，但你非要说这句话到底是对还是错，确实不太好理解。不过你可以这么去想。我们期望这句话成立，自然就不能把“则……”的这一部分给反过来。

简单举个例子。如果我考到驾照了，我就带朋友去兜风。从客观层面来说，“考到驾照”是一个事情，“带朋友兜风”又是另外一个事情。看起来这两件事本身没有什么关系，所以我们可以穷举出四种组合情况，即对于这两个事情本身的既定发生还是没有发生排列出来四种情况：

* **都成立：考到驾照、带朋友兜风**；（成立）
* 前面成立：考到驾照，不带朋友兜风；（显然违背了初衷）
* **后面成立：没考到驾照，带朋友兜风**；（不知道）
* **都不成立：没考到驾照，也不带朋友兜风**。（不知道）

显然，考到驾照必须带朋友兜风是这句话满足的条件，而没有考到驾照的话，带不带朋友兜风就成了问题。因为句子之中并未说到没考到驾照会如何去做这个事情（语句只说了考到了之后该干嘛）。虽然看起来，没有驾照似乎就不能去兜风了，毕竟自己开不了车，但是去兜风我也没说能不能出去（不考驾照也可以出去兜风，请个代驾就行，带朋友兜风是我作为发起人，但不代表我非得以司机这个身份带朋友兜风），毕竟它是另一个平行世界里才会发生的事情，具体是否发生我们并不知晓。

在蕴含式里，我们把前半截为真、后半截为假的部分作为肯定不成立的情况（考到驾照，但是不去兜风）；而其他三种均认为是最终成立的，所以相当于是三种情况“或”起来。拿逻辑学的表达的话，假设 $$P$$ 表示考到驾照（前半截），而 $$Q$$ 表示去兜风（后半截），那么写起来就是这样的：

$$
P \to Q \equiv (P \land Q) \lor (\lnot P \land Q) \lor (\lnot P \land \lnot Q)
$$

逻辑学使用 $$\equiv$$ 来表示等价，而不是等号。但是你可以当成等号去理解。符号 $$\land$$ 表示“且”，$$\lor$$ 表示“或”，而 $$\lnot$$ 则表示“非”（也就是对原来的说辞的对错取个反）。

这个式子是可以化简的，但是我们这里并不需要化简，因为我们并不是用这个公式来参与一些复杂运算来证明牺牲的正确性。推算过程可参考 [Broken link](https://sudoku.kazusa.tech/construction/06-sacrifice/broken-reference "mention") 的过程。

### 两层蕴含式 <a href="#higher-ordered-entailment" id="higher-ordered-entailment"></a>

需要理解牺牲，我们需要将蕴含式的逻辑升一级，变为两层的蕴含式。

我们要证明的是，**如果某预备删数** $$a$$ **为假（命题** $$A$$**）能得到另外的预备删数** $$b$$ **为假（命题** $$B$$**），则预备删数** $$b$$ **一定为假（命题** $$C$$**）**。这里请注意，这句话是在说毛刺为真的这个情况。毛刺为假时我们并不需要讨论，因为它本质就是一个连续环了，所以它的删数显而易见是成立的，为了确保删数可以最终成立，我们仅需要保证毛刺为真时也可以删除就行。

那么，这句话用蕴含式表达出来是这样的：

$$
(A \to B) \to C
$$

这个确实有些绕。我们要得到命题 $$C$$ 必须成立，就得要求前提 $$A \to B$$ 这一截整体的真假性是为真的（这个蕴含式必须是符合条件的状态）。

我们穷举一下四种关于命题 $$A$$ 和 $$B$$ 可以出现的情况：

* **都成立：预备删数** $$a$$ **为假、预备删数** $$b$$ **为假；**
* 前面成立：预备删数 $$a$$ 为假、预备删数 $$b$$ 为真；
* **后面成立：预备删数** $$a$$ **为真、预备删数** $$b$$ **为假；**
* **都不成立：预备删数** $$a$$ **为真、预备删数** $$b$$ **为真。**

刚才我们说到，蕴含式有三种可能成立的状态，即加粗的这三组。但是最后一种虽然在蕴含式里可以成立，但实际上并不可能。为什么呢？

还记得前一节内容的伏笔吗？预备删数互相是不可同为真的。也就是说，两个都是预备删数的情况下，根本就不可能出现第四种（都不成立的这种）情况。所以还剩下俩。

但是仔细观察一下。剩下的这两种情况，预备删数 $$b$$ 始终是为假的。也就是说，我们要满足 $$A \to B$$ 的一共有两种情况（第 1、3 种），而此时预备删数 $$b$$ 客观为假的缘故，所以完全可以得到 $$C$$ 结论成立，而根本就无需担心预备删数 $$a$$ 此时此刻的状态是真还是假。

哪一个是 $$a$$ 呢？`r2c8(5)` 这个节点。所以，它的真假性并不影响最终结论的形成。或者倒过来说的话，结论如果能形成，那么这个节点是真还是假都无所谓。这便是为什么我们可以跳过它的本质原因：因为它为假和为真都能删，所以完全可以忽略它的存在。

### 补充说明 <a href="#other-information-about-this-provement" id="other-information-about-this-provement"></a>

我相信你如果看完这一点，假设你看明白了，可能你还会存在一些别的问题。比如说，这个题里，`r2c8(5)` 和 `r2c5(5)` 不是在同一行么，犯得着这么证明吗？

并不是说这个证明仅仅是针对于这一个题的。之后我们会看到一些题目，牺牲视角会越来越复杂，并不是所有时候，预备删数互相都可以看得见。所以证明是通用的。

总之，这个证明使得我们可以忽略预备删数的存在。当我们发现一个预备删数可能会有结论时，我们不妨瞄准它，把其他的全部忽略（或者忽略必要的一些），然后形成一些特殊强链关系，最终往结论上靠，这是牺牲视角的核心用法。
