Advertisement
gt22

Untitled

Jan 5th, 2020
616
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. T[X'] = T[X':] | T[:X']
  2.  
  3. S[T[A' : X'], T[B' : Y'], T[C' : Z']] -- срез тензора, на самом деле тензор T[A', X', B' : X', Y', Z']. Используется чтобы передать часть размерностей в операции. Компонента T[B' : Y'] - "рабочий тензор"
  4.  
  5.  
  6. _^ :: T[X'] -> T[Y'] -> T[X' : Y']
  7. ^_ :: T[X'] -> T[Y'] -> T[Y' : X']
  8.  
  9. _ :: T[X' : _] -> T[X']
  10. ^ :: T[_ : Y'] -> T[Y']
  11.  
  12.  
  13. @ :: T[A' : B'] -> T[X' : Y'] -> T[A', X' : B', Y'] --тензорное произведение
  14. @ :: T[A' : B'] -> T[0] -> T[A' : B'] --специализация, умножение на скаляр отличается по тому как оно работает
  15. @ :: T[0] -> T[A' : B'] -> T[A' : B']
  16.  
  17.  
  18. slice :: (Ind i) => (i a) -> (i b) -> T[A'{a}, X'{b-a}, B'] -> S[T[A'], T[X'], T[B']]
  19.  
  20. unslice :: S[T[A' : X'], T[B' : Y'], T[C' : Z']] -> T[A', B', C' : X', Y', Z'] --выводится, +дополнительно выводятся специализации
  21. unslice S(h, x, t) = h @ x @ t
  22.  
  23. --декларации должны автовывестись из реализаций
  24. slice_ a b t = ^_ (^ t) =<< (slice a b (_ t))
  25. slice^ a b t - _^ (_ t) =<< (slice a b (^ t))
  26.  
  27. --ожидаемые декларации
  28. slice_ :: (Ind i) => (i a) -> (i b) -> T[A'{a}, X'{b-a}, B' : U'] -> S[T[A'], T[X' : U'], T[B']]
  29. slice^ :: (Ind i) => (i a) -> (i b) -> T[L' : A'{a}, X'{b-a}, B'] -> S[T[A'], T[L' : X'], T[B']]
  30.  
  31. take :: (Ind i) => (i a) -> T[A'{a}, X, B'] -> S[T[A'], T[X], B'] --выводится
  32. take a t = slice a (a+1) t
  33.  
  34. take_ a t = slice_ a (a+1) t
  35. take^ a t = slice^ a (a+1) t
  36.  
  37. transpose :: T[A, B] -> T[B, A]
  38.  
  39. contract :: T[X : X] -> T[1]
  40.  
  41. lower :: (Metric T) => T[: X] -> T[X :]
  42. raise :: (Metric T) => T[X :] -> T[: X]
  43.  
  44. --пример использования (страшный псевдо-синтаксис)
  45. a :: T[5, 3, 2 : 6, 7, 3]
  46. unslice (contract =<< take_ 2 =<< take^ 3 a) :: T[5, 2 : 6, 7]
  47.  
  48. по порядку:
  49. a :: T[5, 3, 2 : 6, 7, 3]
  50. take^ 3 a :: S[T[: 6, 7], T[5, 3, 2 : 3], T[]]
  51. take_ 2 =<< take^ 3 a :: S[T[5 : 6, 7], T[3 : 3], T[2 :]]
  52. contract =<< take_ 2 =<< take^ 3 a :: S[T[5 : 6, 7], T[1], T[2 :]]
  53. unslice (contract =<< take_ 2 =<< take^ 3 a :: S[T[5 : 6, 7], T[1], T[2 :]]) :: T[5, 2 : 6, 7]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement