Math 归纳规范:自上而下vs自下而上vs推理规则?

Math 归纳规范:自上而下vs自下而上vs推理规则?,math,recursion,logic,theory,induction,Math,Recursion,Logic,Theory,Induction,在这件事上请容忍我。我首先要描述书中的一个例子,然后在最后问我的问题 根据关于编程语言范例的文本: 归纳规格说明是指定一组 价值观为了说明这个方法,我们用它来描述一个特定的例子 自然数N={0,1,2,…}的子集S 自上而下定义: 自然数n在S中当且仅当 n=0,或 n−3.∈ 美国 我们知道0∈ 因此,美国3∈ S、 自(3)− 3) =0和 0∈ 美国也一样∈ S、 自(6)−3) =3和3∈ 继续这样下去,我们 可以得出结论,3的所有倍数都是S 其他自然数呢?是1∈ s我们知道1!=0,因

在这件事上请容忍我。我首先要描述书中的一个例子,然后在最后问我的问题

根据关于编程语言范例的文本:

归纳规格说明是指定一组 价值观为了说明这个方法,我们用它来描述一个特定的例子 自然数N={0,1,2,…}的子集S

自上而下定义:

自然数n在S中当且仅当

  • n=0,或
  • n−3.∈ 美国
  • 我们知道0∈ 因此,美国3∈ S、 自(3)− 3) =0和 0∈ 美国也一样∈ S、 自(6)−3) =3和3∈ 继续这样下去,我们 可以得出结论,3的所有倍数都是S

    其他自然数呢?是1∈ s我们知道1!=0,因此 第一个条件不满足。此外,(1)−3) = −2,这不是自然现象 数字,因此不是S的成员。因此,第二个条件 他不满意

    自底向上定义:

    将集合S定义为N和N中包含的最小集合 以下两个属性:

  • 0∈ S、 及
  • 如果n∈ S、 然后n+3∈ 美国
  • “最小集合”是指满足属性1和属性2的集合,即 满足属性1和2的任何其他集合的子集。很容易看出这一点 只有一个这样的集合:如果S1和S2都满足属性1和 2,两者都是最小的,然后是S1⊆ S2(因为S1最小)和S2⊆ S1 (由于S2最小),因此S1=S2。我们需要这个额外的条件,因为 否则,有许多集合满足其余两个条件

    推理规则:

    这只是定义的前一版本的简写符号。 每个条目都称为推理规则,或者只是一条规则;水平面 这条线被解读为“如果-那么”。这条线上方的部分被称为假设 或前因;线下的部分称为结论或结果。 当列出两个或多个假设时,它们通过 隐含的“和”


    现在问题来了

    • 可能最重要的问题是为什么我需要知道这些归纳定义,以及它们在现实世界中如何有用
    • 为什么谷歌几乎不返回归纳定义的结果
    • 如果自上而下、自下而上和推理规则基本上显示相同的东西,为什么我们需要三种方法来编写相同的东西
    • 为什么我很难找到比这本书的例子更复杂的问题的归纳定义,比如下面的例子
    我想找到下面两个问题的自上而下、自下而上和推断定义。你不必给我答案,但我想知道如何推导归纳定义。我从哪里开始?对于这类问题,是否有系统的解决方法(处方)

    1. {2n+3m +1 | n,m ∈ N}
    2. {(n, 2n+1) | n ∈ N}
    

    你在这里问了很多问题,希望这个回答能回答所有问题。如果你有什么需要澄清的,请告诉我

    你的第一个问题-为什么我们需要归纳定义这是最容易回答的问题。在计算机科学中,大量的结构是归纳式定义的。例如,您的简单链表具有归纳定义

    • 空列表是一个链接列表
    • 后跟链表的单个节点是链表
    或二叉树:

    • 空树是一个二叉树
    • 具有两个子节点的二叉树节点是二叉树
    或正则表达式:

    • ∅ 是一个正则表达式
    • ε是一个正则表达式
    • a是每个字符a的正则表达式
    • 如果R1和R2是正则表达式,则R1 | R2是正则表达式
    • 如果R1和R2是正则表达式,则R1 R2是正则表达式
    • 如果R是正则表达式,则R*是正则表达式
    • 如果R是正则表达式,(R)是正则表达式
    这些定义有许多好的特性。首先,它们服从递归算法。如果您想访问二叉树中的每个节点,我们可以使用二叉树的归纳定义来构建一个简单的访问算法:

    • 要访问空树,什么也不做
    • 要访问由一个节点和两个子树组成的树,请执行以下操作:
      • 访问节点
      • 访问左子树
      • 访问正确的子树
    类似地,如果我们想要操纵正则表达式的结构——例如,可能是为了为它构建一个匹配的自动机——那么归纳定义允许我们逐段构建正则表达式的自动机

    归纳定义也可用于正式证明结构的性质。例如,以下是AVL树的正式定义:

    • 单个节点是顺序为0的AVL树
    • 一个节点有一个或两个子节点是0阶AVL树,则该节点是1阶AVL树
    • 一个节点有两个子节点,它们是n-1阶AVL树,或者一个子节点是n-1阶AVL树,另一个子节点是n-3阶AVL树,它们是n阶AVL树
    使用这个定义,可以正式证明AVL树是平衡的

    我们同样可以使用这些类型的定义来证明编程语言的属性。大多数语言都有某种归纳定义,因此通过证明程序的每个部分都保留了一些信息,我们可以从头开始建立正确性证明

    你的第二个问题——为什么谷歌没有提供任何归纳定义的例子我认为这是因为它把它解释为“定义归纳”,而不是一个术语本身。
    1. {2n+3m +1 | n,m ∈ N}
    2. {(n, 2n+1) | n ∈ N}
    
    type List a
      = Empty
      | Cons a (List a)
    
    length : List a -> Int
    length list =
      case list of
        Empty ->
          0
    
        Cons _ xs ->
          1 + length xs