**** New globals: {QT:i8[*,*]?, QTs:i8[*,*]?*, R:{A:i4}, T:i8[*,*], Ts:i8[*,*]*, U:i4[*,*], V:s[*,*], W:u4[*,*], i4:i4}

> T if true else U
T if true else U : i8[*,*]
Binder : If(true, T, Tensor.ForEachLazy(@1: U, Num<i8>(@1)))
Reducer: T
###
> U if true else W
U if true else W : i8[*,*]
Binder : If(true, Tensor.ForEachLazy(@1: U, Num<i8>(@1)), Tensor.ForEachLazy(@2: W, Num<i8>(@2)))
Reducer: Tensor.ForEachLazy(@1: U, Num<i8>(@1))
###
> U if true else V
U if true else V : g[*,*]
*** Error: (2,4) Node: U if true else V, Message: The given types are incompatible: 'i4[*,*]' and 's[*,*]'
Binder : If(true, Tensor.ForEachLazy(@1: U, Box<g>(@1)), Tensor.ForEachLazy(@2: V, Ref<g>(@2)))
Reducer: Tensor.ForEachLazy(@1: U, Box<g>(@1))
###
> T + T
T + T : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: T, Add(@1, @2))
Reducer: Tensor.ForEach(@1: T, Add(@1, @1))
###
> T + Ts
T + Ts : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: T, @3: *1, Add(@2, @3)))
###
> T + QT
T + QT : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: T, @3: ?1, Add(@2, @3)))
###
> T + QTs
T + QTs : i8[*,*]?*
Binder : ForEach(*1: QTs, Guard(?2: *1, Tensor.ForEach(@3: T, @4: ?2, Add(@3, @4))))
###
> T + U
T + U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, Num<i8>(@2)))
###
> T + V
T + V : i8[*,*]
*** Error: (4,5) Node: V, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : Tensor.ForEach(@1: T, @2: V, Add(@1, Error(ErrBadType_Src_Dst)))
###
> T + R
T + R : i8[*,*]
*** Error: (4,5) Node: R, Message: Invalid operand type: cannot convert type '{A:i4}' to 'i8'
Binder : Tensor.ForEach(@1: T, Add(@1, Error(ErrBadType_Src_Dst)))
###
> T + i4
T + i4 : i8[*,*]
Binder : Tensor.ForEach(@1: T, Add(@1, Num<i8>(i4)))
###
> Ts + T
Ts + T : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: T, Add(@2, @3)))
###
> Ts + Ts
Ts + Ts : i8[*,*]*
Binder : ForEach(*1: Ts, *2: Ts, Tensor.ForEach(@3: *1, @4: *2, Add(@3, @4)))
Reducer: ForEach(*1: Ts, Tensor.ForEach(@2: *1, Add(@2, @2)))
###
> Ts + QT
Ts + QT : i8[*,*]?*
Binder : ForEach(*1: Ts, Guard(?2: QT, Tensor.ForEach(@3: *1, @4: ?2, Add(@3, @4))))
###
> Ts + QTs
Ts + QTs : i8[*,*]?*
Binder : ForEach(*1: Ts, *2: QTs, Guard(?3: *2, Tensor.ForEach(@4: *1, @5: ?3, Add(@4, @5))))
###
> Ts + U
Ts + U : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: U, Add(@2, Num<i8>(@3))))
###
> Ts + V
Ts + V : i8[*,*]*
*** Error: (5,6) Node: V, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: V, Add(@2, Error(ErrBadType_Src_Dst))))
###
> Ts + R
Ts + R : i8[*,*]*
*** Error: (5,6) Node: R, Message: Invalid operand type: cannot convert type '{A:i4}' to 'i8'
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, Add(@2, Error(ErrBadType_Src_Dst))))
###
> Ts + i4
Ts + i4 : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, Add(@2, Num<i8>(i4))))
###
> U + W
U + W : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: W, Add(Num<i8>(@1), Num<i8>(@2)))
###
> QT + T
QT + T : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: T, Add(@2, @3)))
###
> QT + Ts
QT + Ts : i8[*,*]?*
Binder : ForEach(*1: Ts, Guard(?2: QT, Tensor.ForEach(@3: ?2, @4: *1, Add(@3, @4))))
###
> QT + QT
QT + QT : i8[*,*]?
Binder : Guard(?1: QT, ?2: QT, Tensor.ForEach(@3: ?1, @4: ?2, Add(@3, @4)))
Reducer: Guard(?1: QT, Tensor.ForEach(@2: ?1, Add(@2, @2)))
###
> QT + QTs
QT + QTs : i8[*,*]?*
Binder : ForEach(*1: QTs, Guard(?2: QT, ?3: *1, Tensor.ForEach(@4: ?2, @5: ?3, Add(@4, @5))))
###
> QT + U
QT + U : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: U, Add(@2, Num<i8>(@3))))
###
> QT + V
QT + V : i8[*,*]?
*** Error: (5,6) Node: V, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: V, Add(@2, Error(ErrBadType_Src_Dst))))
###
> QT + R
QT + R : i8[*,*]?
*** Error: (5,6) Node: R, Message: Invalid operand type: cannot convert type '{A:i4}' to 'i8'
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, Add(@2, Error(ErrBadType_Src_Dst))))
###
> QT + i4
QT + i4 : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, Add(@2, Num<i8>(i4))))
###
> T - T
T - T : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: T, Add(@1, [-] @2))
Reducer: Tensor.ForEach(@1: T, Add(@1, [-] @1))
###
> T - Ts
T - Ts : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: T, @3: *1, Add(@2, [-] @3)))
###
> T - QT
T - QT : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: T, @3: ?1, Add(@2, [-] @3)))
###
> T - QTs
T - QTs : i8[*,*]?*
Binder : ForEach(*1: QTs, Guard(?2: *1, Tensor.ForEach(@3: T, @4: ?2, Add(@3, [-] @4))))
###
> T - U
T - U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, [-] Num<i8>(@2)))
###
> T - V
T - V : i8[*,*]
*** Error: (4,5) Node: V, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : Tensor.ForEach(@1: T, @2: V, Add(@1, [-] Error(ErrBadType_Src_Dst)))
###
> T - R
T - R : i8[*,*]
*** Error: (4,5) Node: R, Message: Invalid operand type: cannot convert type '{A:i4}' to 'i8'
Binder : Tensor.ForEach(@1: T, Add(@1, [-] Error(ErrBadType_Src_Dst)))
###
> T - i4
T - i4 : i8[*,*]
Binder : Tensor.ForEach(@1: T, Add(@1, [-] Num<i8>(i4)))
###
> Ts - T
Ts - T : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: T, Add(@2, [-] @3)))
###
> Ts - Ts
Ts - Ts : i8[*,*]*
Binder : ForEach(*1: Ts, *2: Ts, Tensor.ForEach(@3: *1, @4: *2, Add(@3, [-] @4)))
Reducer: ForEach(*1: Ts, Tensor.ForEach(@2: *1, Add(@2, [-] @2)))
###
> Ts - QT
Ts - QT : i8[*,*]?*
Binder : ForEach(*1: Ts, Guard(?2: QT, Tensor.ForEach(@3: *1, @4: ?2, Add(@3, [-] @4))))
###
> Ts - QTs
Ts - QTs : i8[*,*]?*
Binder : ForEach(*1: Ts, *2: QTs, Guard(?3: *2, Tensor.ForEach(@4: *1, @5: ?3, Add(@4, [-] @5))))
###
> Ts - U
Ts - U : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: U, Add(@2, [-] Num<i8>(@3))))
###
> Ts - V
Ts - V : i8[*,*]*
*** Error: (5,6) Node: V, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: V, Add(@2, [-] Error(ErrBadType_Src_Dst))))
###
> Ts - R
Ts - R : i8[*,*]*
*** Error: (5,6) Node: R, Message: Invalid operand type: cannot convert type '{A:i4}' to 'i8'
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, Add(@2, [-] Error(ErrBadType_Src_Dst))))
###
> Ts - i4
Ts - i4 : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, Add(@2, [-] Num<i8>(i4))))
###
> QT - T
QT - T : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: T, Add(@2, [-] @3)))
###
> QT - Ts
QT - Ts : i8[*,*]?*
Binder : ForEach(*1: Ts, Guard(?2: QT, Tensor.ForEach(@3: ?2, @4: *1, Add(@3, [-] @4))))
###
> QT - QT
QT - QT : i8[*,*]?
Binder : Guard(?1: QT, ?2: QT, Tensor.ForEach(@3: ?1, @4: ?2, Add(@3, [-] @4)))
Reducer: Guard(?1: QT, Tensor.ForEach(@2: ?1, Add(@2, [-] @2)))
###
> QT - QTs
QT - QTs : i8[*,*]?*
Binder : ForEach(*1: QTs, Guard(?2: QT, ?3: *1, Tensor.ForEach(@4: ?2, @5: ?3, Add(@4, [-] @5))))
###
> QT - U
QT - U : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: U, Add(@2, [-] Num<i8>(@3))))
###
> QT - V
QT - V : i8[*,*]?
*** Error: (5,6) Node: V, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: V, Add(@2, [-] Error(ErrBadType_Src_Dst))))
###
> QT - R
QT - R : i8[*,*]?
*** Error: (5,6) Node: R, Message: Invalid operand type: cannot convert type '{A:i4}' to 'i8'
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, Add(@2, [-] Error(ErrBadType_Src_Dst))))
###
> QT - i4
QT - i4 : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, Add(@2, [-] Num<i8>(i4))))
###
> T * T
T * T : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: T, Mul(@1, @2))
Reducer: Tensor.ForEach(@1: T, Mul(@1, @1))
###
> T * Ts
T * Ts : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: T, @3: *1, Mul(@2, @3)))
###
> T * QT
T * QT : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: T, @3: ?1, Mul(@2, @3)))
###
> T * QTs
T * QTs : i8[*,*]?*
Binder : ForEach(*1: QTs, Guard(?2: *1, Tensor.ForEach(@3: T, @4: ?2, Mul(@3, @4))))
###
> T * U
T * U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(@1, Num<i8>(@2)))
###
> T * V
T * V : i8[*,*]
*** Error: (4,5) Node: V, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : Tensor.ForEach(@1: T, @2: V, Mul(@1, Error(ErrBadType_Src_Dst)))
###
> T * R
T * R : i8[*,*]
*** Error: (4,5) Node: R, Message: Invalid operand type: cannot convert type '{A:i4}' to 'i8'
Binder : Tensor.ForEach(@1: T, Mul(@1, Error(ErrBadType_Src_Dst)))
###
> T * i4
T * i4 : i8[*,*]
Binder : Tensor.ForEach(@1: T, Mul(@1, Num<i8>(i4)))
###
> Ts * T
Ts * T : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: T, Mul(@2, @3)))
###
> Ts * Ts
Ts * Ts : i8[*,*]*
Binder : ForEach(*1: Ts, *2: Ts, Tensor.ForEach(@3: *1, @4: *2, Mul(@3, @4)))
Reducer: ForEach(*1: Ts, Tensor.ForEach(@2: *1, Mul(@2, @2)))
###
> Ts * QT
Ts * QT : i8[*,*]?*
Binder : ForEach(*1: Ts, Guard(?2: QT, Tensor.ForEach(@3: *1, @4: ?2, Mul(@3, @4))))
###
> Ts * QTs
Ts * QTs : i8[*,*]?*
Binder : ForEach(*1: Ts, *2: QTs, Guard(?3: *2, Tensor.ForEach(@4: *1, @5: ?3, Mul(@4, @5))))
###
> Ts * U
Ts * U : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: U, Mul(@2, Num<i8>(@3))))
###
> Ts * V
Ts * V : i8[*,*]*
*** Error: (5,6) Node: V, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: V, Mul(@2, Error(ErrBadType_Src_Dst))))
###
> Ts * R
Ts * R : i8[*,*]*
*** Error: (5,6) Node: R, Message: Invalid operand type: cannot convert type '{A:i4}' to 'i8'
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, Mul(@2, Error(ErrBadType_Src_Dst))))
###
> Ts * i4
Ts * i4 : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, Mul(@2, Num<i8>(i4))))
###
> QT * T
QT * T : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: T, Mul(@2, @3)))
###
> QT * Ts
QT * Ts : i8[*,*]?*
Binder : ForEach(*1: Ts, Guard(?2: QT, Tensor.ForEach(@3: ?2, @4: *1, Mul(@3, @4))))
###
> QT * QT
QT * QT : i8[*,*]?
Binder : Guard(?1: QT, ?2: QT, Tensor.ForEach(@3: ?1, @4: ?2, Mul(@3, @4)))
Reducer: Guard(?1: QT, Tensor.ForEach(@2: ?1, Mul(@2, @2)))
###
> QT * QTs
QT * QTs : i8[*,*]?*
Binder : ForEach(*1: QTs, Guard(?2: QT, ?3: *1, Tensor.ForEach(@4: ?2, @5: ?3, Mul(@4, @5))))
###
> QT * U
QT * U : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: U, Mul(@2, Num<i8>(@3))))
###
> QT * V
QT * V : i8[*,*]?
*** Error: (5,6) Node: V, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: V, Mul(@2, Error(ErrBadType_Src_Dst))))
###
> QT * R
QT * R : i8[*,*]?
*** Error: (5,6) Node: R, Message: Invalid operand type: cannot convert type '{A:i4}' to 'i8'
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, Mul(@2, Error(ErrBadType_Src_Dst))))
###
> QT * i4
QT * i4 : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, Mul(@2, Num<i8>(i4))))
###
> T min T
T min T : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: T, Min(@1, @2))
Reducer: Tensor.ForEach(@1: T, Min(@1, @1))
###
> T min Ts
T min Ts : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: T, @3: *1, Min(@2, @3)))
###
> T min QT
T min QT : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: T, @3: ?1, Min(@2, @3)))
###
> T min QTs
T min QTs : i8[*,*]?*
Binder : ForEach(*1: QTs, Guard(?2: *1, Tensor.ForEach(@3: T, @4: ?2, Min(@3, @4))))
###
> T min U
T min U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Min(@1, Num<i8>(@2)))
###
> T min V
T min V : i8[*,*]
*** Error: (2,5) Node: T min V, Message: The given types are not comparable: 'i8' and 's'
Binder : Tensor.ForEach(@1: T, @2: V, Error(ErrIncomparableTypes_Type_Type))
###
> T min R
T min R : i8[*,*]
*** Error: (6,7) Node: R, Message: Ordered comparison is not supported for items of type '{A:i4}'
Binder : Tensor.ForEach(@1: T, Error(ErrIncomparableType_Type))
###
> T min i4
T min i4 : i8[*,*]
Binder : Tensor.ForEach(@1: T, Min(@1, Num<i8>(i4)))
###
> Ts min T
Ts min T : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: T, Min(@2, @3)))
###
> Ts min Ts
Ts min Ts : i8[*,*]*
Binder : ForEach(*1: Ts, *2: Ts, Tensor.ForEach(@3: *1, @4: *2, Min(@3, @4)))
Reducer: ForEach(*1: Ts, Tensor.ForEach(@2: *1, Min(@2, @2)))
###
> Ts min QT
Ts min QT : i8[*,*]?*
Binder : ForEach(*1: Ts, Guard(?2: QT, Tensor.ForEach(@3: *1, @4: ?2, Min(@3, @4))))
###
> Ts min QTs
Ts min QTs : i8[*,*]?*
Binder : ForEach(*1: Ts, *2: QTs, Guard(?3: *2, Tensor.ForEach(@4: *1, @5: ?3, Min(@4, @5))))
###
> Ts min U
Ts min U : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: U, Min(@2, Num<i8>(@3))))
###
> Ts min V
Ts min V : i8[*,*]*
*** Error: (3,6) Node: Ts min V, Message: The given types are not comparable: 'i8' and 's'
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: V, Error(ErrIncomparableTypes_Type_Type)))
###
> Ts min R
Ts min R : i8[*,*]*
*** Error: (7,8) Node: R, Message: Ordered comparison is not supported for items of type '{A:i4}'
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, Error(ErrIncomparableType_Type)))
###
> Ts min i4
Ts min i4 : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, Min(@2, Num<i8>(i4))))
###
> QT min T
QT min T : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: T, Min(@2, @3)))
###
> QT min Ts
QT min Ts : i8[*,*]?*
Binder : ForEach(*1: Ts, Guard(?2: QT, Tensor.ForEach(@3: ?2, @4: *1, Min(@3, @4))))
###
> QT min QT
QT min QT : i8[*,*]?
Binder : Guard(?1: QT, ?2: QT, Tensor.ForEach(@3: ?1, @4: ?2, Min(@3, @4)))
Reducer: Guard(?1: QT, Tensor.ForEach(@2: ?1, Min(@2, @2)))
###
> QT min QTs
QT min QTs : i8[*,*]?*
Binder : ForEach(*1: QTs, Guard(?2: QT, ?3: *1, Tensor.ForEach(@4: ?2, @5: ?3, Min(@4, @5))))
###
> QT min U
QT min U : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: U, Min(@2, Num<i8>(@3))))
###
> QT min V
QT min V : i8[*,*]?
*** Error: (3,6) Node: QT min V, Message: The given types are not comparable: 'i8' and 's'
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: V, Error(ErrIncomparableTypes_Type_Type)))
###
> QT min R
QT min R : i8[*,*]?
*** Error: (7,8) Node: R, Message: Ordered comparison is not supported for items of type '{A:i4}'
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, Error(ErrIncomparableType_Type)))
###
> QT min i4
QT min i4 : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, Min(@2, Num<i8>(i4))))
###
> T max T
T max T : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: T, Max(@1, @2))
Reducer: Tensor.ForEach(@1: T, Max(@1, @1))
###
> T max Ts
T max Ts : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: T, @3: *1, Max(@2, @3)))
###
> T max QT
T max QT : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: T, @3: ?1, Max(@2, @3)))
###
> T max QTs
T max QTs : i8[*,*]?*
Binder : ForEach(*1: QTs, Guard(?2: *1, Tensor.ForEach(@3: T, @4: ?2, Max(@3, @4))))
###
> T max U
T max U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Max(@1, Num<i8>(@2)))
###
> T max V
T max V : i8[*,*]
*** Error: (2,5) Node: T max V, Message: The given types are not comparable: 'i8' and 's'
Binder : Tensor.ForEach(@1: T, @2: V, Error(ErrIncomparableTypes_Type_Type))
###
> T max R
T max R : i8[*,*]
*** Error: (6,7) Node: R, Message: Ordered comparison is not supported for items of type '{A:i4}'
Binder : Tensor.ForEach(@1: T, Error(ErrIncomparableType_Type))
###
> T max i4
T max i4 : i8[*,*]
Binder : Tensor.ForEach(@1: T, Max(@1, Num<i8>(i4)))
###
> Ts max T
Ts max T : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: T, Max(@2, @3)))
###
> Ts max Ts
Ts max Ts : i8[*,*]*
Binder : ForEach(*1: Ts, *2: Ts, Tensor.ForEach(@3: *1, @4: *2, Max(@3, @4)))
Reducer: ForEach(*1: Ts, Tensor.ForEach(@2: *1, Max(@2, @2)))
###
> Ts max QT
Ts max QT : i8[*,*]?*
Binder : ForEach(*1: Ts, Guard(?2: QT, Tensor.ForEach(@3: *1, @4: ?2, Max(@3, @4))))
###
> Ts max QTs
Ts max QTs : i8[*,*]?*
Binder : ForEach(*1: Ts, *2: QTs, Guard(?3: *2, Tensor.ForEach(@4: *1, @5: ?3, Max(@4, @5))))
###
> Ts max U
Ts max U : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: U, Max(@2, Num<i8>(@3))))
###
> Ts max V
Ts max V : i8[*,*]*
*** Error: (3,6) Node: Ts max V, Message: The given types are not comparable: 'i8' and 's'
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: V, Error(ErrIncomparableTypes_Type_Type)))
###
> Ts max R
Ts max R : i8[*,*]*
*** Error: (7,8) Node: R, Message: Ordered comparison is not supported for items of type '{A:i4}'
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, Error(ErrIncomparableType_Type)))
###
> Ts max i4
Ts max i4 : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, Max(@2, Num<i8>(i4))))
###
> QT max T
QT max T : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: T, Max(@2, @3)))
###
> QT max Ts
QT max Ts : i8[*,*]?*
Binder : ForEach(*1: Ts, Guard(?2: QT, Tensor.ForEach(@3: ?2, @4: *1, Max(@3, @4))))
###
> QT max QT
QT max QT : i8[*,*]?
Binder : Guard(?1: QT, ?2: QT, Tensor.ForEach(@3: ?1, @4: ?2, Max(@3, @4)))
Reducer: Guard(?1: QT, Tensor.ForEach(@2: ?1, Max(@2, @2)))
###
> QT max QTs
QT max QTs : i8[*,*]?*
Binder : ForEach(*1: QTs, Guard(?2: QT, ?3: *1, Tensor.ForEach(@4: ?2, @5: ?3, Max(@4, @5))))
###
> QT max U
QT max U : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: U, Max(@2, Num<i8>(@3))))
###
> QT max V
QT max V : i8[*,*]?
*** Error: (3,6) Node: QT max V, Message: The given types are not comparable: 'i8' and 's'
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: V, Error(ErrIncomparableTypes_Type_Type)))
###
> QT max R
QT max R : i8[*,*]?
*** Error: (7,8) Node: R, Message: Ordered comparison is not supported for items of type '{A:i4}'
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, Error(ErrIncomparableType_Type)))
###
> QT max i4
QT max i4 : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, Max(@2, Num<i8>(i4))))
###
> T div T
T div T : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: T, IntDiv(@1, @2))
Reducer: Tensor.ForEach(@1: T, IntDiv(@1, @1))
###
> T div Ts
T div Ts : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: T, @3: *1, IntDiv(@2, @3)))
###
> T div QT
T div QT : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: T, @3: ?1, IntDiv(@2, @3)))
###
> T div QTs
T div QTs : i8[*,*]?*
Binder : ForEach(*1: QTs, Guard(?2: *1, Tensor.ForEach(@3: T, @4: ?2, IntDiv(@3, @4))))
###
> T div U
T div U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, IntDiv(@1, Num<i8>(@2)))
###
> T div V
T div V : i8[*,*]
*** Error: (6,7) Node: V, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : Tensor.ForEach(@1: T, @2: V, IntDiv(@1, Error(ErrBadType_Src_Dst)))
###
> T div R
T div R : i8[*,*]
*** Error: (6,7) Node: R, Message: Invalid operand type: cannot convert type '{A:i4}' to 'i8'
Binder : Tensor.ForEach(@1: T, IntDiv(@1, Error(ErrBadType_Src_Dst)))
###
> T div i4
T div i4 : i8[*,*]
Binder : Tensor.ForEach(@1: T, IntDiv(@1, Num<i8>(i4)))
###
> Ts div T
Ts div T : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: T, IntDiv(@2, @3)))
###
> Ts div Ts
Ts div Ts : i8[*,*]*
Binder : ForEach(*1: Ts, *2: Ts, Tensor.ForEach(@3: *1, @4: *2, IntDiv(@3, @4)))
Reducer: ForEach(*1: Ts, Tensor.ForEach(@2: *1, IntDiv(@2, @2)))
###
> Ts div QT
Ts div QT : i8[*,*]?*
Binder : ForEach(*1: Ts, Guard(?2: QT, Tensor.ForEach(@3: *1, @4: ?2, IntDiv(@3, @4))))
###
> Ts div QTs
Ts div QTs : i8[*,*]?*
Binder : ForEach(*1: Ts, *2: QTs, Guard(?3: *2, Tensor.ForEach(@4: *1, @5: ?3, IntDiv(@4, @5))))
###
> Ts div U
Ts div U : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: U, IntDiv(@2, Num<i8>(@3))))
###
> Ts div V
Ts div V : i8[*,*]*
*** Error: (7,8) Node: V, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: V, IntDiv(@2, Error(ErrBadType_Src_Dst))))
###
> Ts div R
Ts div R : i8[*,*]*
*** Error: (7,8) Node: R, Message: Invalid operand type: cannot convert type '{A:i4}' to 'i8'
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, IntDiv(@2, Error(ErrBadType_Src_Dst))))
###
> Ts div i4
Ts div i4 : i8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, IntDiv(@2, Num<i8>(i4))))
###
> QT div T
QT div T : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: T, IntDiv(@2, @3)))
###
> QT div Ts
QT div Ts : i8[*,*]?*
Binder : ForEach(*1: Ts, Guard(?2: QT, Tensor.ForEach(@3: ?2, @4: *1, IntDiv(@3, @4))))
###
> QT div QT
QT div QT : i8[*,*]?
Binder : Guard(?1: QT, ?2: QT, Tensor.ForEach(@3: ?1, @4: ?2, IntDiv(@3, @4)))
Reducer: Guard(?1: QT, Tensor.ForEach(@2: ?1, IntDiv(@2, @2)))
###
> QT div QTs
QT div QTs : i8[*,*]?*
Binder : ForEach(*1: QTs, Guard(?2: QT, ?3: *1, Tensor.ForEach(@4: ?2, @5: ?3, IntDiv(@4, @5))))
###
> QT div U
QT div U : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: U, IntDiv(@2, Num<i8>(@3))))
###
> QT div V
QT div V : i8[*,*]?
*** Error: (7,8) Node: V, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: V, IntDiv(@2, Error(ErrBadType_Src_Dst))))
###
> QT div R
QT div R : i8[*,*]?
*** Error: (7,8) Node: R, Message: Invalid operand type: cannot convert type '{A:i4}' to 'i8'
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, IntDiv(@2, Error(ErrBadType_Src_Dst))))
###
> QT div i4
QT div i4 : i8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, IntDiv(@2, Num<i8>(i4))))
###
> i4 + T
i4 + T : i8[*,*]
Binder : Tensor.ForEach(@1: T, Add(Num<i8>(i4), @1))
###
> i4 + T
i4 + T : i8[*,*]
Binder : Tensor.ForEach(@1: T, Add(Num<i8>(i4), @1))
###
> i4 + T
i4 + T : i8[*,*]
Binder : Tensor.ForEach(@1: T, Add(Num<i8>(i4), @1))
###

