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

时间:2015-02-05 11:37:21

标签: types isabelle theorem-proving type-theory z-notation

我正在尝试编写一个谓词,"如果某个常量为真"(在这种情况下,如果' sec = ok')那么谓词将评估为False,因为我在该特定含义的结果中写了一个表达式,与谓词中其他地方的另一个表达式相矛盾。 (f%^ x≠g%^ x)∧(f%^ ci = g%^ ci)应该相互矛盾,因为x和ci都是普遍量化的并且具有相同的类型。

然而,Nitpick产生了一个我无法理解的反例。我希望有人能够检查这个引理,看看是否可以证明矛盾。或者让我知道我哪里出错了。所以简要说明如下;

  • f和g是来自任意类型' a到&#b; b的两个部分函数。
  • '秒'是一个有价值的常数' 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 )  "
    

我也看到了一个微妙的&#39;关于功能应用的两个Z Math工具包之间的区别。我试过了两个,但问题仍然存在。

    In HIVE Z Math toolkit :  "R %^ x      == The(λy. (x,y) : R )  "
    In HOL-Z Math Toolkit :   "R %^ x      == (@y. (x,y) : R)"

可以在这里看到Nitpick错误 http://i58.tinypic.com/316te1t.png

注意:如需参考,请参阅目前HOL-Z使用的部分功能I的定义。

     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)"

0 个答案:

没有答案