如何在Isabelle中定义从一个集合到另一个集合(f:a->;B)的函数/映射?

如何在Isabelle中定义从一个集合到另一个集合(f:a->;B)的函数/映射?,isabelle,Isabelle,Isabelle/HOL(2021)中定义函数f从一个特定集合a到另一集合B的正确方法是什么 从数学上讲,函数f:a->B通常被定义为从其域a到其共域B的映射。函数f被定义为a×B中的一种特殊关系,只有一个y∈ B满足每个x的xfy∈ A 但在Isabelle/HOL中,函数似乎是根据计算来定义的,例如fx=sucx。似乎没有明确定义域和共域的地方 我只是想知道,是否有一种传统的方法来定义Isabelle中的函数,即域函数和共域函数,并与上述关系的定义兼容。Background 正如您所注意到的

Isabelle/HOL(2021)中定义函数
f
从一个特定集合
a
到另一集合
B
的正确方法是什么

从数学上讲,函数
f:a->B
通常被定义为从其域
a
到其共域
B
的映射。函数
f
被定义为
a×B
中的一种特殊关系,只有一个y∈ B满足每个x的
xfy
∈ A

但在Isabelle/HOL中,函数似乎是根据计算来定义的,例如
fx=sucx
。似乎没有明确定义域和共域的地方


我只是想知道,是否有一种传统的方法来定义Isabelle中的函数,即域函数和共域函数,并与上述关系的定义兼容。

Background

正如您所注意到的,在Isabelle/HOL中,函数通常是
'a类型的术语⇒'b
,其中
'a
'b
可以是任意类型。因此,Isabelle中的所有功能都是完整的。Joachim Breitner的一篇博文很好地解释了这一点:。我不会重述博文内容的任何内容:相反,我将集中讨论您在问题中提出的问题

函数的常规定义

我知道在传统数学中定义函数有两种方法(这里我使用术语“传统数学”来表示在某些集合论基础中暴露的数学):

  • 例如,根据[1,第6章],函数只是一个单值二元关系
  • 一些作者[2,第2章]通过定义识别具有其域和辅域的函数,即函数成为三元组(a,B,r),其中r⊆A×B仍然是一个单值二元关系,而A正是该关系的域
  • 你可以找到进一步的讨论。如果函数是二元关系,则域和范围通常与函数所表示的关系的域和范围标识。然而,谈论这样一个实体的密码域是毫无意义的。如果函数被定义为三元组(a、B、r),那么编码域就是指定的集合B

    Isabelle/HOL I:作为关系的函数

    Isabelle/HOL已经在理论
    relation.thy
    中提供了单值关系概念的定义。该定义隐含在谓词
    单值
    的定义中:

    definition single_valued :: "('a × 'b) set ⇒ bool"
      where "single_valued r ⟷ (∀x y. (x, y) ∈ r ⟶ (∀z. (x, z) ∈ r ⟶ y = z))"
    
    因此,有效地,单值关系是
    ('a×'b)集合
    类型的一个术语,它满足谓词
    单值
    。文中还给出了关于这一定义的一些初步结果

    当然,这个谓词可以用来创建从
    'a
    'b
    的“函数作为关系”的新类型构造函数。有关在Isabelle/HOL中定义新类型构造函数的更多信息,请参见Isabelle[3,第11.7节]的官方文件和Isabelle/HOL[4,第3节]中的文章“提升和转移:商的模块化设计”。这样的类型已经在某个地方出现,这是不可能的,但我在快速搜索源代码后找不到它(或任何类似的东西)。 当然,几乎没有什么可以阻止我们提供一种类型,它可以捕获答案前面小节中给出的函数的任何一种集合论定义。我想,像下面这样的定义可能会起作用,但我还没有测试过:

    typedef ('a, 'b) relfun = 
      ‹
        {
          (A::'a set, B::'b set, f::('a × 'b) set). 
            single_valued f ∧ Domain f = A ∧ Range f ⊆ B
        }
      ›
    proof-
      let ?r = ‹({}, {}, {})›
      show ?thesis unfolding single_valued_def by (intro exI[of _ ?r]) simp
    qed
    
    Isabelle/HOL II:FuncSet和其他限制

    虽然Isabelle/HOL中的函数是完整的,但仍然可以使用各种方法将函数限制在某个预定义域(即
    UNIV::'a set
    )的适当子集)。一种常见的方法(见theory
    HOL Library.FuncSet
    )是强制函数在域的某些部分上
    未定义。我在下文中的回答更详细地解释了这一点

    Isabelle/HOL III:HOL/ZF、HOL和HOTG中的ZFC

    这可能有点离题。然而,存在Isabelle/HOL的扩展以及不同强度的集合论公理[5,6,7]。例如,HOL[6]中的ZFC提供了一种表示冯·诺依曼宇宙的特定类型
    V
    。我们现在可以定义所有相关的集合论概念,当然包括函数的常规定义。在HOL中的ZFC中,可以使用所谓的运算符
    VLambda
    将HOL中定义的函数内部化,例如:
    (F::V)=VLambda(A::V)(F::V⇒五) 
    。现在,
    F
    是一个单值二元关系,内部化在类型
    V
    中,具有域
    a
    和形式
    的值⟨x、 f x⟩

    作为旁注,在我自己进行范畴理论的形式化工作时,我明确地将函数的两个定义作为
    V
    上的谓词

    摘要

    Isabelle/HOL(2021)中定义函数f的正确方法是什么 从特定集合a到另一集合B

    为了直接回答你的问题,我的观点是,没有一种“正确的方法”来定义从一个特定集合a到另一个集合B的函数。然而,你可以探索许多选项:每个选项都有其特定的优缺点

    参考资料

  • Takeuti G,Zaring WM。公理集合论导论。海德堡:斯普林格·维拉格;1971年
  • 戈德布拉特·R·拓扑:逻辑的范畴分析。米内奥拉:多佛出版物;2013年
  • Wenzel M.《伊莎贝尔/Isar参考手册》。2019年