**** New globals: {QT:r8[*,*]?, QTs:r8[*,*]?*, R:{A:i4}, T:r8[*,*], Ts:r8[*,*]*, U:r4[*,*], V:s[*,*], i4:i4, r4:r4}

> T / T
T / T : r8[*,*]
Binder : Tensor.ForEach(@1: T, @2: T, Mul(@1, [/] @2))
Reducer: Tensor.ForEach(@1: T, Mul(@1, [/] @1))
###
> T / Ts
T / Ts : r8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: T, @3: *1, Mul(@2, [/] @3)))
###
> T / QT
T / QT : r8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: T, @3: ?1, Mul(@2, [/] @3)))
###
> T / QTs
T / QTs : r8[*,*]?*
Binder : ForEach(*1: QTs, Guard(?2: *1, Tensor.ForEach(@3: T, @4: ?2, Mul(@3, [/] @4))))
###
> T / U
T / U : r8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(@1, [/] Num<r8>(@2)))
###
> T / V
T / V : r8[*,*]
*** Error: (4,5) Node: V, Message: Invalid operand type: cannot convert type 's' to 'r8'
Binder : Tensor.ForEach(@1: T, @2: V, Mul(@1, [/] Error(ErrBadType_Src_Dst)))
###
> T / R
T / R : r8[*,*]
*** Error: (4,5) Node: R, Message: Invalid operand type: cannot convert type '{A:i4}' to 'r8'
Binder : Tensor.ForEach(@1: T, Mul(@1, [/] Error(ErrBadType_Src_Dst)))
###
> T / r4
T / r4 : r8[*,*]
Binder : Tensor.ForEach(@1: T, Mul(@1, [/] Num<r8>(r4)))
###
> T / i4
T / i4 : r8[*,*]
Binder : Tensor.ForEach(@1: T, Mul(@1, [/] Num<r8>(i4)))
###
> Ts / T
Ts / T : r8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: T, Mul(@2, [/] @3)))
###
> Ts / Ts
Ts / Ts : r8[*,*]*
Binder : ForEach(*1: Ts, *2: Ts, Tensor.ForEach(@3: *1, @4: *2, Mul(@3, [/] @4)))
Reducer: ForEach(*1: Ts, Tensor.ForEach(@2: *1, Mul(@2, [/] @2)))
###
> Ts / QT
Ts / QT : r8[*,*]?*
Binder : ForEach(*1: Ts, Guard(?2: QT, Tensor.ForEach(@3: *1, @4: ?2, Mul(@3, [/] @4))))
###
> Ts / QTs
Ts / QTs : r8[*,*]?*
Binder : ForEach(*1: Ts, *2: QTs, Guard(?3: *2, Tensor.ForEach(@4: *1, @5: ?3, Mul(@4, [/] @5))))
###
> Ts / U
Ts / U : r8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: U, Mul(@2, [/] Num<r8>(@3))))
###
> Ts / V
Ts / V : r8[*,*]*
*** Error: (5,6) Node: V, Message: Invalid operand type: cannot convert type 's' to 'r8'
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, @3: V, Mul(@2, [/] Error(ErrBadType_Src_Dst))))
###
> Ts / R
Ts / R : r8[*,*]*
*** Error: (5,6) Node: R, Message: Invalid operand type: cannot convert type '{A:i4}' to 'r8'
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, Mul(@2, [/] Error(ErrBadType_Src_Dst))))
###
> Ts / r4
Ts / r4 : r8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, Mul(@2, [/] Num<r8>(r4))))
###
> Ts / i4
Ts / i4 : r8[*,*]*
Binder : ForEach(*1: Ts, Tensor.ForEach(@2: *1, Mul(@2, [/] Num<r8>(i4))))
###
> QT / T
QT / T : r8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: T, Mul(@2, [/] @3)))
###
> QT / Ts
QT / Ts : r8[*,*]?*
Binder : ForEach(*1: Ts, Guard(?2: QT, Tensor.ForEach(@3: ?2, @4: *1, Mul(@3, [/] @4))))
###
> QT / QT
QT / QT : r8[*,*]?
Binder : Guard(?1: QT, ?2: QT, Tensor.ForEach(@3: ?1, @4: ?2, Mul(@3, [/] @4)))
Reducer: Guard(?1: QT, Tensor.ForEach(@2: ?1, Mul(@2, [/] @2)))
###
> QT / QTs
QT / QTs : r8[*,*]?*
Binder : ForEach(*1: QTs, Guard(?2: QT, ?3: *1, Tensor.ForEach(@4: ?2, @5: ?3, Mul(@4, [/] @5))))
###
> QT / U
QT / U : r8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: U, Mul(@2, [/] Num<r8>(@3))))
###
> QT / V
QT / V : r8[*,*]?
*** Error: (5,6) Node: V, Message: Invalid operand type: cannot convert type 's' to 'r8'
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, @3: V, Mul(@2, [/] Error(ErrBadType_Src_Dst))))
###
> QT / R
QT / R : r8[*,*]?
*** Error: (5,6) Node: R, Message: Invalid operand type: cannot convert type '{A:i4}' to 'r8'
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, Mul(@2, [/] Error(ErrBadType_Src_Dst))))
###
> QT / r4
QT / r4 : r8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, Mul(@2, [/] Num<r8>(r4))))
###
> QT / i4
QT / i4 : r8[*,*]?
Binder : Guard(?1: QT, Tensor.ForEach(@2: ?1, Mul(@2, [/] Num<r8>(i4))))
###

