isabelle - 选择一个任意但固定的元素

时间:2015-11-17 20:22:31

标签: isabelle

如何从Isabelle中的一组中选择任意但固定的元素?所选元素将用作集合中的随机元素以供进一步处理,但不得进一步使用其他元素。

我的第一次尝试是:

theory Scratch
imports Main Orderings
begin 
  value "(let el ∈ {3::int, 4, 5} in el)"
end

但是语法错误。

我的第二次尝试是:

theory Scratch
imports Main Orderings
begin 
   value "(let el = (SOME x . x ∈  {{3::int, 4}, 
                                    {5::int, 6} , 
                                    {7::int, 8}}) 
                  in el)" 
end

提供类型int set而非预期类型int

修改1

一个新的例子:

theory Scratch
imports Main Orderings
begin 

fun add :: "int set ⇒ int" where
  "add st = (let el = (SOME x . x ∈ st) in el + (10::int))"

value "add {3::int, 4, 5, 6}"

end

代码的结果是:

"(SOME u. 3 = u ∨ 4 = u ∨ 5 = u ∨ 6 = u) + 10"
  :: "int"

而不是整数值。如何写add以使结果为13,14,15或16?确切的值无关紧要,每次执行函数时都必须不同。

2 个答案:

答案 0 :(得分:2)

您获得int set的原因是您从int set set中选择了一个元素。在第二次尝试中,您使用的是嵌套集,而不是使用“平面”集。

除了您的具体问题,我建议您查看folding理论中的Finite_Set语言环境。它提供了一个用于折叠集合的组合器(假设操作员通勤)。

答案 1 :(得分:1)

您可以定义

definition "el = (SOME x. x ∈ {(3::int), 4, 5})"

然后你可以证明。

lemma "el ∈ {3,4,5}"
  unfolding el_def by (rule someI_ex) auto

逻辑上,el{3, 4, 5}的一些固定元素(正如我们刚刚证明的那样),并且总是相同的元素 - 但你不知道哪一个。您可以将其视为“当宇宙存在时,它选择了SOME x. x ∈ {3,4,5}的值,345,但它永远无法分辨你是哪一个。'

我不知道你想要做什么,但我不认为这是你真正想要做的。也许你可以详细了解一下你想用这个元素做些什么?