Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Isabelle 伊莎贝尔的条件定义_Isabelle - Fatal编程技术网

Isabelle 伊莎贝尔的条件定义

Isabelle 伊莎贝尔的条件定义,isabelle,Isabelle,假设您想在Isabelle中正式定义以下定义: add a b = if f(a,b) ≠ 0 then add_1 a b if g(a,b) ≠ 0 then add_2 a b 我不想给任何选择任何优惠。事实上,我需要证明的下一个属性是: “添加”为任何输入指定至少一个值 add是定义良好的 我应该用什么来模拟伊莎贝尔的定义?也许是部分函数 你可以看到等式(17)和引理4.3.4,4.3.4,来看看我在说什么引理。你可以使用函数命令来重叠等式和前提: function add ::

假设您想在Isabelle中正式定义以下定义:

add a b = 
 if f(a,b) ≠ 0 then add_1 a b
 if g(a,b) ≠ 0 then add_2 a b
我不想给任何选择任何优惠。事实上,我需要证明的下一个属性是:

  • “添加”为任何输入指定至少一个值
  • add是定义良好的
  • 我应该用什么来模拟伊莎贝尔的定义?也许是部分函数


    你可以看到等式(17)和引理4.3.4,4.3.4,来看看我在说什么引理。

    你可以使用
    函数
    命令来重叠等式和前提:

    function add :: "..." where
      "add a b = add_1 a b" if "f a b ≠ 0"
    | "add a b = add_2 a b" if "g a b ≠ 0"
    apply(atomize_elim) (* makes the exhaustiveness goal more readable *)
    
    这就为您提供了一个证明义务,证明案例确实是详尽无遗的,并且当它们重叠时,右侧表示相同。一旦您展示了这一点,您就必须展示终止(如果您的函数不是递归的,那么这可以通过

    termination by lexicographic_order
    
    如果你的方程实际上不是详尽的,那么你首先需要添加更多的情况

    | "add a b = undefined a b" if "f a b = 0 & g a b = 0"
    

    也就是说,如果
    f
    g
    都是
    0
    ,那么
    添加一个b
    将表示一些未指定的值,并且对于
    a
    b

    的每一个这样的选择,该值可能不同,在f(a,b)的情况下,您会将其归为什么值=0?@larsh我打错了我在第二种情况下是指g而不是f。。。