# 学习 Prolog 和 离散逻辑的16个等价公式:一趟有趣的逻辑之旅

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

在这里插入图片描述
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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值