我正在使用Descision_Procs文件中的Approximation.thy进行Isabelle中的区间算术运算。该文件为您提供了证明实数不等式的策略,例如:
theorem "3 ≤ x ∧ x ≤ 6 ⟹ sin ( pi / x) > 0.4" by (approximation 10)
现在,我有兴趣尝试实现该实现的核心功能,该功能似乎是近似功能。在Isabelle / HOL中通过计算证明实值不等式的4.5.2节对此进行了描述。这是我要做的一些声明:
value "Float 3 (-1)"
value "approx 1 (Num (Float 3 (-2))) [Some (Float 1 0,Float 4 0)]"
value "approx 1 (Add (Num (Float 3 (-2))) (Num (Float 4 (-8)))) [Some (Float 1 0,Float 4 0)]"
value "approx 1 (Add (Var 1) (Num (Float 4 (-8)))) [Some (Float 1 0,Float 4 0)]"
首先,我想问一下您是否知道一种更方便的写浮点数的方法(而不是Float a b,也许有一种real_to_float r
类型的函数)。然后,您会看到该函数在给定一定精度(我理解为正确的小数位数)的情况下,计算了作为第二个参数给出的运算的上下限。
现在,主要问题如下:
最后一个参数的目的是什么?我想它们是第二个参数中变量的置信区间吗?
文本声称此函数还实现间隔算术。您能否显示一个示例,在其中我可以看到此功能如何执行间隔加法? ([a,b] + [c,d] = [a + c,b + d])
答案 0 :(得分:2)
这些东西都不应该直接使用;因此,“近似”方法在其上方提供了一个方便层。
有一个类似real_to_float
的函数。它的名称为float_of
,但是它没有任何代码方程式,因此您无法真正使用它。可以为此证明一个代码方程式,但这会有些乏味。
关于其他问题:是的,最后一个参数是一个列表,其中第i个元素是一个间隔,已知第i个变量的值位于其中。
是的,approx
执行间隔算术;实际上,这是其工作的核心。它完全间隔运行。可以观察到您提到的示例,例如在做x + y
时,其中x
在[1;2]
中,而y
在[-1;2]
中:
value "approx 10 (Add (Var 0) (Var 1))
[Some (Float 1 0, Float 1 1), Some (Float (-1) 0, Float 1 1)]"
返回间隔[0;4]
:
"Some (Float 0 0, Float 2 1)"
:: "(float × float) option"
或更直接地:
lemma "(x :: real) ∈ {1..2} ⟹ y ∈ {-1..2} ⟹ x + y ∈ {0..4}"
by (approximation 10)