**** New globals: {Ti1:i1[*,*], Ti2:i2[*,*], Ti4:i4[*,*], Ti8:i8[*,*], Tr4:r4[*,*], Tr8:r8[*,*], Tu1:u1[*,*], Tu2:u2[*,*], Tu4:u4[*,*], Tu8:u8[*,*]}

> Ti1 div Ti1
Ti1 div Ti1 : i8[*,*]
Binder : Tensor.ForEach(@1: Ti1, @2: Ti1, IntDiv(Num<i8>(@1), Num<i8>(@2)))
Reducer: Tensor.ForEach(@1: Ti1, IntDiv(Num<i8>(@1), Num<i8>(@1)))
###
> Ti2 div Ti2
Ti2 div Ti2 : i8[*,*]
Binder : Tensor.ForEach(@1: Ti2, @2: Ti2, IntDiv(Num<i8>(@1), Num<i8>(@2)))
Reducer: Tensor.ForEach(@1: Ti2, IntDiv(Num<i8>(@1), Num<i8>(@1)))
###
> Ti4 div Ti4
Ti4 div Ti4 : i8[*,*]
Binder : Tensor.ForEach(@1: Ti4, @2: Ti4, IntDiv(Num<i8>(@1), Num<i8>(@2)))
Reducer: Tensor.ForEach(@1: Ti4, IntDiv(Num<i8>(@1), Num<i8>(@1)))
###
> Ti8 div Ti8
Ti8 div Ti8 : i8[*,*]
Binder : Tensor.ForEach(@1: Ti8, @2: Ti8, IntDiv(@1, @2))
Reducer: Tensor.ForEach(@1: Ti8, IntDiv(@1, @1))
###
> Tu1 div Tu1
Tu1 div Tu1 : i8[*,*]
Binder : Tensor.ForEach(@1: Tu1, @2: Tu1, IntDiv(Num<i8>(@1), Num<i8>(@2)))
Reducer: Tensor.ForEach(@1: Tu1, IntDiv(Num<i8>(@1), Num<i8>(@1)))
###
> Tu2 div Tu2
Tu2 div Tu2 : i8[*,*]
Binder : Tensor.ForEach(@1: Tu2, @2: Tu2, IntDiv(Num<i8>(@1), Num<i8>(@2)))
Reducer: Tensor.ForEach(@1: Tu2, IntDiv(Num<i8>(@1), Num<i8>(@1)))
###
> Tu4 div Tu4
Tu4 div Tu4 : i8[*,*]
Binder : Tensor.ForEach(@1: Tu4, @2: Tu4, IntDiv(Num<i8>(@1), Num<i8>(@2)))
Reducer: Tensor.ForEach(@1: Tu4, IntDiv(Num<i8>(@1), Num<i8>(@1)))
###
> Tu8 div Tu8
Tu8 div Tu8 : u8[*,*]
Binder : Tensor.ForEach(@1: Tu8, @2: Tu8, IntDiv(@1, @2))
Reducer: Tensor.ForEach(@1: Tu8, IntDiv(@1, @1))
###
> Tr4 div Tr4
Tr4 div Tr4 : i8[*,*]
*** Error: (0,3) Node: Tr4, Message: Invalid operand type: cannot convert type 'r4' to 'i8'
*** Error: (8,11) Node: Tr4, Message: Invalid operand type: cannot convert type 'r4' to 'i8'
Binder : Tensor.ForEach(@1: Tr4, @2: Tr4, IntDiv(Error(ErrBadType_Src_Dst), Error(ErrBadType_Src_Dst)))
Reducer: Tensor.ForEach(@1: Tr4, IntDiv(Error(ErrBadType_Src_Dst), Error(ErrBadType_Src_Dst)))
###
> Tr8 div Tr8
Tr8 div Tr8 : i8[*,*]
*** Error: (0,3) Node: Tr8, Message: Invalid operand type: cannot convert type 'r8' to 'i8'
*** Error: (8,11) Node: Tr8, Message: Invalid operand type: cannot convert type 'r8' to 'i8'
Binder : Tensor.ForEach(@1: Tr8, @2: Tr8, IntDiv(Error(ErrBadType_Src_Dst), Error(ErrBadType_Src_Dst)))
Reducer: Tensor.ForEach(@1: Tr8, IntDiv(Error(ErrBadType_Src_Dst), Error(ErrBadType_Src_Dst)))
###
> Ti1 / Ti1
Ti1 / Ti1 : r8[*,*]
Binder : Tensor.ForEach(@1: Ti1, @2: Ti1, Mul(Num<r8>(@1), [/] Num<r8>(@2)))
Reducer: Tensor.ForEach(@1: Ti1, Mul(Num<r8>(@1), [/] Num<r8>(@1)))
###
> Ti2 / Ti2
Ti2 / Ti2 : r8[*,*]
Binder : Tensor.ForEach(@1: Ti2, @2: Ti2, Mul(Num<r8>(@1), [/] Num<r8>(@2)))
Reducer: Tensor.ForEach(@1: Ti2, Mul(Num<r8>(@1), [/] Num<r8>(@1)))
###
> Ti4 / Ti4
Ti4 / Ti4 : r8[*,*]
Binder : Tensor.ForEach(@1: Ti4, @2: Ti4, Mul(Num<r8>(@1), [/] Num<r8>(@2)))
Reducer: Tensor.ForEach(@1: Ti4, Mul(Num<r8>(@1), [/] Num<r8>(@1)))
###
> Ti8 / Ti8
Ti8 / Ti8 : r8[*,*]
Binder : Tensor.ForEach(@1: Ti8, @2: Ti8, Mul(Num<r8>(@1), [/] Num<r8>(@2)))
Reducer: Tensor.ForEach(@1: Ti8, Mul(Num<r8>(@1), [/] Num<r8>(@1)))
###
> Tu1 / Tu1
Tu1 / Tu1 : r8[*,*]
Binder : Tensor.ForEach(@1: Tu1, @2: Tu1, Mul(Num<r8>(@1), [/] Num<r8>(@2)))
Reducer: Tensor.ForEach(@1: Tu1, Mul(Num<r8>(@1), [/] Num<r8>(@1)))
###
> Tu2 / Tu2
Tu2 / Tu2 : r8[*,*]
Binder : Tensor.ForEach(@1: Tu2, @2: Tu2, Mul(Num<r8>(@1), [/] Num<r8>(@2)))
Reducer: Tensor.ForEach(@1: Tu2, Mul(Num<r8>(@1), [/] Num<r8>(@1)))
###
> Tu4 / Tu4
Tu4 / Tu4 : r8[*,*]
Binder : Tensor.ForEach(@1: Tu4, @2: Tu4, Mul(Num<r8>(@1), [/] Num<r8>(@2)))
Reducer: Tensor.ForEach(@1: Tu4, Mul(Num<r8>(@1), [/] Num<r8>(@1)))
###
> Tu8 / Tu8
Tu8 / Tu8 : r8[*,*]
Binder : Tensor.ForEach(@1: Tu8, @2: Tu8, Mul(Num<r8>(@1), [/] Num<r8>(@2)))
Reducer: Tensor.ForEach(@1: Tu8, Mul(Num<r8>(@1), [/] Num<r8>(@1)))
###
> Tr4 / Tr4
Tr4 / Tr4 : r8[*,*]
Binder : Tensor.ForEach(@1: Tr4, @2: Tr4, Mul(Num<r8>(@1), [/] Num<r8>(@2)))
Reducer: Tensor.ForEach(@1: Tr4, Mul(Num<r8>(@1), [/] Num<r8>(@1)))
###
> Tr8 / Tr8
Tr8 / Tr8 : r8[*,*]
Binder : Tensor.ForEach(@1: Tr8, @2: Tr8, Mul(@1, [/] @2))
Reducer: Tensor.ForEach(@1: Tr8, Mul(@1, [/] @1))
###

