如何从定义的选项中提取具体值
How to extract concrete values from defined options
当你调用 mapName(identifier)
时是可能的,它 returns 不是 'rangeType option
' 的东西,因为它是一个有限映射(有限域和范围)并且您确定标识符存在于地图中?
在回答你的问题之前,让我们把我们正在谈论的那种 "partial functions" 精确化。
(明确地)部分函数在 Isabelle/HOL 中具有类型 'a => 'b option
。然后对于每个给定的 x :: 'a
这样的部分函数 f :: 'a => 'b option
导致 None
(意味着 f
未在 x
上定义)或 Some y :: 'b option
(只要 f
实际上是在 x
上定义的)。
现在,如果对于某些输入 x
你知道(在 Isabelle/HOL 中应该意味着你有一个证明)定义了 f x
,你可以使用选择器- 选项类型的函数 the : 'a option => 'a
。因此,每当 f x = Some y
然后 the (f x)
导致 y
.
注意原则上也可以调用the None
。在那种情况下,我们会遇到 Isabelle/HOL 中可用的另一种偏函数。 the None
的结果仍然是 'b
类型,但它是该类型 'b
的任意值(因此 "undefined"),我们几乎无法证明任何值。
当你调用 mapName(identifier)
时是可能的,它 returns 不是 'rangeType option
' 的东西,因为它是一个有限映射(有限域和范围)并且您确定标识符存在于地图中?
在回答你的问题之前,让我们把我们正在谈论的那种 "partial functions" 精确化。
(明确地)部分函数在 Isabelle/HOL 中具有类型 'a => 'b option
。然后对于每个给定的 x :: 'a
这样的部分函数 f :: 'a => 'b option
导致 None
(意味着 f
未在 x
上定义)或 Some y :: 'b option
(只要 f
实际上是在 x
上定义的)。
现在,如果对于某些输入 x
你知道(在 Isabelle/HOL 中应该意味着你有一个证明)定义了 f x
,你可以使用选择器- 选项类型的函数 the : 'a option => 'a
。因此,每当 f x = Some y
然后 the (f x)
导致 y
.
注意原则上也可以调用the None
。在那种情况下,我们会遇到 Isabelle/HOL 中可用的另一种偏函数。 the None
的结果仍然是 'b
类型,但它是该类型 'b
的任意值(因此 "undefined"),我们几乎无法证明任何值。