Проверка того, является ли действительное число целым числом в alt-ergo

Я хочу проверить, является ли реальное значение целым числом. Кажется, не существует функции Floor или аналогичной, поэтому я пытаюсь использовать функцию real_of_int из учебника следующим образом:

      function real_of_int(n:int):real = n **. 1
predicate is_int_r(a:real) = exists v:int . a = real_of_int(v)

goal g1: real_of_int(0) = 0.0
goal g2: exists v:int . real_of_int(v) = 0.0
goal g3: is_int_r(0.0)


File "test2.ae", line 4, characters 10-30: Valid (0.0000) (3 steps) (goal g1)
File "test2.ae", line 5, characters 10-45: I don't know (0.0000) (9 steps) (goal g2)
File "test2.ae", line 6, characters 10-23: I don't know (0.0013) (11 steps) (goal g3)

Таким образом, действительное число int 0 равно 0,0 (g1 допустимо), но существует в g2 не может его найти, и, следовательно, g3 тоже не работает (alt-ergo 2.4.3).

Есть лучший способ сделать это?

Поскольку g1 действителен, я ожидал, что g2 найдет v=0. Но это не так.

0 ответов

Другие вопросы по тегам