isabelle-选择任意但固定的元素
如何从Isabelle中的集合中选择任意但固定的元素?所选元素将用作集合中的随机元素以进行进一步处理,但不必进一步使用其他元素 我的第一次尝试是:isabelle-选择任意但固定的元素,isabelle,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:
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
但是给出了一个语法错误
我的第二次尝试是:
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集
,而不是预期的类型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?确切的值并不重要,它必须在每次执行函数时都不同。因此得到int set
的原因是您从int set
中选择了一个元素。在第二次尝试中,您使用了嵌套集,而不是使用“平面”集
除了你的具体问题,我建议你看看有限集
理论中的折叠
区域设置。它提供了一个用于折叠集合的组合器(假定操作员通勤)。您可以定义
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}
的某个固定元素(正如我们刚才证明的),它总是同一个元素,但你不知道是哪一个。你可以把它想象成“当宇宙诞生时,它为某个x选择了一个值。x∈ {3,4,5},或者3
,4
,或者5
,但它永远不会告诉你它是哪一个。”
我不知道你到底想做什么,但我不认为这是你真正想做的。也许您可以更详细地了解如何使用该元素?例如,所选元素将传递给一个将值加倍的函数。我需要知道所选的值。在C++中,我将创建一个集合的列表,选择一个随机索引并返回那个索引的值。你到底想证明什么?我想描述一个数据流网络,并证明如果这个网络满足一些性质,其他一些性质也将是有效的。当我想查看数据如何在网络中流动时,元素的选择是相关的。