model/formalize如何在Isabelle/HOL中改变变量(change of world)?
How to model/formalize the change of the variable (change of world) in Isabelle/HOL?
我正在尝试将 Isabelle/HOL 中的业务规则形式化,但业务规则涉及某些变量值的更改,例如 if x=5 => x=6
。 =>
不是通常的含义,因为 x 在一个世界中是 5(解释,语义域)并且在执行规则之后 x 是 6 并且它已经是另一个世界(不同的解释,赋值函数,语义域)。所以 - 从技术上讲 is x=5 => x=6
不是一阶逻辑中的公式,它也不是 Isabelle/HOL 的高阶逻辑中的公式。更有可能的是 dynamic/action 逻辑 [rule1](x=5)=(x=6)
中的公式(它定义了将 rule1
应用于某些世界中的公式后会产生其他世界中的真实公式(dynamic/action 逻辑本质上是一种模态逻辑,Kripke/possible 可以在这里应用世界语义。
现在,回到 Isabelle/HOL 或 Coq:FOL/HOL 理论是所有世界或一个特定世界中的一组公式。如果我们停留在 FOL/HOL 那么世界就没有变化,变量的值也没有变化。如果我们想对这些变化进行建模、推理,我们应该使用模态逻辑。但是可以在HOL中完成吗?这个世界的变化?
http://matryoshka.gforge.inria.fr/pubs/fernandez_burgos_bsc_thesis.pdf 是关于 Isabelle/HOL 中排序算法形式化的好工作,那里使用函数式编程,不需要变量,因此 - 世界之间没有这种变化。但是,如果我们尝试对强化学习、马尔可夫过程、impertative/object 面向编程、Isabelle/HOL 中的业务规则进行建模,那么我们应该表达这种变化。怎么做?
如何在Isabelle/HOL中表达业务规则if x=5 => x=6
?
在 Coq 中可以使用相同的方法,这就是为什么也欢迎来自 Coq 社区的答案。
最常见的解决方案是使用 world => world => bool
类型的谓词来表示世界或状态(对于马尔可夫过程)或内存(对于程序验证)之间的转换。它代表了从一个地方到另一个地方的过渡。
这样的谓词通常可以定义为表示非确定性的归纳谓词。
如果您对逻辑特别感兴趣:
对于 Isabelle,您可以看看 AFP 中动态逻辑和模态逻辑的形式化是如何完成的(https://www.isa-afp.org/topics.html -- 搜索模态逻辑:在那个页面)。
对于 Coq,我发现了这个 approach,它遵循相同的模式,但还有许多其他形式化。
我想到的最直接的方法是为您的模态语言 datatype fml = ...
和满意度谓词 sat :: ('w ⇒ 'w ⇒ bool) ⇒ 'w ⇒ fml ⇒ bool
设置一个数据类型,然后将逻辑嵌入到 Isabelle 中。这是(本质上)Xu 和 Norrish (Xu's Honour's Thesis; IJCAR Paper) 采用的方法。
这种方法的缺点是它是深度嵌入,这意味着您必须自己处理变量绑定和替换。
您还可以使用 typedecl
和 consts
声明世界和可访问性关系的存在,并将 'lifted connectives' 定义为采用世界和 return 的函数一个布尔值,例如TT ≡ λw. True
和 ◊φ ≡ λw. ∃v. (w R v) ∧ φ v
(其中 R
由 consts
定义)。这是 Christoph Benzmüller 在 preprint on Gödel's Ontological Argument.
中采用的方法
我正在尝试将 Isabelle/HOL 中的业务规则形式化,但业务规则涉及某些变量值的更改,例如 if x=5 => x=6
。 =>
不是通常的含义,因为 x 在一个世界中是 5(解释,语义域)并且在执行规则之后 x 是 6 并且它已经是另一个世界(不同的解释,赋值函数,语义域)。所以 - 从技术上讲 is x=5 => x=6
不是一阶逻辑中的公式,它也不是 Isabelle/HOL 的高阶逻辑中的公式。更有可能的是 dynamic/action 逻辑 [rule1](x=5)=(x=6)
中的公式(它定义了将 rule1
应用于某些世界中的公式后会产生其他世界中的真实公式(dynamic/action 逻辑本质上是一种模态逻辑,Kripke/possible 可以在这里应用世界语义。
现在,回到 Isabelle/HOL 或 Coq:FOL/HOL 理论是所有世界或一个特定世界中的一组公式。如果我们停留在 FOL/HOL 那么世界就没有变化,变量的值也没有变化。如果我们想对这些变化进行建模、推理,我们应该使用模态逻辑。但是可以在HOL中完成吗?这个世界的变化?
http://matryoshka.gforge.inria.fr/pubs/fernandez_burgos_bsc_thesis.pdf 是关于 Isabelle/HOL 中排序算法形式化的好工作,那里使用函数式编程,不需要变量,因此 - 世界之间没有这种变化。但是,如果我们尝试对强化学习、马尔可夫过程、impertative/object 面向编程、Isabelle/HOL 中的业务规则进行建模,那么我们应该表达这种变化。怎么做?
如何在Isabelle/HOL中表达业务规则if x=5 => x=6
?
在 Coq 中可以使用相同的方法,这就是为什么也欢迎来自 Coq 社区的答案。
最常见的解决方案是使用 world => world => bool
类型的谓词来表示世界或状态(对于马尔可夫过程)或内存(对于程序验证)之间的转换。它代表了从一个地方到另一个地方的过渡。
这样的谓词通常可以定义为表示非确定性的归纳谓词。
如果您对逻辑特别感兴趣:
对于 Isabelle,您可以看看 AFP 中动态逻辑和模态逻辑的形式化是如何完成的(https://www.isa-afp.org/topics.html -- 搜索模态逻辑:在那个页面)。
对于 Coq,我发现了这个 approach,它遵循相同的模式,但还有许多其他形式化。
我想到的最直接的方法是为您的模态语言 datatype fml = ...
和满意度谓词 sat :: ('w ⇒ 'w ⇒ bool) ⇒ 'w ⇒ fml ⇒ bool
设置一个数据类型,然后将逻辑嵌入到 Isabelle 中。这是(本质上)Xu 和 Norrish (Xu's Honour's Thesis; IJCAR Paper) 采用的方法。
这种方法的缺点是它是深度嵌入,这意味着您必须自己处理变量绑定和替换。
您还可以使用 typedecl
和 consts
声明世界和可访问性关系的存在,并将 'lifted connectives' 定义为采用世界和 return 的函数一个布尔值,例如TT ≡ λw. True
和 ◊φ ≡ λw. ∃v. (w R v) ∧ φ v
(其中 R
由 consts
定义)。这是 Christoph Benzmüller 在 preprint on Gödel's Ontological Argument.