我很想locale
直接从定义中生成代码,而不需要解释。例子:
(* A locale, from the code point of view, similar to a class *)
locale MyTest =
fixes L :: "string list"
assumes distinctL: "distinct L"
begin
definition isInL :: "string => bool" where
"isInL s = (s ∈ set L)"
end
实例化的假设MyTest
是可执行的,我可以为它们生成代码
definition "can_instance_MyTest L = distinct L"
lemma "can_instance_MyTest L = MyTest L"
by(simp add: MyTest_def can_instance_MyTest_def)
export_code can_instance_MyTest in Scala file -
我可以定义一个函数来执行isInL
任意的定义MyTest
。
definition code_isInL :: "string list ⇒ string ⇒ bool option" where
"code_isInL L s = (if can_instance_MyTest L then Some (MyTest.isInL L s) else None)"
lemma "code_isInL L s = Some b ⟷ MyTest L ∧ MyTest.isInL L s = b"
by(simp add: code_isInL_def MyTest_def can_instance_MyTest_def)
但是,代码导出失败:
export_code code_isInL in Scala file -
No code equations for MyTest.isInL
为什么我想做这样的事情?我正在使用 alocale
的上下文,valid_graph
例如,这里是有限的。测试图表是否有效很容易。现在我想将我的图形算法的代码导出到 Scala 中。当然,代码应该在任意有效图上运行。
我正在考虑类似于这样的 Scala 类比:
class MyTest(L: List[String]) {
require(L.distinct)
def isInL(s: String): Bool = L contains s
}