如果“如果p,那么q”,那么“如果非p,那么非q”

DeathKing posted @ 2011年5月14日 20:52 in Geek with tags geek logic ruby 逻辑 , 7255 阅读

  脑波突袭来了,你的头脑还是清醒的么?好吧,标题给出了一个复合命题,你认为其真值如何?或者说,找不找得到\[p\]\[q\]的一个真值指派,使得下面的矢列是有效的?

\[p,q \models \left( {p \to q} \right) \to \left( {\neg p \to \neg q} \right)\]

  事实上,这个矢列是可满足的,根据下面提供的蕴涵真值表和非真值表,我们可以让计算机强行搜索出现原子命题个数大小的真值表。蕴涵是二元连词,非是一元连词,因此,语句\[\left( {p \to q} \right) \to \left( {\neg p \to \neg q} \right)\]的真值表将有 4 种情况,我们的计算机完全能胜任。

蕴涵的真值表
\[p\] \[q\] \[p \to q\]
\[T\] \[T\] \[T\]
\[F\] \[T\] \[T\]
\[T\] \[F\] \[F\]
\[F\] \[F\] \[T\]

 

非的真值表
\[p\] \[\neg p\]
\[T\] \[F\]
\[F\] \[T\]


当然,为了躲懒,我编写了一个Ruby脚本:

def imp(a,b)
	return !a || b
end

def neg(a)
	return !a
end

[true,false].each do |p|
	[true,false].each do |q|
		puts "p is: #{p}, while q is: #{q};" if imp(imp(p,q),imp(neg(p),neg(q)))
	end
end

我得到了下面的结果:

D:\CodeSample\rb\logic>ruby search.rb
p is: true, while q is: true;
p is: true, while q is: false;
p is: false, while q is: false;

结果好于预期,也就是除了\[p\]\[F\]\[q\]\[T\],其他的情况都是可满足的。

Avatar_small
λ 说:
2011年7月12日 22:56

-_-b 好吧,要是改成像计算器那样通用就最好了


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter