
Prolog 的语法很奇怪,需要一些时间来适应,所以我花了点时间,想用Prolot来学习和验证离散逻辑的16组等价公式。
1. 双重否定律 (Double Negation Law)
A ⇔¬¬A
首先,我们来看看双重否定律。在 Prolog 中,我们可以这样验证它:
fun1(A,Z):-
member(A,[false,true]),
(((Z1 = not(A),Z2=not(Z1)) , equal(A,Z2)) ->Z=true;Z=false),
format('A = ~w , Z = ~w~n',[A,Z]),fail.
这个函数检查一个值和它的双重否定是否相等。是不是感觉就像在镜子里看镜子?
2. 幂等律 (Idempotent Laws)
A ⇔ A∨A
A ⇔ A∧A
接下来是幂等律,这听起来像是一种超级能力,但实际上它很简单:
fun2_1(A,Z):-
member(A,[false,true]),
(((Z1=(A;A)),equal(A,Z1))->Z=true;Z=false),
format('A = ~w , Z = ~w~n',[A,Z]),fail.
fun2_2(A,Z):-
member(A,[false,true]),
(((Z1=(A,A)),equal(A,Z1))->Z=true;Z=false),
format('A = ~w , Z = ~w~n',[A,Z]),fail.
就像说“给我再多的杨幂,不如只给我一个杨幂就够了"。
3. 交换律 (Commutative Laws)
A∨B ⇔ B∨A
A∧B ⇔ B∧A
交换律告诉我们,顺序不重要,就像在决定先穿袜子还是裤子一样:
fun3_1(A,B,Z):-
member(A,[false,true]),
member(B,[false,true]),
((Z1=(A;B),Z2=(B;A),equal(Z1,Z2))->Z=true;Z=false),
format('A = ~w , B = ~w, Z = ~w~n',[A,B,Z]),fail.
fun3_2(

文章介绍了如何使用Prolog语言验证逻辑学中的16组等价公式,包括双重否定律、幂等律、交换律等,通过编写函数展示逻辑定律在编程中的应用。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



