Skip to content

交替推理链

数独题目其实是一种逻辑推理题目,我们需要根据数独规则和盘面上给出的已知数,通过逻辑推理得到未填格中的数字是什么。

命题

“命题”是逻辑学中的一个重要概念,表示一个可以用“真”、“假”(或“是”、“否”)来回应的陈述。在数独中,“某单元格填某数”就是最简单的一种命题。另外还有诸如“某几个单元格里会出现某数字”这样的命题。

1236123469128914824892682892459124591291452792725625692569258926823523592452352356235697934479245672346736136783736724562682458258242356235615257125723572345234512781582578124578234775863374179618814529719384996

例如对于上面的盘面,“单元格R1C1填数字1”(或简写为“R1C11”)就是一个命题,虽然我们尚不知道它是“真”还是“假”,但我们未来一定可以用“真”或“假”来回应这个命题。

当我们观察第一列C1后,可以发现数字1C1中只能出现在R1C1中,根据数独规则——每个数字都要在每个区域(行、列、宫)中恰好出现一次,我们可以确定这个命题可以用“真”来回应,或这说这是一个“真命题”。

对应地,“R1C15”也是一个命题,但根据数独规则——每个数字都要在每个区域中恰好出现一次,以及一个事实——数字5已经在R1中出现过一次了(R1C9),我们可以确定5不可以填入R1C1,所以这个命题可以用“假”来回应,或者说这是一个“假命题”。

已知数和答案数是恒为真的命题。例如上述盘面中R1C2中的7,是题目给定的,所以“R1C27”在当前盘面的上下文中恒为真。而前面提到,通过推理我们可以得到“R1C11”是“真”,所以可以将1填入R1C1使其成为答案数,自此之后,“R1C11”也就成了一个永远是“真”的命题了。

候选数是待判断真假的命题。如果一个候选数(即“某单元格填某数”这个命题)被判定为假,则应该被删除(即从对应单元格中删掉对应候选数)。同理,如果一个候选数被判定为真,则可以将该候选数提升为答案数(即在对应单元格中填写对应数字)。

如果两个命题可以互相影响彼此的结果,那么则称两个命题之间存在“关系”。

仍以前一节的盘面为例,这次我们只关注候选数4。注意这两个命题:“R1C34”和“R1C54”——虽然在这里我们不能直观地知道哪个命题为真,但根据数独规则我们可以得到这样一个结论:如果“R1C34”是“真”,则“R1C54”是“假”,因为一行中只能出现一个4。反之亦然,如果“R1C54”是“真”,则“R1C34”是“假”。

1236123469128914824892682892459124591291452792725625692569258926823523592452352356235697934479245672346736136783736724562682458258242356235615257125723572345234512781582578124578234775863374179618814529719384996

所以,命题“R1C34”和“R1C54”之间存在“关系”。

这种前提为真可以推导出结论为假的关系也被成为“弱关系”。也可以说,在弱关系中,两个命题必有一假;或两个命题不可同时为真。

因为数独的规则,弱关系在数独中是普遍存在的。例如数独规则要求同一区域(行、列、宫)中,一个数字d只能出现一次,所以位于同一区域中的单元格如果存在相同的候选数d,则它们之间彼此都存在弱关系。上述盘面中虽然没有明确标出,但我们依然可以很容易地观察到,“R1C34”和“R2C34”之间存在弱关系,因为第3列中只能出现一个4,所以如果“R1C34”为真,则“R2C34”为假。

又如数独规则要求每个单元格都恰好填入一个数字,所以位于同一个未填单元格中的任何两个候选数之间都存在弱关系(不考虑候选数少于两个的情况——如果没有暂时符合规则的候选数,说明当前盘面已经被破坏,要么是题目不合理,要么是截止目前的答案数中有错误;如果只有一个候选数,那么这就是一个单数技巧,应该将候选数提升为答案数)。上述盘面中,以单元格R1C5为例,其中有148三个候选数,则它们彼此之间都存在弱关系。以候选数14为例,对应的命题是“R1C51”和“R1C54”,如果“R1C51”为真,根据数独规则R1C5就不能再填4了,所以“R1C54”为假。

