には、次の固定点を考えてみましょう:それは減少不動点を推測することはできませんので引数を減らす(とどのようなプログラム不動点である)
Require Import Coq.Lists.List.
Import ListNotations.
Inductive my_type: Type:=
| Left: my_type
| Right: my_type
.
Fixpoint decrease (which: my_type) (left right: list my_type) : list my_type :=
match which with
| Left =>
match left with
| [] => []
| a::tl => decrease a tl right
end
| Right =>
match right with
| [] => []
| a::tl => decrease a left tl
end
end.
コックは、以下の不動点を拒否(時にはleft
リストは、時にはそれが、その頭を失いright
)。
このanswerは、Program Fixpoint
を使用し、{measure ((length left)+(length right))}
を指定することでこれを解決できることを示しています。
私の質問は以下のとおりです。
- 定期
Fixpoint
とProgram Fixpoint
の違いは何ですか? - 減少する引数を通常の
Fixpoint
に明示することはできますか? Next Obligation
の目標は?