**** New globals: {T1:i8[*,*], T2:i8[*,*], T3:i8[*,*]}

> T1 + T2 + T3
T1 + T2 + T3 : i8[*,*]
Binder : Tensor.ForEach(@3: Tensor.ForEach(@1: T1, @2: T2, Add(@1, @2)), @4: T3, Add(@3, @4))
Reducer: Tensor.ForEach(@1: T1, @2: T2, @3: T3, Add(@1, @2, @3))
###
> T1 - T2 - T3
T1 - T2 - T3 : i8[*,*]
Binder : Tensor.ForEach(@3: Tensor.ForEach(@1: T1, @2: T2, Add(@1, [-] @2)), @4: T3, Add(@3, [-] @4))
Reducer: Tensor.ForEach(@1: T1, @2: T2, @3: T3, Add(@1, [-] @2, [-] @3))
###
> T1 * T2 * T3
T1 * T2 * T3 : i8[*,*]
Binder : Tensor.ForEach(@3: Tensor.ForEach(@1: T1, @2: T2, Mul(@1, @2)), @4: T3, Mul(@3, @4))
Reducer: Tensor.ForEach(@1: T1, @2: T2, @3: T3, Mul(@1, @2, @3))
###

**** New globals: {T:i8[*,*], U:i8[*,*]}

