这是实现数学定理的一般设计问题。 我试图用编程语言中的微分几何来实现一些数学定理(无关紧要;为简单起见,我使用python语言,但这不应影响一般的想法。)。我可以用一个例子更好地描述这个问题。
定理: r类> 2表面上的任何直线都是渐近曲线。
如何实施这样的定理。显然,函数需要一行作为参数,表面作为参数。
def theorem (line, surface): pass
该函数应该返回true,false还是不可判定?或者函数应该返回“渐近”。如果我们将函数命名为“is-asymptotic”,那么它应该返回true,false或undecidable。
该函数应检查的第一件事是线是否笔直。我们不详细说明。然后,它应该计算表面的类
def theorem (line, surface):
if not straight(line, surface):
return "undecidable"
else:
if class-of(surface) >= 2:
???
上述方法促使我返回true / false。另一方面,如果我将它作为一个方法实现为一个名为line的类,它要求给定行的所有属性,那么它应该返回一个属性列表,包括“渐近”。
最后,我上面所做的是要求一个给定线的属性,我们的论点。该函数没有说明所有其他直线。
您如何解决定理的整个实现设计?
提前谢谢。
PS。为了进一步阐明编程语言内容中的问题,上述问题被重新描述如下。假设我有一个对象“Line”的实例“line”。我是否询问实例是否渐近
is_asymptotic(line) # returns true/false/undecidable
或者我是否要求其属性并获取包含渐近属性的属性列表,如
line_properties(line) # returns [..., "asymptotic", ...]
或者在创建实例时我将属性设置为渐近,检查它是否是直的,如
line = Line(surface) # sets line.asymptotic = True
答案 0 :(得分:0)
使用sympy包。
In [153]: from sympy import *
In [154]: x = symbols('x')
In [155]: y = symbols('y')
In [156]: z = symbols('z')
In [157]: p = (x+y)**2
In [158]: p
Out[158]: (x + y)**2
In [159]: q = x**2 + 2*x*y + y**2
In [160]: p == q
Out[160]: False
In [161]: p.expand() == q
Out[161]: True
你很可能会找到
https://github.com/sympy/sympy/wiki/Geometry-Module
有帮助。
祝你好运!