注意上述的“关系”或称“弱关系”,都是从一个命题A为真出发,推断出另一个命题B为假;即使所谓“反之亦然”,也是说从命题B为真出发,也可以推断出命题A为假。但是如果一个命题为假,我们不能轻易得到另一个命题为真的结论。

但数独规则里的“恰好出现一次”,除了意味着“最多出现一次”,还意味着“至少出现一次”——于是我们就能发现一些更有用的关系。仍以前面的盘面为例,在第5宫中我们可以找到这样一对命题:“R5C54”和“R5C64”。它们之间本来只是一个弱关系,但因为第5宫中的候选数4只能出现在R5C5R5C6中,而数独规则要求一宫中每个数字都恰好出现一次——即4必须出现一次,所以我们可以得到一个新的结论:如果“R5C54”为假,则“R5C64”为真;或者反之,如果“R5C64”为假,则“R5C54”为真。

1236123469128914824892682892459124591291452792725625692569258926823523592452352356235697934479245672346736136783736724562682458258242356235615257125723572345234512781582578124578234775863374179618814529719384996

又如上述盘面中未明确标出的单元格R5C4,其中只有两个候选数79,因为数独规则要求每个单元格都恰好填入一个数字,所以我们也可以得到这样的结论:如果“R5C47”为假,则“R5C49”为真。

这种前提为假可以推导出结论为真的关系称作“强关系”。也可以说,在强关系中,两个命题必有一真;或两个命题不可同时为假。

值得注意的是,强关系本质上也是一种弱关系,因为它也满足弱关系的要求(即某命题为真可以推导出另一命题为假)。所以在之后讨论解题技巧时,凡是需要弱关系的地方,如果存在强关系,也可以把强关系当做弱关系来使用。

在讨论链技巧时,我们可以用图示来表示命题之间的关系,这时也会用“节点”来指代命题。在图示中,命题/节点用实心小圆点表示,它们之间的关系用两点之间的线段表示,虚线表示弱关系,实线表示强关系。

关系的图示

强关系和弱关系的一个重要作用就是帮助删除候选数,用于简化盘面。

当存在一个强关系时,如果某个命题X同时和强关系中的两个命题形成弱关系,就可以确定命题X为假。

关系的图示

如上图所示,命题AB之间存在强关系,而命题XAB同时形成两个弱关系,则X必为假。如果X是形如“某单元格填某数”的命题,则可以将该候选数删除。

根据强关系的定义,AB中必有一真(虽然尚无法确定哪个为真)。又根据弱关系的定义,A(或B)为真时,X为假。所以无论AB哪个为真,都可以确定X为假,所以结论就是命题X为假。

以之前的盘面为例:

1236123469128914824892682892459124591291452792725625692569258926823523592452352356235697934479245672346736136783736724562682458258242356235615257125723572345234512781582578124578234775863374179618814529719384996

之前我们观察到,“R5C54”和“R5C64”构成了一个强关系,现在我们继续观察可以发现,“R5C74”和前面两个命题同时构成了弱关系,因此“R5C74”必然为假,于是我们就可以删除R5C7中的候选数4了。

这个特例其实恰好是交叉区锁定技巧。根据该技巧,其实我们还可以确定R5C9中的4也可以删掉——这正是另外一组强弱关系删数。其实很多候选数删除技巧的背后,或多或少都是强弱关系的逻辑,只不过它们通常形成更直观的“结构”或“形状”,使得识别和删数更方便,所以被总结成了各种技巧,而不是直接运用强弱关系。

双值格和共轭对

从上面的删数逻辑可以看出来,强关系是整个逻辑的核心,弱关系只是辅助。只有强关系才能得出某两个命题必有一真的结论,进而通过弱关系得到某命题必然为假。

那么如何找到强关系呢?因为数独规则中存在“恰好一个”的说法,这种书法除了暗示了“最多一个”、“不能有重复”之外,还暗示了“至少一个”、“不能没有”,那么当某个限定条件只能被恰好两个命题满足时,我们就得到了强关系——这两个命题必有一真,不然不符合“至少一个”的要求。

