如何用合金模数模运算符?

时间:2013-09-25 18:48:44

标签: alloy

如何用合金模数模运算符?

我想尝试使用合金来证明4的任意倍数可以被2整除....

这是我的代码..

    //proof that 4n is divisible by 2

    module I4nDivisibleby2

    sig num {}

    fact {
        all n:num|n%4=0
    }

    assert even {
    all n : num | n%2 = 0
    }

    check even for 1

这不编译

1 个答案:

答案 0 :(得分:4)

您应该使用库定义的rem函数。 rem函数有两个整数,因此您无法为num的实例调用它;相反,你可以做类似

的事情
module I4nDivisibleby2

sig num { 
  val: Int
}

fact {
    all n:num | rem[n.val, 4] = 0
}

assert even {
    all n : num | rem[n.val, 2] = 0
}

check even // => no counterexample found