哪种类型的定义在本地语境中是合法的?

时间:2013-05-15 04:03:55

标签: isabelle

在Isabelle的NEWS档案中,我找到了

  

命令'typedef'现在在本地理论上下文中工作 - 没有   引入对参数或假设的依赖性,而不是   可能在Isabelle / Pure / HOL。请注意,逻辑环境可能会   包含对本地typedef的多种解释(具有不同的   非空洞证明),即使在全球理论背景下也是如此。

(可追溯到Isabelle2009-2)。这是关于typedef和当地理论背景的最新消息吗?此外,限制“不引入对参数或假设的依赖性”实际意味着什么?

如果这意味着我不能在typedef的定义集中使用区域设置参数,那么我根本不会考虑typedef本地化(因为可以轻松移动唯一允许的实例)在当地环境之外,还是我错过了什么?)。

是否(或应该或将来会)沿着这些行做某事(用于typedef的集合取决于语言环境参数V):

datatype ('a, 'b) "term" = Var 'b | Fun 'a "('a, 'b) term list"

locale term_algebra =
  fixes F :: "'a set"
    and V :: "'b set"
begin

definition "domain α = {x : V. α x ~= Var x}"

typedef ('a, 'b) subst =
  "{α :: 'b => ('a, 'b) term. finite (domain α)}"

end
我目前获得的

Locally fixed type arguments "'a", "'b" in type declaration "subst"

2 个答案:

答案 0 :(得分:3)

关于此的一些注释:

  • 本地理论基础设施只是组织现有的模块概念(localeclass等),以便定义机制(definitiontheorem,{{1 }},inductive等)可以在各种环境中统一工作。这不会改变逻辑基础,因此不能依赖于术语参数(function)或前提(fixes)的规范元素将不会从根本上变得更好。它们只是被改装到更大的框架中,这已经是一个非常合乎逻辑的好处。

  • 规范的地方理论目标是assumes及其衍生物,如locale。这些根据上面概述的原则在逻辑中工作:通过classfixes的某些上下文提升lambda。其他具有更大野心的目标可想而知,但需要由一些勇敢和英勇的家伙来实施。例如,人们可以将AWE理论解释机制作为另一个局部理论目标,然后得到类型/概念/公理的参数化 - 通常需要通过明确的证据来实现内部的可接受的推论。一个LCF证明者(或以放弃LCF为代价并通过某个神谕来做)。

  • 如上所示的普通assumes(及其衍生品,如最近的HOL-BNF的本地化typedefcodatatype)可以在其依赖类型参数中略微改进,但这意味着一些实施工作现在无法证明微薄的结果。它只允许用隐式参数编写多态类型结构,如下所示:

    datatype

    导出后,您将像往常一样获得context fixes type 'a begin datatype list = Nil | Cons 'a list end

    进一步的复杂化:'a list不存在。 Isabelle / Pure通过Hindley-Milner隐式处理类型参数。

答案 1 :(得分:2)

与此同时,这个问题在Isabelle邮件列表中得到了回答。 简短的版本就是我试图做的事情根本不可能。以下是@makarius的解释:

  

[不引入对参数或假设的依赖]意味着您不能在类型规范中引用上下文的fixes / assumes - 这在逻辑上不可能在Isabelle / Pure / HOL中。只有非空虚证明存在于上下文中,并且由此产生的定理是局部的。 (但是,证据对上下文逻辑内容的实际依赖性在实践中很难得到。)

     

'typedef'在可能的范围内正式本地化。本地化意味着以通常的方式使用本地理论基础设施和背景。对于typedef,这意味着额外的逻辑事物,如名称空间,语法,派生声明等。

     

从历史上看,由于不可能使typedef依赖于上下文的逻辑部分,因此根本没有本地化,并且许多工具实现直到今天都受到影响。

至于我的具体例子:

  

您必须通过为subst类型的参数使用不同的名称来规避范围冲突[...]。   尽管如此,从逻辑角度来看,这不起作用:对术语参数V的依赖不能在HOL typedef中使用。本地理论概念并没有提供增强逻辑的神奇方法 - 它只是现有逻辑框架的基础设施。