В чем разница между точкой фиксации программы и функцией в Coq?
Кажется, они служат схожим целям. Единственное различие, которое я заметил, заключается в том, что пока Program Fixpoint
примет сложную меру, как {measure (length l1 + length l2) }
, Function
кажется, отвергнуть это и позволит только {measure length l1}
,
Является Program Fixpoint
строго сильнее, чем Function
или они лучше подходят для разных вариантов использования?
1 ответ
Решение
Это может быть не полный список, но это то, что я нашел до сих пор:
- Как вы уже упоминали,
Program Fixpoint
позволяет меру взглянуть на более чем один аргумент. Function
создаетfoo_equation
лемма, которая может быть использована для переписывания вызововfoo
с его RHS. Очень полезно, чтобы избежать проблем, таких как Coq упрощенный для программы Fixpoint.- В некоторых (простых?) Случаях
Function
может определитьfoo_ind
лемма для индукции вдоль структуры рекурсивных вызововfoo
, Опять же, очень полезно доказать вещи оfoo
без эффективного повторения аргумента завершения в доказательстве. Program Fixpoint
можно обмануть поддержку вложенной рекурсии, см. /questions/38599710/vlozhennaya-rekursiya-i-program-fixpoint-ilifunction/38599727#38599727. Это также почемуProgram Fixpoint
может определить функцию Аккермана, когдаFunction
не могу.