我们有2种语言(非正式地)在语义上等同但在语法上不同。一个是xml,另一个是基于脚本。我怎样才能正式证明两种语言实际上是等价的。脚本方法只是一种编写相同程序的便捷方式,在xml中写入会很繁琐。
由于 科坦
答案 0 :(得分:5)
编写一个程序,以一种语言作为输入程序,并以其他语言输出等效程序。
然后证明您刚刚编写的程序对于所有可能的输入是正确的。
这样做的一个好方法是通过某种归纳。程序通常具有树形结构;如果你能证明每个可能的叶子的翻译是正确的,并且你可以证明它对于两个正确树木的每一种可能组合是正确的,那么通过归纳,你已经证明了整个事物。
答案 1 :(得分:2)
您需要定义的第一件事是“等效”
的含义如果你的意思是'你可以用一个人做什么,你可以做另一个',那么一种方法就是证明两种语言都是Turing complete如果你能做到这一点那么你就会证明这两种语言可以执行相同类型的计算(以及任何其他图灵完整语言或设备)
如果你的意思是'他们有相同的结构 - 只是指定元素的不同方式'那么你需要抽象语言来表明他们确实共享相同的结构。 Backus Naur Form是这样做的一种方式。如果两种语言在BNF中具有相同的结构,只有终端不同,那么它们实际上只是同一抽象语法的两种不同表示。
“等效”显然还有其他可能的含义,因此你可以做其他事情。
你还需要通过'证明'来定义你的意思 - 你是指一个严格的数学证明还是'让我的同事相信脚本语言足够好'?如果你的意思是第一个,那将是艰难的。如果你的意思是第二个,你可以定义一个语言需要能够做的规范,并演示每种语言的概念证明,以证明它们符合规范。
答案 2 :(得分:0)
如果它们是通用编程语言,请在每个语言中编写图灵机模拟器。如果他们不是,你就会遇到更多问题。你有多确定这些语言是等价的?这是一种探索性的事情,还是只是想证明你已经确定的事情?
一般来说,不可能证明语言之间的等价性。如果它们是独立编写的,那么最好的办法就是证明基于脚本的语言可以完成您需要完成的所有工作,而不是试图证明它与基于XML的语言等效。
答案 3 :(得分:0)
你可以在这里获得一些灵感: http://compcert.inria.fr/doc/index.html