Size: a a a

F# Flood: Робин Бобин чат

2018 June 13

VS

Vasily Shapenko in F# Flood: Робин Бобин чат
Я так понимаю, он руки отрезает значительно жёстче, чем f#
источник

AH

Ayrat Hudaygulov in F# Flood: Робин Бобин чат
Намертво, не пришить.
источник

AH

Ayrat Hudaygulov in F# Flood: Робин Бобин чат
Но в нём конечно тайп инфиренс ядерный

из этого кода
let rec factorial n =
 if n = 0 then 1 else n * (factorial (n - 1))

оно выводит такой тип:
val factorial: x:int{x>=0} -> Tot int

т.е. поняло что >=0 и что на выходе Tot int, тотальная функция
источник

VS

Vasily Shapenko in F# Flood: Робин Бобин чат
Кстати, неясно,как вывели
источник

АУ

Анна Удовиченко in F# Flood: Робин Бобин чат
gsomix
Можно экстрактить код в OCaml или C.
То есть ты на F* верифицируешь, а потом генеришь соответствующий код, который потом работает?
источник

VS

Vasily Shapenko in F# Flood: Робин Бобин чат
Что >=0
источник

RM

Roman Melnikov in F# Flood: Робин Бобин чат
Vasily Shapenko
Что >=0
ну по коду ясно же
источник

VS

Vasily Shapenko in F# Flood: Робин Бобин чат
Неясно
источник

АУ

Анна Удовиченко in F# Flood: Робин Бобин чат
Roman Melnikov
ну по коду ясно же
вроде же можно отрицательный x передать, ичо
источник

VS

Vasily Shapenko in F# Flood: Робин Бобин чат
Анна Удовиченко
вроде же можно отрицательный x передать, ичо
Вот и я о том
источник

RM

Roman Melnikov in F# Flood: Робин Бобин чат
при нуле - ноль, меньше нуля - уход в бесконеность - больше все сходится к инту
источник

AH

Ayrat Hudaygulov in F# Flood: Робин Бобин чат
стоп, я прогнал
источник

RM

Roman Melnikov in F# Flood: Робин Бобин чат
Roman Melnikov
при нуле - ноль, меньше нуля - уход в бесконеность - больше все сходится к инту
а бесконечность приведет к стековерфлоу
источник

AH

Ayrat Hudaygulov in F# Flood: Робин Бобин чат
именно
источник

VS

Vasily Shapenko in F# Flood: Робин Бобин чат
Ну дык -2 можно подсунуть
источник

VS

Vasily Shapenko in F# Flood: Робин Бобин чат
Там ещё is_positive
источник

VS

Vasily Shapenko in F# Flood: Робин Бобин чат
В теории 😉
источник

AH

Ayrat Hudaygulov in F# Flood: Робин Бобин чат
оно не так работает

For a recursive function, without further annotation, F* attempts to automatically prove that the recursion always terminates. In the case of factorial above, F* attempts to prove that it has type int -> Tot int, and fails to do so because, factorial is actually not a total function on arbitrary integers! Think about factorial -1.
источник

АУ

Анна Удовиченко in F# Flood: Робин Бобин чат
x>=0 это может оно и есть? Условия, при которых работает и тотальное?
источник

AH

Ayrat Hudaygulov in F# Flood: Робин Бобин чат
The factorial function is, however, a total function on non-negative integers. We can ask F* to check that this is indeed the case by writing:

val factorial: x:int{x>=0} -> Tot int
источник