【问题标题】:What is the loop invariance/invariant that can describe this code's functionality?可以描述此代码功能的循环不变性/不变量是什么?
【发布时间】:2021-04-02 08:32:23
【问题描述】:
def func(no_1,no_2):
    a=no_1
    b=no_2
    while(b):
        a,b=b,a%b
    return a

其中 no_1 和 no_2 是正实数

我发现这个函数返回 no_1 和 no_2 的最大公因数。首先,我尝试了 (no_1%a 和 no_2%a) ≥ 0 的循环不变性,使得 a、no_1 和 no_2 是正整数,但在终止时,我只能证明 no_1%a = 0 = no_2%a,即根本没有描述功能。那么谁能告诉我这个函数有什么可能的循环不变性来描述它的功能?

【问题讨论】:

    标签: python loops loop-invariant


    【解决方案1】:

    下面我假设no_1no_2 都是一些自然数。

    我认为您可以尝试引入一个额外的符号 fact,它不确定地分配给 no_1no_2 的某些公因子:假设 no_1 % fact == 0 and no_2 % fact == 0

    然后作为循环不变量,您可以声明a >= fact

    【讨论】:

    • 引入是指添加到代码中吗?不幸的是,我不允许更改代码,我必须按原样解释。
    • 我不知道您使用哪种工具来处理循环不变量并证明代码的属性。在某些情况下,可以引入仅用于证明的符号,例如在 Dafny 中,这些符号被称为幽灵变量。
    • 对不起,我认为我不熟悉您所说的内容,并且我还认为我们不允许添加符号进行校对。无论如何,我只是通过初始化、维护和终止来证明循环不变。我认为最基本的一个。如果有意义,我们会通过公理等或循环不变量来证明。
    猜你喜欢
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 2011-03-14
    • 2012-09-15
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    相关资源
    最近更新 更多