那么从单元格和区域(行、列、宫)的角度出发,我们就能得到两种最直观的强关系——“双值格”和“共轭对”。

1236123469128914824892682892459124591291452792725625692569258926823523592452352356235697934479245672346736136783736724562682458258242356235615257125723572345234512781582578124578234775863374179618814529719384996

“双值格”指的是只有两个候选数的未填单元格。例如上面盘面中的R5C5,其中只有两个候选数3和4,所以“R5C5填3”和“R5C5填4”就是一个强关系,根据数独规则,它们二者必有一真。

“共轭对”指的是针对相同的某一个候选数d,它在某区域(某行、某列或某宫)中恰好只出现了两次。例如上面盘面中的候选数5,在第7行中它只出现了两次,分别在R7C3和R7C7中,所以“R7C3填5”和“R7C7填5”就是一个强关系,根据数独规则,它们二者必有一真。

组合节点

命题除了“某单元格填某数”这种简单形式,还可以组合起来使用,比如“某几个单元格里填某数”。

595695689689185956795678915695691815989586936936915691592569235693569368968569569692585836256356259592567256735636363569356956742313426234728475174341827147914847812

例如,在上面盘面中第5宫里的候选数6,直观看来它们之间只存在若干弱关系,对于通过推理进行候选数删除并没有太大帮助。但如果我们对它进行一些分组,就能得到一种强关系。通过观察我们可以发现,这一宫的候选数6集中出现在了第5行和第5列中,这样我们可以将它们分为两组——一组是位于同一行的R5C4R5C5R5C6,另一组是位于同一列的R4C5R6C5。这样我们可以得到两个有关系的命题:

  • 命题A:在单元格R5C4R5C5R5C6中的某一个里填6
  • 命题B:在单元格R4C5R6C5中的某一个填6

不难发现,根据数独规则,第5宫必须出现恰好一个6,所以命题AB之间至少有一个是真——它们之间是强关系!

这里的命题AB,其实是由多个命题组合而成的,以命题A为例,它其实是三个简单命题的“析取”:(R5C46)(R5C56)(R5C66)。当在链中使用节点提到这种命题时,称之为“组合节点”。

交替推理链

前面我们看到了强弱关系删除候选数的能力,但之前提到的示例中只有一个强关系参与,而且看上去除了解释交叉区锁定技巧外似乎用途并不是很大。

但是当我们能找到一个由强弱关系交替出现形成的“链”时,有趣的现象就出现了。

四节点交替链

上图表示存在四个命题ABCD,其中ABCD之间是强关系,BC之间是弱关系。根据强关系和弱关系的定义,如果A为假,B必然为真,这就导致C为假,进而导致D为真;如果从D开始,若D为假,则可以推导出A为真。进而按照强关系的定义,我们发现AD之间也是一个强关系!

进而我们可以按照强弱交替的规律继续向链中添加节点(命题),只要确保链的开头和结尾都是强关系,就可以确保链头和链尾两个节点之间也满足强关系的定义。

n节点交替链

这可以通过简单的数学归纳法进行证明——

  1. 链的前两个节点是强关系。
  2. 向1中其中加入一组弱、强关系后,会得到四个节点链,根据前面的分析,这四个节点的头尾节点形成强关系。
  3. 去掉2中的中间结点,只保留头尾两个节点,形成类似1中的强关系。
  4. 重复2,继续加入弱、强关系。

这样往复下去,可以得知只要强弱关系交替连接,并且链头两个节点之间和链尾两个节点之间都是强关系,就可以确定链头和链尾的节点之间是强关系。按照这种规律形成的链叫做“交替推理链”。如果能找到某命题X可以和链头链尾两个命题同时形成两个弱关系,就可以断定X为假——这通常意味着我们可以删掉一些候选数,简化盘面。

根据链的不同模式、长度,我们可以得到很丰富的数独解题技巧:

  • 同数双强链:只涉及单一候选数,利用两个共轭对,形成“强-弱-强”形式的链。
  • :两端是双值格形式的强关系,形成“强-弱-强-弱-强”形式的链。