python学数学1-6:认识数字--自然数减法

现在我们看看,怎样利用皮亚诺公理建立自然数的减法运算体系,以及它的python实现。

减法的规则:

  • ①任何数N减去0仍是自己(N-0 => N)
  • ②0减去任何非0的数,都产生错误
  • ③如果有了N - pre(M)的结果,我们定义N - M的结果为pre(N - pre(M))

python的代码来实现如下(自然数减法nSub)。

def nSub(a1, a2):
    if isZero(a2):
        return a1
    elif isZero(a1):
        raise TypeError
    else:
        return nPre(nSub(a1, nPre(a2)))        

这次我们使用的描述方法与实现方法是完全一致的。


加法、减法、乘法,都有保序性,即如果a和b有某种大小关系,并且c是一个不为0的自然数。
那么经过加法、减法、乘法后,即a+c, b+c;a*c, b*c;a-c, b-c(这时必须有 a, b均大于等于c),关系不变。

我们一起进行测试。

def test_sub():
    z = zero()
    one = nNext(z)
    two = nNext(one)
    three = nNext(two)
    four = nNext(three)
    five = nNext(four)
    # 一般减法运算
    assert nEq(nSub(five, two), three)
    # 自相减为0
    assert nEq(nSub(three, three), z)
    # 减0不变
    assert nEq(nSub(four, z), four)
    # 加法的逆运算
    assert nEq(nAdd(nSub(nGetNum('■■■■■■■■■'), five), five), nGetNum('■■■■■■■■■'))
    # 减数超过被减数报错
    with pytest.raises(TypeError):
        assert nEq(nSub(three, four), one)
    # 加法的保序性
    assert nLt(nAdd(nGetNum('■■■■■■■■'), two),nAdd(nGetNum('■■■■■■■■■'), two))
    # 减法的保序性
    assert nLt(nSub(nGetNum('■■■■■■■■'), three),nSub(nGetNum('■■■■■■■■■'), three))
    # 乘法的保序性
    assert nLt(nMul(nGetNum('■■■■■■■■'), four),nMul(nGetNum('■■■■■■■■■'), four))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

圣手书生肖让

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值