En tant que personne ayant un background en informatique, j'étais très confus la première fois que j'ai rencontré des gens en mathématiques insistant sur le fait qu'un tenseur n'était pas une matrice. Parce qu'ils sont tous les deux clairement des tableaux multidimensionnels. Mais ensuite, j'ai réalisé... les mathématiciens utilisent toujours des langages fortement typés dans leur tête !
Pour un informaticien, la structure, les fonctions, l'interface et les contraintes sont toutes clairement séparées et interconvertibles. Un tenseur est une matrice que vous traitez comme un tenseur. Vous pouvez les mélanger, une classe est un ensemble des quatre, mais ce n'est pas obligatoire.
Quand ils vous disent que les vecteurs ne sont pas des listes de nombres, c'est parce qu'ils se sont entraînés à être des vérificateurs de types pour des langages logiques fortement typés à évaluation immédiate. Les mathématiciens exécutent quelque chose qui est essentiellement un vérificateur de types magique appris dans leur tête.
Les personnes en informatique exécutent principalement du lisp et/ou du C mentalement, selon que nous voulons être l'interpréteur ou l'ordinateur. Si nous exécutons un simulateur mental fortement typé, il est superposé. Même Haskell sépare les déclarations de type de l'implémentation.
Mais les mathématiques ne se font qu'avec des signatures de type ! Ils font tout avec des macros fortement typées ! C'est comme le cas limite des types Hindley–Milner, s'ils faisaient une expansion spéculative pour trouver de meilleures compressions. Ce qui permet aux mathématiciens de faire une compilation optimisée de programmes, de manière abstraite.
Maintenant que je fais plus de mathématiques réelles, je vois la puissance de cette approche. Mais je pense que la puissance de l'approche CS est sous-estimée par les gens des mathématiques. Parce que la sagesse de l'informatique est qu'un tenseur est une matrice, mais une matrice n'est pas un tenseur. Les variables sont tout ce que vous pouvez leur attribuer.
Les mathématiciens connaissent les types de conversion, mais ils les appellent des noms étranges comme « morphismes ». Et ils admettront, sous la contrainte, que si vous avez le type de conversion approprié, vous pouvez utiliser un vecteur comme une rotation de dimension correspondante.
Mais ils diront que vous n'utilisez pas le vecteur comme une rotation, vous avez dérivé un bivecteur sous blah blah blah. C'est vrai, si vous êtes un super vérificateur de type HM en prolog. Ce n'est pas vrai si vous êtes un compilateur, un interpréteur ou un ordinateur.
Quoi qu'il en soit, je me dispute toujours avec des gens de mathématiques à ce sujet parce que c'est tellement ridicule de nier que le duck-typing fonctionne, mais ils ont raison, cela nécessite toujours une unification des types.
@St_Rev Et non, un tenseur est un sous-type d'une matrice, et non l'inverse. La matrice est l'objet plus général, les tenseurs doivent respecter plus de contraintes.
@SokobanHero Donc, puisque une application multilinéaire peut toujours être réalisée sous forme de matrice (ok techniquement un hypermatrice, car les gens utilisent apparemment le terme matrice pour ne désigner que les tableaux n-dimensionnels de rang 2) et vice versa dans un certain espace, je pense qu'il est tout aussi raisonnable d'aller dans les deux sens.
30,26K