У меня есть две разные реализации для определенного предиката, и я хочу проверить, возвращают ли они оба один и тот же экземпляр, как я могу этого добиться?
Спасибо.
У меня есть две разные реализации для определенного предиката, и я хочу проверить, возвращают ли они оба один и тот же экземпляр, как я могу этого добиться?
Спасибо.
Я бы утверждал, что два предиката всегда либо оба истинны, либо оба ложны, и проверял утверждение.
pred P1 { ... }
pred P2 { ... }
assert P1_equiv_P2 { P1 iff P2 }
check P1_equiv_P2
Если предикаты принимают аргументы, то конечно нужно проверять их на одних и тех же аргументах:
pred P1[x : univ] { ... }
pred P2[x : univ] { ... }
assert P1_equiv_P2 { all x : univ | P1[x] iff P2[x] }
check P1_equiv_P2