У меня есть следующее определение в моем файле spec в Coq. Мне нужно иметь предложение, сравнивающее два значения типа «int». Эти два являются «t» и «Int.pr (i. (Period1))». (I.period1) и (i.period2) имеют тип «Z».Как получить предложение сравнить два типа «int» в Coq?
Это мой фрагмент кода:
Definition trans_uni_r_reject (i: invariant) (om os: block) (rid roff rval t: int) (m: mem) :=
(t > (Int.repr (i.(period1)))
/\ t < (Int.repr (i.(period2)))
/\ master_eval_reject i om os rid roff rval m).
Это дает мне ошибку ниже:
Термин «т» имеет тип «ИНТ» в то время, как ожидается, имеют тип «Z».
Я также попытался:
(Int.cmpu Cgt t (Int.repr (i.(period1))))
/\ (Int.cmpu Clt t (Int.repr (i.(period2))))
/\ (master_eval_reject i om os rid roff rval m).
, но это дает мне эту ошибку:
Термин "Int.cmpu ВКТ т (Int.repr (period1 я))" имеет тип «bool», в то время как ожидается, что он будет иметь тип «Prop».
Есть ли способ сравнить эти два типа «int» или преобразовать их в нечто другое и вернуть тип «prop»?
Спасибо,
Спасибо Артур! Как вы предположили, я объявил о принуждении, и он решил мою проблему. :) –
В дополнение к отличному ответу Артура, я хотел бы указать, что проверка с помощью 'is_true' ведет стиль проверки с переписыванием, так как вы действительно можете переписать' A = true' на 'true = true'. – ejgallego