Types 从Z到Isabelle/HOL的部分函数解释

Types 从Z到Isabelle/HOL的部分函数解释,types,isabelle,theorem-proving,type-theory,z-notation,Types,Isabelle,Theorem Proving,Type Theory,Z Notation,我试图写一个谓词,如果某个常量为true,在本例中,如果'sec=ok',那么谓词的计算结果将为False,因为我在该特定蕴涵的结果中写了一个表达式,它与谓词中其他地方的另一个表达式相矛盾。 f%^x≠ g%^x∧ f%^ci=g%^ci应该相互矛盾,因为x和ci都是普遍量化的,并且具有相同的类型 然而,挑剔产生了一个我无法理解的反例。我希望有人能检查一下这个引理,看看是否能证明一个矛盾。或者让我知道我错在哪里。因此,简要描述如下: f和g是任意类型“a”到“b”的两个分部函数。 “sec”是

我试图写一个谓词,如果某个常量为true,在本例中,如果'sec=ok',那么谓词的计算结果将为False,因为我在该特定蕴涵的结果中写了一个表达式,它与谓词中其他地方的另一个表达式相矛盾。 f%^x≠ g%^x∧ f%^ci=g%^ci应该相互矛盾,因为x和ci都是普遍量化的,并且具有相同的类型

然而,挑剔产生了一个我无法理解的反例。我希望有人能检查一下这个引理,看看是否能证明一个矛盾。或者让我知道我错在哪里。因此,简要描述如下:

f和g是任意类型“a”到“b”的两个分部函数。 “sec”是一个值为“ok”和“notok”的常量

f::'a-|->'b
g::'a-|->'b

lemma simpleExample: 
shows "∀ (ci::'a ) (a::'a set) (b::'b set) ( f::'a  <=> 'b) . f ∈ (a-|-> b) ∧ card f > 0 -->       
    (∃  ( g::'a  <=> 'b) . g ∈ (a-|->b) ∧ a=(dom f ∪ dom g) ∧
    (  ∀ (x ::'a) . sec=ok --> f%^x ≠ g%^x) ∧  f%^ci = g%^ci )  "
这里可以看到挑剔的错误

注意:作为参考,请从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       == The(λy. (x,y) : R)"

我不明白你想做的一切,但正如你所说,“谓词将求值为False”,即引理为False。因此,Nittick发现了一个反例也就不足为奇了!我认为应该要求我证明目标1子目标:1。错,这正是我所期待的。现在,Nittick说可能会有一个反论点。我不想用一种不可能有反论点的方式来写它。你可以简单地忽略挑剔,试图证明错误。。。但是如果你成功了,有些东西会被严重破坏。你为什么期望你能证明一个虚假的陈述?我不是在试图证明一个虚假的陈述。我希望Isabelle将其赋值为False,这样我就可以得出结论,谓词存在矛盾,无法被证明。但由于这个挑剔的反例,而且伊莎贝尔没有将我的谓词求值为false,所以我无法得出结论。在一个正式的系统规范中,我正在进行代码生成,在为系统变量分配不同的值之后生成许多谓词。根据Isabelle的输出,我可以根据系统变量的变化来推断系统的某些属性。也许您希望定义simpleExample=∀ ci::'a…,后跟引理simpleExample=False?
     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       == The(λy. (x,y) : R)"