Javascript 如何用过程语言或面向对象语言实现“forall”(数学)
我试图理解如何用过程语言或OO语言(如Ruby或JavaScript)为所有实现Javascript 如何用过程语言或面向对象语言实现“forall”(数学),javascript,ruby,proof,formal-methods,forall,Javascript,Ruby,Proof,Formal Methods,Forall,我试图理解如何用过程语言或OO语言(如Ruby或JavaScript)为所有实现。对于(这是Coq): 这有各种各样的错误。它本质上说,“对于你用点p1和p2创建的每一个公理,它必须满足在一条线上的属性,等等……”这并不是我想要它做的。我希望它能实现定义一个实际公理的数学目标 想知道如何在Ruby或JavaScript这样的语言中实现这一点,如果不能直接实现,则尽可能接近。即使它只是一个DSL或一个定义一些数据的对象,知道如何做也会很有帮助 让我明白的第一点是,attr:p1和attr定义似乎适
。对于(这是Coq):
这有各种各样的错误。它本质上说,“对于你用点p1和p2创建的每一个公理,它必须满足在一条线上的属性,等等……”这并不是我想要它做的。我希望它能实现定义一个实际公理的数学目标
想知道如何在Ruby或JavaScript这样的语言中实现这一点,如果不能直接实现,则尽可能接近。即使它只是一个DSL或一个定义一些数据的对象,知道如何做也会很有帮助
让我明白的第一点是,attr:p1
和attr定义似乎适用于每个实例。也就是说,它似乎对所有的都有所说明,但我无法准确指出
也许更像这样的东西更接近:
class MainAxiom
# forall p1 and p2
attr :p1 # forall p1
attr :p2 # forall p2
attr :line (p1, p2) -> Line.new(p1, p2)
check_lies_in :p1, :line
check_lies_in :p2, :line
end
我只想在过程性的/OO语言中,对所有的
定义有一点接近。如果允许我在Smalltalk中推理,其中块是类BlockClose
的对象,我会假设您将要量化的属性表示为块p
为了简单起见,我们假设该属性依赖于一个参数x
。然后p(x)
将对应于Smalltalk表达式
p value: x
它使用参数x
计算块p
通过这种方式,您可以在类BlockClosure
中实现Smalltalk方法forAll:
,如下所示:
forAll: aCollection
aCollection do: [:x | (self value: x) ifFalse: [^false]].
^true
它检查接收方块表示的属性p
对于aCollection
(您的宇宙)中的所有元素的计算结果是否为true
如果您的宇宙没有改变(问题上下文中的常见情况),并且属性发生了什么变化,那么您可以定义类宇宙
,它将在其实例变量内容
中保存元素集合。然后,您可以在Universe
forAll: aProperty
^aProperty forAll: contents
其中内部forAll:
消息是在BlockClosure
中实现的,您从哪里获得行
类?我只是在编写伪代码。很高兴看到您计划如何使用它。现在我可以看出,初始化器中这一行的简单实例化是它存在的一种证明。
forAll: aCollection
aCollection do: [:x | (self value: x) ifFalse: [^false]].
^true
forAll: aProperty
^aProperty forAll: contents