Essendo una persona con un background in informatica, sono rimasto molto confuso la prima volta che ho incontrato persone di matematica che insistevano sul fatto che un tensore non fosse una matrice. Perché entrambi sono chiaramente array multidimensionali. Ma poi ho realizzato... i matematici usano sempre linguaggi fortemente tipizzati nella loro testa!
Per un informatico, struttura, funzioni, interfaccia e vincoli sono tutti chiaramente separati e interconvertibili. Un tensore è una matrice che stai trattando come un tensore. Puoi mescolarli, una classe è un insieme di tutti e quattro, ma non è obbligatorio.
Quando ti dicono che i vettori non sono liste di numeri, è perché si sono addestrati a essere controllori di tipo per linguaggi logici fortemente tipizzati e a valutazione anticipata. I matematici eseguono qualcosa che è fondamentalmente un controllore di tipo magico appreso nella loro testa.
Le persone nel CS eseguono principalmente Lisp e/o C mentalmente, a seconda di se vogliamo essere l'interprete o il computer. Se eseguiamo un simulatore mentale fortemente tipizzato, è posizionato sopra. Anche Haskell separa le dichiarazioni di tipo dall'implementazione.
Ma la matematica è fatta solo con le firme di tipo! Fanno tutto con macro fortemente tipizzate! È come il caso limite dei tipi di Hindley–Milner, se si facesse un'espansione speculativa per trovare compressioni migliori. Questo consente ai matematici di fare una compilazione ottimizzata dei programmi, in modo astratto.
Ora che sto facendo più matematica reale, vedo il potere di questo approccio. Ma penso che il potere dell'approccio CS sia sottovalutato dalle persone di matematica. Perché la saggezza della CS è che un tensore è una matrice, ma una matrice non è un tensore. Le variabili sono qualunque cosa tu possa convertirle.
I matematici sanno cosa sono i cast, ma li chiamano con nomi strani come “morfismi”. E ammetteranno, sotto costrizione, che se hai il cast appropriato puoi usare un vettore come rotazione della dimensione corrispondente.
Ma diranno, non stai usando il vettore come una rotazione, hai derivato un bivettore sotto bla bla bla. Questo è vero, se sei un super tipo di controllo HM di prolog. Non è vero se sei un compilatore, un interprete o un computer.
Comunque, continuo a litigare con le persone di matematica su questo perché è così ridicolo negare che il duck-typing funzioni, ma hanno ragione, richiede comunque un'unificazione dei tipi.
@St_Rev E no, un tensore è un sottotipo di una matrice, non il contrario. La matrice è l'oggetto più generale, i tensori devono rispettare più vincoli.
@SokobanHero Quindi, poiché una mappa multilineare può sempre essere realizzata come una matrice (ok, tecnicamente un ipermatrice, perché apparentemente la gente usa matrice per riferirsi solo a un array n-dimensionale di rango 2) e viceversa in uno spazio, penso sia altrettanto ragionevole andare in entrambe le direzioni.
27,26K