【问题标题】:Turing machine: such that for every word w in {a,b}*, it will change every a to b and b to a, and then halt图灵机:对于 {a,b}* 中的每个单词 w,它将每个 a 更改为 b,b 更改为 a,然后停止
【发布时间】:2019-06-02 03:46:18
【问题描述】:

我需要正式(通过转换函数)描述图灵机,使得 {a,b}* 中的每个单词 w 都会将每个 a 更改为 b,并将每个 b 更改为 a。

我已经尝试过了,这是我的解决方案:

(s,a) -> (s,b,R)

(s,b) -> (s,a,R)

(s,空白) -> (n,空白)

n 是停止状态,s 是开始状态

这行得通吗? 谢谢!

【问题讨论】:

    标签: turing-machines computation


    【解决方案1】:

    这类问题的常用方法是“测试”或“证明”。在这里,我将展示如何轻松测试您的方法是否成功:

    GHCi, version 8.2.2: http://www.haskell.org/ghc/  
    :? for help
    Prelude> :{
    Prelude| cnv ('a':xs) = 'b':cnv xs
    Prelude| cnv ('b':xs) = 'a':cnv xs
    Prelude| cnv [] = []
    Prelude| :}
    Prelude> cnv "abaaab"
    "babbba"
    Prelude>
    

    至少在我看来,这个 haskell 代码看起来与您的转换规范足够相似。 cnv 函数定义的第三行中的[] case 代表“空列表”,即它是您的暂停状态。对于这个函数的递归,它是递归停止的基本情况。

    至于如何正式证明你的自动机是否结束,我还不足以帮助你解决这个问题。其他人可能会。

    【讨论】:

      【解决方案2】:

      您的 TM 工作正常。如果您对 TM 的表示法感到满意,那么您的表示法几乎是显而易见的,因此形式证明似乎有点过头了,但如果您真的坚持通过数学归纳法对输入长度进行证明,那就很简单了。

      声明:给定的 TM 执行所描述的功能。

      证明:证明是对最初记录在 TM 磁带上的输入字符串长度 m 的强数学归纳法。

      基本情况:如果输入磁带包含空字符串,则 TM 执行转换 (s,blank) -> (n,blank) 并因此停止而不更改任何磁带符号。因为留在磁带上的结果字符串没有改变,所以它是空字符串。空字符串等同于用 b 替换所有 a 后的空字符串,反之亦然;字符串中没有任何符号与此相矛盾。

      归纳假设:假设 TM 正确处理长度为 k 且包括 k 的所有输入字符串。

      归纳步骤:我们必须证明 TM 正确处理所有长度等于 k ​​+ 1 的输入字符串。请注意,字母表 {a,b} 上长度为 k + 1 的任何输入字符串都等于某个输入字符串长度 k,附加符号 a 或符号 b。我们已经发现 TM 正确处理了长度为 k 的字符串;也就是说,它将所有 a 翻转为 b,反之亦然。此外,因为 TM 必须停止,所以它执行的最后一次转换是 (s,blank) -> (n,blank)。如果此时磁带上没有看到空白,而是看到了 a 或 b,我们将处于当前情况:也就是说,TM 将通过处理长度为 k 的前缀使其到达相同的位置我们的长度为 k + 1 的字符串。不是执行转换 (s,blank) -> (n,blank) 而是强制执行转换之一 (s,a) -> (s,b,R) 或(s,b) -> (s,a,R),取决于第 (k + 1) 个符号是 a 还是 b。这些转换将正确翻转位置 k + 1 处的符号,留下一个 k + 1 字符串,所有符号都正确交换。下一个转换将看到空白并转换到暂停状态。证明到此结束。

      【讨论】:

        猜你喜欢
        • 2014-03-29
        • 2010-12-08
        • 2021-10-06
        • 2011-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-28
        • 1970-01-01
        相关资源
        最近更新 更多