Tobias NipkowとGerwin Klein、第7.2.2節の「具体的セマンティクス」にcode_predの使用例があります。code_predと値の使い方は?
私は例をもとに、簡単な言語を実装していると私は式の値を計算してみてください。
theory BooLang
imports Main
begin
type_synonym id = string
type_synonym 'a Env = "id ⇒ 'a"
datatype BooBoolExp =
BooLiteralExp bool |
BooLetExp id BooBoolExp BooBoolExp |
BooVarExp id |
BooAndExp BooBoolExp BooBoolExp
datatype BooVal = Bv bool
type_synonym BooEnv = "BooVal Env"
inductive tbooval :: "BooBoolExp × BooEnv ⇒ BooVal ⇒ bool" (infix "⇒" 55) where
Literal: "(BooLiteralExp b, env) ⇒ Bv b" |
And: "⟦(a, env) ⇒ Bv av; (b, env) ⇒ Bv bv⟧ ⟹ (BooAndExp a b, env) ⇒ Bv (av ∧ bv)" |
Var: "(BooVarExp v, env) ⇒ env v" |
Let: "⟦(val, env) ⇒ b; (body, env(v := b)) ⇒ x⟧ ⟹ (BooLetExp v val body, env) ⇒ x"
code_pred tbooval .
values "{t. True}"
values "{t. (BooLiteralExp true, λ_. Bv false) ⇒ t}"
end
しかし、第一の値の呼び出しのために、私はエラーを取得する:「値の評価が可能ではありませんcode_predでのコンパイルが呼び出されなかったため "です。
2番目のエラーについては、「理解不可能なモードはありません{t。(BooLiteralExp true、λ_。Bv false)⇒t}」と表示されます。
私の理論には何が問題なのですか?