Isabelle 如何在语言环境中定义归纳谓词?

Isabelle 如何在语言环境中定义归纳谓词?,isabelle,Isabelle,下面是一个简单区域设置的示例: locale test = fixes test_less_eq :: "'a ⇒ 'a ⇒ bool" begin inductive test_eq where "test_less_eq x y ⟹ test_less_eq y x ⟹ test_eq x y" end 它定义了归纳测试。它可以用定义来定义,但我需要它是一个归纳谓词 然后我定义了一个对区域设置的简单解释,并尝试使用它: interpretation interp: test "

下面是一个简单区域设置的示例:

locale test =
  fixes test_less_eq :: "'a ⇒ 'a ⇒ bool"
begin

inductive test_eq where
  "test_less_eq x y ⟹ test_less_eq y x ⟹ test_eq x y"

end
它定义了归纳测试。它可以用定义来定义,但我需要它是一个归纳谓词

然后我定义了一个对区域设置的简单解释,并尝试使用它:

interpretation interp: test "op <" .

inductive some_pred where
  "interp.test_eq x y ⟹
   some_pred x y"

code_pred [show_modes] some_pred .

错误的原因是什么以及如何修复?

谓词编译器从未本地化过,即它无法直接处理在区域设置内定义的谓词。然而,有两种方法可以使这项工作发挥作用

或者,将全局_解释与defines子句结合使用,为谓词引入一个新常量,而普通解释只引入一个缩写。然后,您还必须重新声明代码_pred的引入规则,并证明相应的消除规则

global_interpretation interp: test "op <" 
  defines interp_test_eq = interp.test_eq .

declare interp.test_eq.intros[code_pred_intro]

code_pred interp_test_eq by(rule interp.test_eq.cases)
global_interpretation interp: test "op <" 
  defines interp_test_eq = interp.test_eq .

declare interp.test_eq.intros[code_pred_intro]

code_pred interp_test_eq by(rule interp.test_eq.cases)
declare test.test_eq.intros[code_pred_intro]

code_pred test.test_eq by(rule test.test_eq.cases)