> T + U
T + U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, @2))
###
> U + T
U + T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, @2))
###
> T - U
T - U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, [-] @2))
###
> U - T
U - T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, [-] @2))
###
> T * U
T * U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(@1, @2))
###
> U * T
U * T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(@1, @2))
###
> T min U
T min U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Min(@1, @2))
###
> U min T
U min T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Min(@1, @2))
###
> T max U
T max U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Max(@1, @2))
###
> U max T
U max T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Max(@1, @2))
###
> T div U
T div U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, IntDiv(@1, @2))
###
> U div T
U div T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, IntDiv(@1, @2))
###

**** New globals: {T:r4[*,*], U:r4[*,*]}

> T / U
T / U : r8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(Num<r8>(@1), [/] Num<r8>(@2)))
###
> U / T
U / T : r8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(Num<r8>(@1), [/] Num<r8>(@2)))
###

**** New globals: {T:i4[*,*,*], U:i4[*,*,*]}

> T + U
T + U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(Num<i8>(@1), Num<i8>(@2)))
###
> U + T
U + T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(Num<i8>(@1), Num<i8>(@2)))
###
> T - U
T - U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(Num<i8>(@1), [-] Num<i8>(@2)))
###
> U - T
U - T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(Num<i8>(@1), [-] Num<i8>(@2)))
###
> T * U
T * U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(Num<i8>(@1), Num<i8>(@2)))
###
> U * T
U * T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(Num<i8>(@1), Num<i8>(@2)))
###
> T min U
T min U : i4[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Min(@1, @2))
###
> U min T
U min T : i4[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Min(@1, @2))
###
> T max U
T max U : i4[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Max(@1, @2))
###
> U max T
U max T : i4[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Max(@1, @2))
###
> T div U
T div U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, IntDiv(Num<i8>(@1), Num<i8>(@2)))
###
> U div T
U div T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, IntDiv(Num<i8>(@1), Num<i8>(@2)))
###

