現在、「Quantifying Lists」エクササイズをhttp://isabelle.in.tum.de/exercises/から行っています。それは、「原始的な再帰を使用してリストに普遍的および実在的な量子を定義するように求めます。式{{term xs} ... '{term xs} ...のすべての要素{term "P x"}が{@ "term"}の要素に当てはまる場合、Expression @ {term "alls P xs"}は真でなければなりません。私には信じられる:リストを数量化するための関数:構文と型のエラー(Isabelle)
primrec alls :: "('a ⇒ bool) ⇒ 'a list ⇒ bool" where
"alls P x # [] = (if P x then True else False)"
| "alls P x # xs = (if P x then alls P xs else False)"
私はのように私は数学的表記で表現だろうか書き込みしようとしています:
オールズ(P、[X])= {Pxが、その後真の場合はそうでない場合はfalse
および
alls(P、[x、...])= {Pxの場合はalls(P、[...])そうでない場合はfalse。
しかし、Isabelleは、「統一にタイプエラーがあります」と示し、x
がタイプ'a list
であると仮定していることを示しています。私は文法を正しく表現していないと感じますが、どのように変えるべきかはわかりません。
ありがとうございます!私はそれを今作業しました( '' True' in '')。私はエラーメッセージ 'Nonprimitive pattern'を将来どのように返すかを知っています。 – IIM
不要な大文字小文字の分割を避けるため、 'P x∧alls P xs'は' P x then all 'P xs else False'よりも優れていることに注意してください。Isabelleの自動化は接続詞の推論に非常に適しています。 –