在Isabelle中需要一个定义来表明两个部分函数永远不会产生相同的输出

时间:2015-01-28 05:48:27

标签: isabelle theorem-proving master-theorem theorem z-notation

我正在使用HOL-Z中的数学工具包来排除一些Isabelle谓词。具体来说,我正在使用部分函数定义来定义我正在编写的Z规范中的一些关系,我将模式转换为规范语句,以便生成简单的HOL谓词。

来自HOL-Z工具包的

定义

type_synonym      ('a,'b) lts = "('a*'b) set"     (infixr "<=>" 20)

  prodZ       ::"['a set,'b set] => ('a <=> 'b) "        ("_ %x _"  [81,80] 80)
"a %x b"        == "a <*> b"

rel           ::"['a set, 'b set] => ('a <=> 'b) set"    ("_ <--> _"   [54,53] 53)
rel_def       : "A <--> B    == Pow (A %x B)"

partial_func  ::"['a set,'b set] => ('a <=> 'b) set"     ("_ -|-> _"   [54,53] 53)
partial_func_def  : "S -|-> R    == 
    {f. f:(S <--> R) & (! x y1 y2. (x,y1):f & (x,y2):f  --> (y1=y2))}"

rel_appl      :: "['a<=>'b,'a] => 'b"    ("_ %^ _"  [90,91] 90)
rel_appl_def  :  "R %^ x       == (@y. (x,y) : R)"

当我在谓词中写下以下内容时:

FORALL x. balance %^ x = Bbalance %^ x

其中balance和Bbalance都是Isabelle形式('a&lt; =&gt;'b)的部分函数(在Z中),我认为它表现良好。

如何定义另一个函数,我说两个部分函数完全不相交所有'x'。我的意思是在两个部分函数'balance'和'Bbalance'上相同值的关系应用从不产生相同的值。类似......

FORALL x. balance %^ x \noteq Bbalance %^ x
抱歉这个糟糕的解释。我们通过专家建议学习:)。

1 个答案:

答案 0 :(得分:1)

您的rel_appl_def规则使用epsilon函数。根据斯坦福大学哲学百科全书(SEP)(*)在1921年(1922年)的汉堡演讲中,希尔伯特首先提出了使用选择函数来处理正式算术系统中排除中间原理的想法。 p>

epsilon函数的控制公理如下:

 (A x) --> (A (@ A))

在经典逻辑中,由于ex falso quodlibet,如果(A x)失败,(@ A)可以采取任何解释。这意味着当您提供不在域dom R中的参数x时,您的rel_appl_def规则会给出任何值。

所以你想要用作相等的东西可能是两个部分函数上的以下布尔函数(^):

 f ^ g = (dom f = dom g) & (!x. x : dom f --> f %^ x = g %^ x)

当SEP写入时我无法理解,第二个,当前可能更大的兴趣,是在定理证明系统HOL和Isabelle中使用epsilon算子,其中epsilon项的表达能力产生显着的实际优势

我在实践中看到了对部分函数的更简单的处理,即使用选项类型。因此,部分函数f仅属于类型A =&gt; B选项。但是当你无法改变项目中的类型时,寻求符合你要求的平等可能更明智,上面的定义可能是候选人。

再见

(*)
Epsilon微积分,Jeremy Avigad和Richard Zach 首次出版于2002年5月3日星期五;实质性修订2013年11月27日星期三
http://plato.stanford.edu/entries/epsilon-calculus/