**** New globals: {T:r4[*,*,*], U:r4[*,*,*]}

> T / U
T / U : r8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(Num<r8>(@1), [/] Num<r8>(@2)))
###
> U / T
U / T : r8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(Num<r8>(@1), [/] Num<r8>(@2)))
###

**** New globals: {T:i8[*,*], U:i4[*,*]}

> T + U
T + U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, Num<i8>(@2)))
###
> U + T
U + T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(Num<i8>(@1), @2))
###
> T - U
T - U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, [-] Num<i8>(@2)))
###
> U - T
U - T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(Num<i8>(@1), [-] @2))
###
> T * U
T * U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(@1, Num<i8>(@2)))
###
> U * T
U * T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(Num<i8>(@1), @2))
###
> T min U
T min U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Min(@1, Num<i8>(@2)))
###
> U min T
U min T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Min(Num<i8>(@1), @2))
###
> T max U
T max U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Max(@1, Num<i8>(@2)))
###
> U max T
U max T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Max(Num<i8>(@1), @2))
###
> T div U
T div U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, IntDiv(@1, Num<i8>(@2)))
###
> U div T
U div T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, IntDiv(Num<i8>(@1), @2))
###

**** New globals: {T:r8[*,*], U:r4[*,*]}

> T / U
T / U : r8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(@1, [/] Num<r8>(@2)))
###
> U / T
U / T : r8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(Num<r8>(@1), [/] @2))
###

