Реализация математических теорем

Это общий вопрос проектирования по реализации математических теорем. Я пытаюсь реализовать некоторые математические теоремы, из дифференциальной геометрии, в языке программирования (неважно, какой; для простоты я использую язык Python, но это не должно влиять на общие идеи.). Я могу описать вопрос лучше на примере.

Теорема. Любая прямая на поверхности класса r>= 2 является асимптотической кривой.

Как будет реализована такая теорема. Очевидно, что функция нуждается в строке в качестве аргумента и поверхности в качестве аргумента.

def theorem (line, surface): pass

Должна ли функция возвращать только истину, ложь или неразрешимость? Или функция должна возвращать "асимптотику". Если мы назовем функцию "is-асимптотической", то она должна вернуть true, false или неразрешимую.

Первое, что функция должна проверить, это прямая ли линия. Давайте не будем вдаваться в подробности. Затем следует рассчитать класс поверхности.

def theorem (line, surface): 
  if not straight(line, surface):
    return "undecidable"
  else:
    if class-of(surface) >= 2:
      ???

Вышеуказанный подход заставляет меня возвращать истину / ложь. С другой стороны, если я реализую его как метод для класса с именем line, который запрашивает все свойства данной строки, он должен вернуть список свойств, включая "асимптотический".

Наконец, то, что я сделал выше, - это запрос свойства данной строки, нашего аргумента. Функция ничего не говорит обо всех остальных прямых.

Как бы вы рассмотрели весь проект реализации теорем?

Заранее спасибо.

PS. Чтобы дополнительно уточнить вопрос в содержании языка программирования, приведенный выше вопрос перефразируется следующим образом. Предполагая, что у меня есть экземпляр "линия" объекта "Линия". Я спрашиваю экземпляр, если он асимптотический, как в

is_asymptotic(line) # returns true/false/undecidable

или я спрашиваю его свойства и получаю список свойств, который включает асимптотическое свойство, как в

line_properties(line) # returns [..., "asymptotic", ...]

или при создании экземпляра я устанавливаю атрибут асимптотически, после проверки, является ли он прямым, как в

line = Line(surface) # sets line.asymptotic = True

1 ответ

Используйте пакет 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

быть полезным.

удачи!

Другие вопросы по тегам