**** New globals: {T:i8[*], U:i8[*,*]}

> T + U
T + U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, @2))
###
> U + T
U + T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, @2))
###
> T - U
T - U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, [-] @2))
###
> U - T
U - T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, [-] @2))
###
> T * U
T * U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(@1, @2))
###
> U * T
U * T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(@1, @2))
###
> T min U
T min U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Min(@1, @2))
###
> U min T
U min T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Min(@1, @2))
###
> T max U
T max U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Max(@1, @2))
###
> U max T
U max T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Max(@1, @2))
###
> T div U
T div U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, IntDiv(@1, @2))
###
> U div T
U div T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, IntDiv(@1, @2))
###

**** New globals: {T:i8[*], U:i8[*,*,*]}

> T + U
T + U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, @2))
###
> U + T
U + T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, @2))
###
> T - U
T - U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, [-] @2))
###
> U - T
U - T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, [-] @2))
###
> T * U
T * U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(@1, @2))
###
> U * T
U * T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(@1, @2))
###
> T min U
T min U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Min(@1, @2))
###
> U min T
U min T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Min(@1, @2))
###
> T max U
T max U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Max(@1, @2))
###
> U max T
U max T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Max(@1, @2))
###
> T div U
T div U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, IntDiv(@1, @2))
###
> U div T
U div T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, IntDiv(@1, @2))
###

**** New globals: {T:i8[*,*], U:i8[*,*,*]}

> T + U
T + U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, @2))
###
> U + T
U + T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, @2))
###
> T - U
T - U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, [-] @2))
###
> U - T
U - T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, [-] @2))
###
> T * U
T * U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(@1, @2))
###
> U * T
U * T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(@1, @2))
###
> T min U
T min U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Min(@1, @2))
###
> U min T
U min T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Min(@1, @2))
###
> T max U
T max U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Max(@1, @2))
###
> U max T
U max T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Max(@1, @2))
###
> T div U
T div U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, IntDiv(@1, @2))
###
> U div T
U div T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, IntDiv(@1, @2))
###

**** New globals: {T:i8[*,*], U:i8[*,*]}

> T + U
T + U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, @2))
###
> U + T
U + T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, @2))
###
> T - U
T - U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, [-] @2))
###
> U - T
U - T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, [-] @2))
###
> T * U
T * U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(@1, @2))
###
> U * T
U * T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(@1, @2))
###
> T min U
T min U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Min(@1, @2))
###
> U min T
U min T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Min(@1, @2))
###
> T max U
T max U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Max(@1, @2))
###
> U max T
U max T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Max(@1, @2))
###
> T div U
T div U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, IntDiv(@1, @2))
###
> U div T
U div T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, IntDiv(@1, @2))
###

**** New globals: {T:i8[*,*], U:i8[*,*]}

> T + U
T + U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, @2))
###
> U + T
U + T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, @2))
###
> T - U
T - U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, [-] @2))
###
> U - T
U - T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, [-] @2))
###
> T * U
T * U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(@1, @2))
###
> U * T
U * T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(@1, @2))
###
> T min U
T min U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Min(@1, @2))
###
> U min T
U min T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Min(@1, @2))
###
> T max U
T max U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Max(@1, @2))
###
> U max T
U max T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Max(@1, @2))
###
> T div U
T div U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, IntDiv(@1, @2))
###
> U div T
U div T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, IntDiv(@1, @2))
###

**** New globals: {T:i8[*,*], U:i8[*,*]}

> T + U
T + U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, @2))
###
> U + T
U + T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, @2))
###
> T - U
T - U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, [-] @2))
###
> U - T
U - T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, [-] @2))
###
> T * U
T * U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(@1, @2))
###
> U * T
U * T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(@1, @2))
###
> T min U
T min U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Min(@1, @2))
###
> U min T
U min T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Min(@1, @2))
###
> T max U
T max U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Max(@1, @2))
###
> U max T
U max T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Max(@1, @2))
###
> T div U
T div U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, IntDiv(@1, @2))
###
> U div T
U div T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, IntDiv(@1, @2))
###

**** New globals: {T:i8[*,*], U:i8[*,*]}

> T + U
T + U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, @2))
###
> U + T
U + T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, @2))
###
> T - U
T - U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, [-] @2))
###
> U - T
U - T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, [-] @2))
###
> T * U
T * U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(@1, @2))
###
> U * T
U * T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(@1, @2))
###
> T min U
T min U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Min(@1, @2))
###
> U min T
U min T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Min(@1, @2))
###
> T max U
T max U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Max(@1, @2))
###
> U max T
U max T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Max(@1, @2))
###
> T div U
T div U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, IntDiv(@1, @2))
###
> U div T
U div T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, IntDiv(@1, @2))
###

**** New globals: {T:i8[*,*,*], U:i8[*,*]}

> T + U
T + U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, @2))
###
> U + T
U + T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, @2))
###
> T - U
T - U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, [-] @2))
###
> U - T
U - T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, [-] @2))
###
> T * U
T * U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(@1, @2))
###
> U * T
U * T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(@1, @2))
###
> T min U
T min U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Min(@1, @2))
###
> U min T
U min T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Min(@1, @2))
###
> T max U
T max U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Max(@1, @2))
###
> U max T
U max T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Max(@1, @2))
###
> T div U
T div U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, IntDiv(@1, @2))
###
> U div T
U div T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, IntDiv(@1, @2))
###

**** New globals: {T:i8[*,*], U:i8[*,*,*]}

> T + U
T + U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, @2))
###
> U + T
U + T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, @2))
###
> T - U
T - U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, [-] @2))
###
> U - T
U - T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, [-] @2))
###
> T * U
T * U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(@1, @2))
###
> U * T
U * T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(@1, @2))
###
> T min U
T min U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Min(@1, @2))
###
> U min T
U min T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Min(@1, @2))
###
> T max U
T max U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Max(@1, @2))
###
> U max T
U max T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Max(@1, @2))
###
> T div U
T div U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, IntDiv(@1, @2))
###
> U div T
U div T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, IntDiv(@1, @2))
###

**** New globals: {T:i8[*,*], U:i8[*,*,*]}

> T + U
T + U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, @2))
###
> U + T
U + T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, @2))
###
> T - U
T - U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, [-] @2))
###
> U - T
U - T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, [-] @2))
###
> T * U
T * U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(@1, @2))
###
> U * T
U * T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(@1, @2))
###
> T min U
T min U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Min(@1, @2))
###
> U min T
U min T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Min(@1, @2))
###
> T max U
T max U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Max(@1, @2))
###
> U max T
U max T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Max(@1, @2))
###
> T div U
T div U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, IntDiv(@1, @2))
###
> U div T
U div T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, IntDiv(@1, @2))
###

**** New globals: {T:i8[*,*], U:i8[*,*,*]}

> T + U
T + U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, @2))
###
> U + T
U + T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, @2))
###
> T - U
T - U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, [-] @2))
###
> U - T
U - T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, [-] @2))
###
> T * U
T * U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(@1, @2))
###
> U * T
U * T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(@1, @2))
###
> T min U
T min U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Min(@1, @2))
###
> U min T
U min T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Min(@1, @2))
###
> T max U
T max U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Max(@1, @2))
###
> U max T
U max T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Max(@1, @2))
###
> T div U
T div U : i8[*,*,*]
Binder : Tensor.ForEach(@1: T, @2: U, IntDiv(@1, @2))
###
> U div T
U div T : i8[*,*,*]
Binder : Tensor.ForEach(@1: U, @2: T, IntDiv(@1, @2))
###

**** New globals: {T:i8[*], U:i8[*,*]}

> T + U
T + U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, @2))
###
> U + T
U + T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, @2))
###
> T - U
T - U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, [-] @2))
###
> U - T
U - T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, [-] @2))
###
> T * U
T * U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(@1, @2))
###
> U * T
U * T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(@1, @2))
###
> T min U
T min U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Min(@1, @2))
###
> U min T
U min T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Min(@1, @2))
###
> T max U
T max U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Max(@1, @2))
###
> U max T
U max T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Max(@1, @2))
###
> T div U
T div U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, IntDiv(@1, @2))
###
> U div T
U div T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, IntDiv(@1, @2))
###

**** New globals: {T:i8[], U:i8[*,*]}

> T + U
T + U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, @2))
###
> U + T
U + T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, @2))
###
> T - U
T - U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Add(@1, [-] @2))
###
> U - T
U - T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Add(@1, [-] @2))
###
> T * U
T * U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Mul(@1, @2))
###
> U * T
U * T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Mul(@1, @2))
###
> T min U
T min U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Min(@1, @2))
###
> U min T
U min T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Min(@1, @2))
###
> T max U
T max U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, Max(@1, @2))
###
> U max T
U max T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, Max(@1, @2))
###
> T div U
T div U : i8[*,*]
Binder : Tensor.ForEach(@1: T, @2: U, IntDiv(@1, @2))
###
> U div T
U div T : i8[*,*]
Binder : Tensor.ForEach(@1: U, @2: T, IntDiv(@1, @2))
###
