**** New globals: {b:b, g:g, i:i, i1:i1, i2:i2, i4:i4, i8:i8, n:r8, o:o, qb:b?, qi:i?, qi1:i1?, qi2:i2?, qi4:i4?, qi8:i8?, qn:r8?, qr4:r4?, qr8:r8?, qu1:u1?, qu2:u2?, qu4:u4?, qu8:u8?, r4:r4, r8:r8, s:s, u1:u1, u2:u2, u4:u4, u8:u8}

> 3 * 4
3 * 4 : i8
Binder : Mul(3, 4)
Reducer: 12
###
> 2 * -1
2 * -1 : i8
Binder : Mul(2, -1)
Reducer: -2
###
> 2 * 0
2 * 0 : i8
Binder : Mul(2, 0)
Reducer: 0
###
> -0 * 2
-0 * 2 : i8
Binder : Mul(0, 2)
Reducer: 0
###
> -2 * -0
-2 * -0 : i8
Binder : Mul(-2, 0)
Reducer: 0
###
> 0x3FFF_FFFF * 2
1073741823 * 2 : i8
Binder : Mul(1073741823, 2)
Reducer: 2147483646
###
> 0x3FFF_FFFF * 3
1073741823 * 3 : i8
Binder : Mul(1073741823, 3)
Reducer: 3221225469
###
> 0x3FFF_FFFFL * 3
1073741823 * 3 : i8
Binder : Mul(1073741823, 3)
Reducer: 3221225469
###
> 0x7FFF_FFFFU * 2
2147483647 * 2 : i8
Binder : Mul(2147483647, 2)
Reducer: 4294967294
###
> 0x7FFF_FFFFU * 2U
2147483647 * 2 : u8
Binder : Mul(2147483647, 2)
Reducer: 4294967294
###
> 0x7FFF_FFFFU * 3
2147483647 * 3 : i8
Binder : Mul(2147483647, 3)
Reducer: 6442450941
###
> 0x3FFF_FFFF_FFFF_FFFF * 2
4611686018427387903 * 2 : i8
Binder : Mul(4611686018427387903, 2)
Reducer: 9223372036854775806
###
> 0x3FFF_FFFF_FFFF_FFFF * 3 // Overflow.
4611686018427387903 * 3 : i8
Binder : Mul(4611686018427387903, 3)
*** Warning: Node: Mul(4611686018427387903, 3), Message: Constant integer overflow
Reducer: -4611686018427387907
###
> 0x7FFF_FFFF_FFFF_FFFFU * 2
9223372036854775807 * 2 : i8
Binder : Mul(9223372036854775807, 2)
*** Warning: Node: Mul(9223372036854775807, 2), Message: Constant integer overflow
Reducer: -2
###
> 0x7FFF_FFFF_FFFF_FFFFU * 2U
9223372036854775807 * 2 : u8
Binder : Mul(9223372036854775807, 2)
Reducer: 18446744073709551614
###
> 0x3FFF_FFFF_FFFF_FFFFU * 3U
4611686018427387903 * 3 : u8
Binder : Mul(4611686018427387903, 3)
Reducer: 13835058055282163709
###
> 3 * null
3 * null : i8?
Binder : Guard(?1: null, Mul(3, Unit<i8>(?1)))
Reducer: null
###
> null * 3
null * 3 : i8?
Binder : Guard(?1: null, Mul(Unit<i8>(?1), 3))
Reducer: null
###
> 0 * null
0 * null : i8?
Binder : Guard(?1: null, Mul(0, Unit<i8>(?1)))
Reducer: null
###
> null * 0
null * 0 : i8?
Binder : Guard(?1: null, Mul(Unit<i8>(?1), 0))
Reducer: null
###
> i4 * 3
i4 * 3 : i8
Binder : Mul(Num<i8>(i4), 3)
###
> 3 * i4
3 * i4 : i8
Binder : Mul(3, Num<i8>(i4))
Reducer: Mul(Num<i8>(i4), 3)
###
> i4 * null
i4 * null : i8?
Binder : Guard(?1: null, Mul(Num<i8>(i4), Unit<i8>(?1)))
Reducer: null
###
> null * i4
null * i4 : i8?
Binder : Guard(?1: null, Mul(Unit<i8>(?1), Num<i8>(i4)))
Reducer: null
###
> i4 * 2 * null
i4 * 2 * null : i8?
Binder : Guard(?1: null, Mul(Num<i8>(i4), 2, Unit<i8>(?1)))
Reducer: null
###
> null * (i4 * 2)
null * (i4 * 2) : i8?
Binder : Guard(?1: null, Mul(Unit<i8>(?1), Num<i8>(i4), 2))
Reducer: null
###
> i1 * i2 * i4
i1 * i2 * i4 : i8
Binder : Mul(Num<i8>(i1), Num<i8>(i2), Num<i8>(i4))
###
> 1 * (i1 * i2)
1 * (i1 * i2) : i8
Binder : Mul(1, Num<i8>(i1), Num<i8>(i2))
Reducer: Mul(Num<i8>(i1), Num<i8>(i2))
###
> 3 * (i1 * i2)
3 * (i1 * i2) : i8
Binder : Mul(3, Num<i8>(i1), Num<i8>(i2))
Reducer: Mul(Num<i8>(i1), Num<i8>(i2), 3)
###
> (i1 * 3) * (i2 * 2)
i1 * 3 * (i2 * 2) : i8
Binder : Mul(Num<i8>(i1), 3, Num<i8>(i2), 2)
Reducer: Mul(Num<i8>(i1), Num<i8>(i2), 6)
###
> (i1 * 3) * (i2 * i4)
i1 * 3 * (i2 * i4) : i8
Binder : Mul(Num<i8>(i1), 3, Num<i8>(i2), Num<i8>(i4))
Reducer: Mul(Num<i8>(i1), Num<i8>(i2), Num<i8>(i4), 3)
###
> (i2 * i4) * (i1 * 3)
i2 * i4 * (i1 * 3) : i8
Binder : Mul(Num<i8>(i2), Num<i8>(i4), Num<i8>(i1), 3)
###
> i1 * 3 * 2
i1 * 3 * 2 : i8
Binder : Mul(Num<i8>(i1), 3, 2)
Reducer: Mul(Num<i8>(i1), 6)
###
> i4 * 3 * 2
i4 * 3 * 2 : i8
Binder : Mul(Num<i8>(i4), 3, 2)
Reducer: Mul(Num<i8>(i4), 6)
###
> i1 * -1 * -1
i1 * -1 * -1 : i8
Binder : Mul(Num<i8>(i1), -1, -1)
Reducer: Num<i8>(i1)
###
> i4 * -1 * -1
i4 * -1 * -1 : i8
Binder : Mul(Num<i8>(i4), -1, -1)
Reducer: Num<i8>(i4)
###
> -i1 * -1 * -1
-i1 * -1 * -1 : i8
Binder : Mul(Add([-] Num<i8>(i1)), -1, -1)
Reducer: Add([-] Num<i8>(i1))
###
> -i4 * -1 * -1
-i4 * -1 * -1 : i8
Binder : Mul(Add([-] Num<i8>(i4)), -1, -1)
Reducer: Add([-] Num<i8>(i4))
###
> --i1
--i1 : i8
Binder : Num<i8>(i1)
###
> --i4
--i4 : i8
Binder : Num<i8>(i4)
###
> ---i1
---i1 : i8
Binder : Add([-] Num<i8>(i1))
###
> ---i4
---i4 : i8
Binder : Add([-] Num<i8>(i4))
###
> (i1 * 2) * (i2 * 0x3FFF_FFFF)
i1 * 2 * (i2 * 1073741823) : i8
Binder : Mul(Num<i8>(i1), 2, Num<i8>(i2), 1073741823)
Reducer: Mul(Num<i8>(i1), Num<i8>(i2), 2147483646)
###
> (i1 * 2) * (i2 * 0x4000_0000)
i1 * 2 * (i2 * 1073741824) : i8
Binder : Mul(Num<i8>(i1), 2, Num<i8>(i2), 1073741824)
Reducer: Mul(Num<i8>(i1), Num<i8>(i2), 2147483648)
###
> (i1 * 2) * (i2 * 0x4000_0001)
i1 * 2 * (i2 * 1073741825) : i8
Binder : Mul(Num<i8>(i1), 2, Num<i8>(i2), 1073741825)
Reducer: Mul(Num<i8>(i1), Num<i8>(i2), 2147483650)
###
> (u1 * 2u4) * (u2 * 0x7FFF_FFFFu4) // i8
u1 * 2 * (u2 * 2147483647) : i8
Binder : Mul(Num<i8>(u1), 2, Num<i8>(u2), 2147483647)
Reducer: Mul(Num<i8>(u1), Num<i8>(u2), 4294967294)
###
> (u1 * 2u4) * (u2 * 0x8000_0000u4) // i8
u1 * 2 * (u2 * 2147483648) : i8
Binder : Mul(Num<i8>(u1), 2, Num<i8>(u2), 2147483648)
Reducer: Mul(Num<i8>(u1), Num<i8>(u2), 4294967296)
###
> (u1 * 2u4) * (u2 * 0x8000_0001u4) // i8
u1 * 2 * (u2 * 2147483649) : i8
Binder : Mul(Num<i8>(u1), 2, Num<i8>(u2), 2147483649)
Reducer: Mul(Num<i8>(u1), Num<i8>(u2), 4294967298)
###
> (u1 * 2u) * (u2 * 0x7FFF_FFFFu) // u8
u1 * 2 * (u2 * 2147483647) : u8
Binder : Mul(Num<u8>(u1), 2, Num<u8>(u2), 2147483647)
Reducer: Mul(Num<u8>(u1), Num<u8>(u2), 4294967294)
###
> (u1 * 2u) * (u2 * 0x8000_0000u) // u8
u1 * 2 * (u2 * 2147483648) : u8
Binder : Mul(Num<u8>(u1), 2, Num<u8>(u2), 2147483648)
Reducer: Mul(Num<u8>(u1), Num<u8>(u2), 4294967296)
###
> (u1 * 2u) * (u2 * 0x8000_0001u) // u8
u1 * 2 * (u2 * 2147483649) : u8
Binder : Mul(Num<u8>(u1), 2, Num<u8>(u2), 2147483649)
Reducer: Mul(Num<u8>(u1), Num<u8>(u2), 4294967298)
###
> (i1 * 2) * (i2 * 0x3FFF_FFFF_FFFF_FFFF)
i1 * 2 * (i2 * 4611686018427387903) : i8
Binder : Mul(Num<i8>(i1), 2, Num<i8>(i2), 4611686018427387903)
Reducer: Mul(Num<i8>(i1), Num<i8>(i2), 9223372036854775806)
###
> (i1 * 2) * (i2 * 0x4000_0000_0000_0000) // Overflow.
i1 * 2 * (i2 * 4611686018427387904) : i8
Binder : Mul(Num<i8>(i1), 2, Num<i8>(i2), 4611686018427387904)
*** Warning: Node: Mul(Num<i8>(i1), 2, Num<i8>(i2), 4611686018427387904), Message: Constant integer overflow
Reducer: Mul(Num<i8>(i1), Num<i8>(i2), -9223372036854775808)
###
> (i1 * 2) * (i2 * 0x4000_0000_0000_0001) // Overflow.
i1 * 2 * (i2 * 4611686018427387905) : i8
Binder : Mul(Num<i8>(i1), 2, Num<i8>(i2), 4611686018427387905)
*** Warning: Node: Mul(Num<i8>(i1), 2, Num<i8>(i2), 4611686018427387905), Message: Constant integer overflow
Reducer: Mul(Num<i8>(i1), Num<i8>(i2), -9223372036854775806)
###
> (u1 * 2u) * (u2 * 0x7FFF_FFFF_FFFF_FFFFu) // u8
u1 * 2 * (u2 * 9223372036854775807) : u8
Binder : Mul(Num<u8>(u1), 2, Num<u8>(u2), 9223372036854775807)
Reducer: Mul(Num<u8>(u1), Num<u8>(u2), 18446744073709551614)
###
> (u1 * 2u) * (u2 * 0x8000_0000_0000_0000u) // u8 Overflow.
u1 * 2 * (u2 * 9223372036854775808) : u8
Binder : Mul(Num<u8>(u1), 2, Num<u8>(u2), 9223372036854775808)
*** Warning: Node: Mul(Num<u8>(u1), 2, Num<u8>(u2), 9223372036854775808), Message: Constant integer overflow
Reducer: 0
###
> (u1 * 2u) * (u2 * 0x8000_0000_0000_0001u) // u8 Overflow.
u1 * 2 * (u2 * 9223372036854775809) : u8
Binder : Mul(Num<u8>(u1), 2, Num<u8>(u2), 9223372036854775809)
*** Warning: Node: Mul(Num<u8>(u1), 2, Num<u8>(u2), 9223372036854775809), Message: Constant integer overflow
Reducer: Mul(Num<u8>(u1), Num<u8>(u2), 2)
###
> - 123U1 // This ends up an i2.
-123 : i2
Binder : -123
###
> -1 * 123U1 // These end up being i8.
-1 * 123 : i8
Binder : Mul(-1, 123)
Reducer: -123
###
> 123U1 * -1
123 * -1 : i8
Binder : Mul(123, -1)
Reducer: -123
###
> 3 * true
3 * true : i8
Binder : Mul(3, 1)
Reducer: 3
###
> true * 3
true * 3 : i8
Binder : Mul(1, 3)
Reducer: 3
###
> true * false
true * false : i8
Binder : Mul(1, 0)
Reducer: 0
###
> "hello" * true
"hello" * true : i8
*** Error: (0,7) Node: "hello", Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : Mul(Error(ErrBadType_Src_Dst), 1)
Reducer: Error(ErrBadType_Src_Dst)
###
> ---true
---true : i1
Binder : -1
###
> --"hello"
--"hello" : i8
*** Error: (2,9) Node: "hello", Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : Error(ErrBadType_Src_Dst)
###
> i4 * qi2 * i1 * 0
i4 * qi2 * i1 * 0 : i8?
Binder : Guard(?3: Guard(?2: Guard(?1: qi2, Mul(Num<i8>(i4), Num<i8>(?1))), Mul(?2, Num<i8>(i1))), Mul(?3, 0))
Reducer: Guard(?1: qi2, 0)
###
> 0 * i4 * qi2 * i1
0 * i4 * qi2 * i1 : i8?
Binder : Guard(?2: Guard(?1: qi2, Mul(0, Num<i8>(i4), Num<i8>(?1))), Mul(?2, Num<i8>(i1)))
Reducer: Guard(?1: qi2, 0)
###
> 2.0 * 3.0
2 * 3 : r8
Binder : Mul(2, 3)
Reducer: 6
###
> 3f * null
3 * null : r8?
Binder : Guard(?1: null, Mul(3, Unit<r8>(?1)))
Reducer: null
###
> null * 2f
null * 2 : r8?
Binder : Guard(?1: null, Mul(Unit<r8>(?1), 2))
Reducer: null
###
> 2 * r4
2 * r4 : r8
Binder : Mul(2, Num<r8>(r4))
###
> r4 * 3
r4 * 3 : r8
Binder : Mul(Num<r8>(r4), 3)
###
> 1 * r4
1 * r4 : r8
Binder : Mul(1, Num<r8>(r4))
Reducer: Num<r8>(r4)
###
> r4 * 1
r4 * 1 : r8
Binder : Mul(Num<r8>(r4), 1)
Reducer: Num<r8>(r4)
###
> null * r4
null * r4 : r8?
Binder : Guard(?1: null, Mul(Unit<r8>(?1), Num<r8>(r4)))
Reducer: null
###
> r4 * null
r4 * null : r8?
Binder : Guard(?1: null, Mul(Num<r8>(r4), Unit<r8>(?1)))
Reducer: null
###
> 0 * r4
0 * r4 : r8
Binder : Mul(0, Num<r8>(r4))
###
> r4 * 0
r4 * 0 : r8
Binder : Mul(Num<r8>(r4), 0)
###
> r4 * r4 * 1
r4 * r4 * 1 : r8
Binder : Mul(Num<r8>(r4), Num<r8>(r4), 1)
Reducer: Mul(Num<r8>(r4), Num<r8>(r4))
###
> r4 * (r4 * 1)
r4 * (r4 * 1) : r8
Binder : Mul(Num<r8>(r4), Mul(Num<r8>(r4), 1))
Reducer: Mul(Num<r8>(r4), Num<r8>(r4))
###
> -r4
-r4 : r8
Binder : Add([-] Num<r8>(r4))
###
> --r4
--r4 : r8
Binder : Num<r8>(r4)
###
> r4 * -1 * -1 * -1
r4 * -1 * -1 * -1 : r8
Binder : Mul(Num<r8>(r4), -1, -1, -1)
Reducer: Add([-] Num<r8>(r4))
###
> r4 * -1 * -2 * -1 * -3
r4 * -1 * -2 * -1 * -3 : r8
Binder : Mul(Num<r8>(r4), -1, -2, -1, -3)
Reducer: Mul(Num<r8>(r4), -2, -3)
###
> r4 * -1 * -2 * -3 * -1
r4 * -1 * -2 * -3 * -1 : r8
Binder : Mul(Num<r8>(r4), -1, -2, -3, -1)
Reducer: Mul(Num<r8>(r4), -2, -3)
###
> -(r4 * (0f / 0f))
-(r4 * (0 / 0)) : r8
Binder : Add([-] Mul(Num<r8>(r4), Mul(0, [/] 0)))
Reducer: Mul(Num<r8>(r4), NaN)
###
> -(r4 * r4 * -r4)
-(r4 * r4 * -r4) : r8
Binder : Add([-] Mul(Num<r8>(r4), Num<r8>(r4), Add([-] Num<r8>(r4))))
Reducer: Mul(Num<r8>(r4), Num<r8>(r4), Num<r8>(r4))
###
> -r4 * r4 * -r4
-r4 * r4 * -r4 : r8
Binder : Mul(Add([-] Num<r8>(r4)), Num<r8>(r4), Add([-] Num<r8>(r4)))
Reducer: Mul(Num<r8>(r4), Num<r8>(r4), Num<r8>(r4))
###
> -1d * -1d * (r8 * r8 * -1) * -1d * -1d
-1 * -1 * (r8 * r8 * -1) * -1 * -1 : r8
Binder : Mul(-1, -1, Mul(r8, r8, -1), -1, -1)
Reducer: Mul(r8, r8, -1)
###
> -1d * -1d * (r8 * r8 * 3) * -1d
-1 * -1 * (r8 * r8 * 3) * -1 : r8
Binder : Mul(-1, -1, Mul(r8, r8, 3), -1)
Reducer: Mul(r8, r8, -3)
###
> -1d * -1d * (r8 * r8 * 3) * 7d * 2d * r8
-1 * -1 * (r8 * r8 * 3) * 7 * 2 * r8 : r8
Binder : Mul(-1, -1, Mul(r8, r8, 3), 7, 2, r8)
Reducer: Mul(r8, r8, 3, 7, 2, r8)
###
> -1d * -1d * ((0 / 0) * r8 * r8) * -1d
-1 * -1 * (0 / 0 * r8 * r8) * -1 : r8
Binder : Mul(-1, -1, Mul(0, [/] 0, r8, r8), -1)
Reducer: Mul(NaN, r8, r8)
###
> r8 * (r8 * r8 * -1d)
r8 * (r8 * r8 * -1) : r8
Binder : Mul(r8, Mul(r8, r8, -1))
Reducer: Mul(r8, Mul(r8, r8), -1)
###
> r8 * r8 * -1d * -1d
r8 * r8 * -1 * -1 : r8
Binder : Mul(r8, r8, -1, -1)
Reducer: Mul(r8, r8)
###
> -1d / -1d * -1d
-1 / -1 * -1 : r8
Binder : Mul(-1, [/] -1, -1)
Reducer: -1
###
> -1d / -1d * -1d / -1d
-1 / -1 * -1 / -1 : r8
Binder : Mul(-1, [/] -1, -1, [/] -1)
Reducer: 1
###
> 1d / 2d * r8
1 / 2 * r8 : r8
Binder : Mul(1, [/] 2, r8)
Reducer: Mul(0.5, r8)
###
> 1d / 2d / r8
1 / 2 / r8 : r8
Binder : Mul(1, [/] 2, [/] r8)
Reducer: Mul(0.5, [/] r8)
###
> i4 * i4 * -1 * -1
i4 * i4 * -1 * -1 : i8
Binder : Mul(Num<i8>(i4), Num<i8>(i4), -1, -1)
Reducer: Mul(Num<i8>(i4), Num<i8>(i4))
###
> -1 * (i4 - 3)
-1 * (i4 - 3) : i8
Binder : Mul(-1, Add(Num<i8>(i4), [-] 3))
Reducer: Add([-] Num<i8>(i4), 3)
###
> i4 * (-i4 - 3) * i4 * 17
i4 * (-i4 - 3) * i4 * 17 : i8
Binder : Mul(Num<i8>(i4), Add([-] Num<i8>(i4), [-] 3), Num<i8>(i4), 17)
Reducer: Mul(Num<i8>(i4), Add(Num<i8>(i4), 3), Num<i8>(i4), -17)
###
> r8 * -1 * (1 / r8)
r8 * -1 * (1 / r8) : r8
Binder : Mul(r8, -1, Mul(1, [/] r8))
Reducer: Mul(r8, Mul([/] r8), -1)
###
> r8 * -1 * (3 * 4 * r8)
r8 * -1 * (3 * 4 * r8) : r8
Binder : Mul(r8, -1, Mul(Num<r8>(Mul(3, 4)), r8))
Reducer: Mul(r8, Mul(12, r8), -1)
###
> -1 * (-r8 + r8)
-1 * (-r8 + r8) : r8
Binder : Mul(-1, Add([-] r8, r8))
Reducer: Add(r8, [-] r8)
###
> -1 * (r8 * (r8 * 5 * r8))
-1 * (r8 * (r8 * 5 * r8)) : r8
Binder : Mul(-1, Mul(r8, Mul(r8, 5, r8)))
Reducer: Mul(r8, Mul(r8, -5, r8))
###
> (-r8 + 3) * (-r8 + 5)
(-r8 + 3) * (-r8 + 5) : r8
Binder : Mul(Add([-] r8, 3), Add([-] r8, 5))
Reducer: Mul(Add(r8, [-] 3), Add(r8, [-] 5))
###
> (-i8 + 3) * (i8 - 5)
(-i8 + 3) * (i8 - 5) : i8
Binder : Mul(Add([-] i8, 3), Add(i8, [-] 5))
Reducer: Add([-] Mul(Add(i8, [-] 3), Add(i8, [-] 5)))
###
> (3 + i8 * i8 * 2 * 5 - 3) * (7 + i8 * 8 * 4 * i8 - 7)
(3 + i8 * i8 * 2 * 5 - 3) * (7 + i8 * 8 * 4 * i8 - 7) : i8
Binder : Mul(Add(3, Mul(i8, i8, 2, 5), [-] 3), Add(7, Mul(i8, 8, 4, i8), [-] 7))
Reducer: Mul(i8, i8, i8, i8, 320)
###
> (0U - u8 + 17U) * (u8 + 3U) // Don't gather negation for unsigned.
(0 - u8 + 17) * (u8 + 3) : u8
Binder : Mul(Add(0, [-] u8, 17), Add(u8, 3))
Reducer: Mul(Add([-] u8, 17), Add(u8, 3))
###
> 2d * 0.5d * (3d + r8 + r8) + r8
2 * 0.5 * (3 + r8 + r8) + r8 : r8
Binder : Add(Mul(2, 0.5, Add(3, r8, r8)), r8)
Reducer: Add(3, r8, r8, r8)
###
> 3 * g
3 * g : i8
*** Error: (4,5) Node: g, Message: Invalid operand type: cannot convert type 'g' to 'i8'
Binder : Mul(3, Error(ErrBadType_Src_Dst))
Reducer: Mul(Error(ErrBadType_Src_Dst), 3)
###
> 3 * o
3 * o : i8?
Binder : Guard(?1: o, Mul(3, Unit<i8>(?1)))
Reducer: null
###
> 3 * s
3 * s : i8
*** Error: (4,5) Node: s, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : Mul(3, Error(ErrBadType_Src_Dst))
Reducer: Mul(Error(ErrBadType_Src_Dst), 3)
###
> 3 * b
3 * b : i8
Binder : Mul(3, Num<i8>(b))
Reducer: Mul(Num<i8>(b), 3)
###
> 3 * n
3 * n : r8
Binder : Mul(3, n)
###
> 3 * r8
3 * r8 : r8
Binder : Mul(3, r8)
###
> 3 * r4
3 * r4 : r8
Binder : Mul(3, Num<r8>(r4))
###
> 3 * i
3 * i : i
Binder : Mul(3, i)
Reducer: Mul(i, 3)
###
> 3 * i8
3 * i8 : i8
Binder : Mul(3, i8)
Reducer: Mul(i8, 3)
###
> 3 * i4
3 * i4 : i8
Binder : Mul(3, Num<i8>(i4))
Reducer: Mul(Num<i8>(i4), 3)
###
> 3 * i2
3 * i2 : i8
Binder : Mul(3, Num<i8>(i2))
Reducer: Mul(Num<i8>(i2), 3)
###
> 3 * i1
3 * i1 : i8
Binder : Mul(3, Num<i8>(i1))
Reducer: Mul(Num<i8>(i1), 3)
###
> 3 * u8
3 * u8 : i8
*** Warning: (4,6) Node: u8, Message: Conversion from unsigned to signed integer can reinterpret large values as negative
Binder : Mul(3, Num<i8>(u8))
Reducer: Mul(Num<i8>(u8), 3)
###
> 3 * u4
3 * u4 : i8
Binder : Mul(3, Num<i8>(u4))
Reducer: Mul(Num<i8>(u4), 3)
###
> 3 * u2
3 * u2 : i8
Binder : Mul(3, Num<i8>(u2))
Reducer: Mul(Num<i8>(u2), 3)
###
> 3 * u1
3 * u1 : i8
Binder : Mul(3, Num<i8>(u1))
Reducer: Mul(Num<i8>(u1), 3)
###
> -3i1 * g
-3 * g : i8
*** Error: (7,8) Node: g, Message: Invalid operand type: cannot convert type 'g' to 'i8'
Binder : Mul(-3, Error(ErrBadType_Src_Dst))
Reducer: Mul(Error(ErrBadType_Src_Dst), -3)
###
> -3i1 * o
-3 * o : i8?
Binder : Guard(?1: o, Mul(-3, Unit<i8>(?1)))
Reducer: null
###
> -3i1 * s
-3 * s : i8
*** Error: (7,8) Node: s, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : Mul(-3, Error(ErrBadType_Src_Dst))
Reducer: Mul(Error(ErrBadType_Src_Dst), -3)
###
> -3i1 * b
-3 * b : i8
Binder : Mul(-3, Num<i8>(b))
Reducer: Mul(Num<i8>(b), -3)
###
> -3i1 * n
-3 * n : r8
Binder : Mul(-3, n)
###
> -3i1 * r8
-3 * r8 : r8
Binder : Mul(-3, r8)
###
> -3i1 * r4
-3 * r4 : r8
Binder : Mul(-3, Num<r8>(r4))
###
> -3i1 * i
-3 * i : i
Binder : Mul(-3, i)
Reducer: Mul(i, -3)
###
> -3i1 * i8
-3 * i8 : i8
Binder : Mul(-3, i8)
Reducer: Mul(i8, -3)
###
> -3i1 * i4
-3 * i4 : i8
Binder : Mul(-3, Num<i8>(i4))
Reducer: Mul(Num<i8>(i4), -3)
###
> -3i1 * i2
-3 * i2 : i8
Binder : Mul(-3, Num<i8>(i2))
Reducer: Mul(Num<i8>(i2), -3)
###
> -3i1 * i1
-3 * i1 : i8
Binder : Mul(-3, Num<i8>(i1))
Reducer: Mul(Num<i8>(i1), -3)
###
> -3i1 * u8
-3 * u8 : i8
*** Warning: (7,9) Node: u8, Message: Conversion from unsigned to signed integer can reinterpret large values as negative
Binder : Mul(-3, Num<i8>(u8))
Reducer: Mul(Num<i8>(u8), -3)
###
> -3i1 * u4
-3 * u4 : i8
Binder : Mul(-3, Num<i8>(u4))
Reducer: Mul(Num<i8>(u4), -3)
###
> -3i1 * u2
-3 * u2 : i8
Binder : Mul(-3, Num<i8>(u2))
Reducer: Mul(Num<i8>(u2), -3)
###
> -3i1 * u1
-3 * u1 : i8
Binder : Mul(-3, Num<i8>(u1))
Reducer: Mul(Num<i8>(u1), -3)
###
> 3u * g
3 * g : u8
*** Error: (5,6) Node: g, Message: Invalid operand type: cannot convert type 'g' to 'u8'
Binder : Mul(3, Error(ErrBadType_Src_Dst))
Reducer: Mul(Error(ErrBadType_Src_Dst), 3)
###
> 3u * o
3 * o : u8?
Binder : Guard(?1: o, Mul(3, Unit<u8>(?1)))
Reducer: null
###
> 3u * s
3 * s : u8
*** Error: (5,6) Node: s, Message: Invalid operand type: cannot convert type 's' to 'u8'
Binder : Mul(3, Error(ErrBadType_Src_Dst))
Reducer: Mul(Error(ErrBadType_Src_Dst), 3)
###
> 3u * b
3 * b : u8
Binder : Mul(3, Num<u8>(b))
Reducer: Mul(Num<u8>(b), 3)
###
> 3u * n
3 * n : r8
Binder : Mul(3, n)
###
> 3u * r8
3 * r8 : r8
Binder : Mul(3, r8)
###
> 3u * r4
3 * r4 : r8
Binder : Mul(3, Num<r8>(r4))
###
> 3u * i
3 * i : i
Binder : Mul(3, i)
Reducer: Mul(i, 3)
###
> 3u * i8
3 * i8 : i8
Binder : Mul(3, i8)
Reducer: Mul(i8, 3)
###
> 3u * i4
3 * i4 : i8
Binder : Mul(3, Num<i8>(i4))
Reducer: Mul(Num<i8>(i4), 3)
###
> 3u * i2
3 * i2 : i8
Binder : Mul(3, Num<i8>(i2))
Reducer: Mul(Num<i8>(i2), 3)
###
> 3u * i1
3 * i1 : i8
Binder : Mul(3, Num<i8>(i1))
Reducer: Mul(Num<i8>(i1), 3)
###
> 3u * u8
3 * u8 : u8
Binder : Mul(3, u8)
Reducer: Mul(u8, 3)
###
> 3u * u4
3 * u4 : u8
Binder : Mul(3, Num<u8>(u4))
Reducer: Mul(Num<u8>(u4), 3)
###
> 3u * u2
3 * u2 : u8
Binder : Mul(3, Num<u8>(u2))
Reducer: Mul(Num<u8>(u2), 3)
###
> 3u * u1
3 * u1 : u8
Binder : Mul(3, Num<u8>(u1))
Reducer: Mul(Num<u8>(u1), 3)
###
> 3u1 * g
3 * g : i8
*** Error: (6,7) Node: g, Message: Invalid operand type: cannot convert type 'g' to 'i8'
Binder : Mul(3, Error(ErrBadType_Src_Dst))
Reducer: Mul(Error(ErrBadType_Src_Dst), 3)
###
> 3u1 * o
3 * o : i8?
Binder : Guard(?1: o, Mul(3, Unit<i8>(?1)))
Reducer: null
###
> 3u1 * s
3 * s : i8
*** Error: (6,7) Node: s, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : Mul(3, Error(ErrBadType_Src_Dst))
Reducer: Mul(Error(ErrBadType_Src_Dst), 3)
###
> 3u1 * b
3 * b : i8
Binder : Mul(3, Num<i8>(b))
Reducer: Mul(Num<i8>(b), 3)
###
> 3u1 * n
3 * n : r8
Binder : Mul(3, n)
###
> 3u1 * r8
3 * r8 : r8
Binder : Mul(3, r8)
###
> 3u1 * r4
3 * r4 : r8
Binder : Mul(3, Num<r8>(r4))
###
> 3u1 * i
3 * i : i
Binder : Mul(3, i)
Reducer: Mul(i, 3)
###
> 3u1 * i8
3 * i8 : i8
Binder : Mul(3, i8)
Reducer: Mul(i8, 3)
###
> 3u1 * i4
3 * i4 : i8
Binder : Mul(3, Num<i8>(i4))
Reducer: Mul(Num<i8>(i4), 3)
###
> 3u1 * i2
3 * i2 : i8
Binder : Mul(3, Num<i8>(i2))
Reducer: Mul(Num<i8>(i2), 3)
###
> 3u1 * i1
3 * i1 : i8
Binder : Mul(3, Num<i8>(i1))
Reducer: Mul(Num<i8>(i1), 3)
###
> 3u1 * u8
3 * u8 : u8
Binder : Mul(3, u8)
Reducer: Mul(u8, 3)
###
> 3u1 * u4
3 * u4 : i8
Binder : Mul(3, Num<i8>(u4))
Reducer: Mul(Num<i8>(u4), 3)
###
> 3u1 * u2
3 * u2 : i8
Binder : Mul(3, Num<i8>(u2))
Reducer: Mul(Num<i8>(u2), 3)
###
> 3u1 * u1
3 * u1 : i8
Binder : Mul(3, Num<i8>(u1))
Reducer: Mul(Num<i8>(u1), 3)
###
> 3f * g
3 * g : r8
*** Error: (5,6) Node: g, Message: Invalid operand type: cannot convert type 'g' to 'r8'
Binder : Mul(3, Error(ErrBadType_Src_Dst))
###
> 3f * o
3 * o : r8?
Binder : Guard(?1: o, Mul(3, Unit<r8>(?1)))
Reducer: null
###
> 3f * s
3 * s : r8
*** Error: (5,6) Node: s, Message: Invalid operand type: cannot convert type 's' to 'r8'
Binder : Mul(3, Error(ErrBadType_Src_Dst))
###
> 3f * b
3 * b : r8
Binder : Mul(3, Num<r8>(b))
###
> 3f * n
3 * n : r8
Binder : Mul(3, n)
###
> 3f * r8
3 * r8 : r8
Binder : Mul(3, r8)
###
> 3f * r4
3 * r4 : r8
Binder : Mul(3, Num<r8>(r4))
###
> 3f * i
3 * i : r8
Binder : Mul(3, Num<r8>(i))
###
> 3f * i8
3 * i8 : r8
Binder : Mul(3, Num<r8>(i8))
###
> 3f * i4
3 * i4 : r8
Binder : Mul(3, Num<r8>(i4))
###
> 3f * i2
3 * i2 : r8
Binder : Mul(3, Num<r8>(i2))
###
> 3f * i1
3 * i1 : r8
Binder : Mul(3, Num<r8>(i1))
###
> 3f * u8
3 * u8 : r8
Binder : Mul(3, Num<r8>(u8))
###
> 3f * u4
3 * u4 : r8
Binder : Mul(3, Num<r8>(u4))
###
> 3f * u2
3 * u2 : r8
Binder : Mul(3, Num<r8>(u2))
###
> 3f * u1
3 * u1 : r8
Binder : Mul(3, Num<r8>(u1))
###
> 3d * g
3 * g : r8
*** Error: (5,6) Node: g, Message: Invalid operand type: cannot convert type 'g' to 'r8'
Binder : Mul(3, Error(ErrBadType_Src_Dst))
###
> 3d * o
3 * o : r8?
Binder : Guard(?1: o, Mul(3, Unit<r8>(?1)))
Reducer: null
###
> 3d * s
3 * s : r8
*** Error: (5,6) Node: s, Message: Invalid operand type: cannot convert type 's' to 'r8'
Binder : Mul(3, Error(ErrBadType_Src_Dst))
###
> 3d * b
3 * b : r8
Binder : Mul(3, Num<r8>(b))
###
> 3d * n
3 * n : r8
Binder : Mul(3, n)
###
> 3d * r8
3 * r8 : r8
Binder : Mul(3, r8)
###
> 3d * r4
3 * r4 : r8
Binder : Mul(3, Num<r8>(r4))
###
> 3d * i
3 * i : r8
Binder : Mul(3, Num<r8>(i))
###
> 3d * i8
3 * i8 : r8
Binder : Mul(3, Num<r8>(i8))
###
> 3d * i4
3 * i4 : r8
Binder : Mul(3, Num<r8>(i4))
###
> 3d * i2
3 * i2 : r8
Binder : Mul(3, Num<r8>(i2))
###
> 3d * i1
3 * i1 : r8
Binder : Mul(3, Num<r8>(i1))
###
> 3d * u8
3 * u8 : r8
Binder : Mul(3, Num<r8>(u8))
###
> 3d * u4
3 * u4 : r8
Binder : Mul(3, Num<r8>(u4))
###
> 3d * u2
3 * u2 : r8
Binder : Mul(3, Num<r8>(u2))
###
> 3d * u1
3 * u1 : r8
Binder : Mul(3, Num<r8>(u1))
###
> null * g
null * g : i8?
*** Error: (7,8) Node: g, Message: Invalid operand type: cannot convert type 'g' to 'i8'
Binder : Guard(?1: null, Mul(Unit<i8>(?1), Error(ErrBadType_Src_Dst)))
Reducer: null
###
> null * o
null * o : i8?
Binder : Guard(?1: null, ?2: o, Mul(Unit<i8>(?1), Unit<i8>(?2)))
Reducer: null
###
> null * s
null * s : i8?
*** Error: (7,8) Node: s, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : Guard(?1: null, Mul(Unit<i8>(?1), Error(ErrBadType_Src_Dst)))
Reducer: null
###
> null * b
null * b : i8?
Binder : Guard(?1: null, Mul(Unit<i8>(?1), Num<i8>(b)))
Reducer: null
###
> null * n
null * n : r8?
Binder : Guard(?1: null, Mul(Unit<r8>(?1), n))
Reducer: null
###
> null * r8
null * r8 : r8?
Binder : Guard(?1: null, Mul(Unit<r8>(?1), r8))
Reducer: null
###
> null * r4
null * r4 : r8?
Binder : Guard(?1: null, Mul(Unit<r8>(?1), Num<r8>(r4)))
Reducer: null
###
> null * i
null * i : i?
Binder : Guard(?1: null, Mul(Unit<i>(?1), i))
Reducer: null
###
> null * i8
null * i8 : i8?
Binder : Guard(?1: null, Mul(Unit<i8>(?1), i8))
Reducer: null
###
> null * i4
null * i4 : i8?
Binder : Guard(?1: null, Mul(Unit<i8>(?1), Num<i8>(i4)))
Reducer: null
###
> null * i2
null * i2 : i8?
Binder : Guard(?1: null, Mul(Unit<i8>(?1), Num<i8>(i2)))
Reducer: null
###
> null * i1
null * i1 : i8?
Binder : Guard(?1: null, Mul(Unit<i8>(?1), Num<i8>(i1)))
Reducer: null
###
> null * u8
null * u8 : u8?
Binder : Guard(?1: null, Mul(Unit<u8>(?1), u8))
Reducer: null
###
> null * u4
null * u4 : i8?
Binder : Guard(?1: null, Mul(Unit<i8>(?1), Num<i8>(u4)))
Reducer: null
###
> null * u2
null * u2 : i8?
Binder : Guard(?1: null, Mul(Unit<i8>(?1), Num<i8>(u2)))
Reducer: null
###
> null * u1
null * u1 : i8?
Binder : Guard(?1: null, Mul(Unit<i8>(?1), Num<i8>(u1)))
Reducer: null
###
> i1 * g
i1 * g : i8
*** Error: (5,6) Node: g, Message: Invalid operand type: cannot convert type 'g' to 'i8'
Binder : Mul(Num<i8>(i1), Error(ErrBadType_Src_Dst))
###
> i1 * o
i1 * o : i8?
Binder : Guard(?1: o, Mul(Num<i8>(i1), Unit<i8>(?1)))
Reducer: null
###
> i1 * s
i1 * s : i8
*** Error: (5,6) Node: s, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : Mul(Num<i8>(i1), Error(ErrBadType_Src_Dst))
###
> i1 * b
i1 * b : i8
Binder : Mul(Num<i8>(i1), Num<i8>(b))
###
> i1 * n
i1 * n : r8
Binder : Mul(Num<r8>(i1), n)
###
> i1 * r8
i1 * r8 : r8
Binder : Mul(Num<r8>(i1), r8)
###
> i1 * r4
i1 * r4 : r8
Binder : Mul(Num<r8>(i1), Num<r8>(r4))
###
> i1 * i
i1 * i : i
Binder : Mul(Num<i>(i1), i)
###
> i1 * i8
i1 * i8 : i8
Binder : Mul(Num<i8>(i1), i8)
###
> i1 * i4
i1 * i4 : i8
Binder : Mul(Num<i8>(i1), Num<i8>(i4))
###
> i1 * i2
i1 * i2 : i8
Binder : Mul(Num<i8>(i1), Num<i8>(i2))
###
> i1 * i1
i1 * i1 : i8
Binder : Mul(Num<i8>(i1), Num<i8>(i1))
###
> i1 * u8
i1 * u8 : i8
*** Warning: (5,7) Node: u8, Message: Conversion from unsigned to signed integer can reinterpret large values as negative
Binder : Mul(Num<i8>(i1), Num<i8>(u8))
###
> i1 * u4
i1 * u4 : i8
Binder : Mul(Num<i8>(i1), Num<i8>(u4))
###
> i1 * u2
i1 * u2 : i8
Binder : Mul(Num<i8>(i1), Num<i8>(u2))
###
> i1 * u1
i1 * u1 : i8
Binder : Mul(Num<i8>(i1), Num<i8>(u1))
###
> 3i1 * qb
3 * qb : i8?
Binder : Guard(?1: qb, Mul(3, Num<i8>(?1)))
Reducer: Guard(?1: qb, Mul(Num<i8>(?1), 3))
###
> 3i1 * qn
3 * qn : r8?
Binder : Guard(?1: qn, Mul(3, ?1))
###
> 3i1 * qr8
3 * qr8 : r8?
Binder : Guard(?1: qr8, Mul(3, ?1))
###
> 3i1 * qr4
3 * qr4 : r8?
Binder : Guard(?1: qr4, Mul(3, Num<r8>(?1)))
###
> 3i1 * qi
3 * qi : i?
Binder : Guard(?1: qi, Mul(3, ?1))
Reducer: Guard(?1: qi, Mul(?1, 3))
###
> 3i1 * qi8
3 * qi8 : i8?
Binder : Guard(?1: qi8, Mul(3, ?1))
Reducer: Guard(?1: qi8, Mul(?1, 3))
###
> 3i1 * qi4
3 * qi4 : i8?
Binder : Guard(?1: qi4, Mul(3, Num<i8>(?1)))
Reducer: Guard(?1: qi4, Mul(Num<i8>(?1), 3))
###
> 3i1 * qi2
3 * qi2 : i8?
Binder : Guard(?1: qi2, Mul(3, Num<i8>(?1)))
Reducer: Guard(?1: qi2, Mul(Num<i8>(?1), 3))
###
> 3i1 * qi1
3 * qi1 : i8?
Binder : Guard(?1: qi1, Mul(3, Num<i8>(?1)))
Reducer: Guard(?1: qi1, Mul(Num<i8>(?1), 3))
###
> 3i1 * qu8
3 * qu8 : i8?
*** Warning: (6,9) Node: qu8, Message: Conversion from unsigned to signed integer can reinterpret large values as negative
Binder : Guard(?1: qu8, Mul(3, Num<i8>(?1)))
Reducer: Guard(?1: qu8, Mul(Num<i8>(?1), 3))
###
> 3i1 * qu4
3 * qu4 : i8?
Binder : Guard(?1: qu4, Mul(3, Num<i8>(?1)))
Reducer: Guard(?1: qu4, Mul(Num<i8>(?1), 3))
###
> 3i1 * qu2
3 * qu2 : i8?
Binder : Guard(?1: qu2, Mul(3, Num<i8>(?1)))
Reducer: Guard(?1: qu2, Mul(Num<i8>(?1), 3))
###
> 3i1 * qu1
3 * qu1 : i8?
Binder : Guard(?1: qu1, Mul(3, Num<i8>(?1)))
Reducer: Guard(?1: qu1, Mul(Num<i8>(?1), 3))
###
> -3 * qb
-3 * qb : i8?
Binder : Guard(?1: qb, Mul(-3, Num<i8>(?1)))
Reducer: Guard(?1: qb, Mul(Num<i8>(?1), -3))
###
> -3 * qn
-3 * qn : r8?
Binder : Guard(?1: qn, Mul(-3, ?1))
###
> -3 * qr8
-3 * qr8 : r8?
Binder : Guard(?1: qr8, Mul(-3, ?1))
###
> -3 * qr4
-3 * qr4 : r8?
Binder : Guard(?1: qr4, Mul(-3, Num<r8>(?1)))
###
> -3 * qi
-3 * qi : i?
Binder : Guard(?1: qi, Mul(-3, ?1))
Reducer: Guard(?1: qi, Mul(?1, -3))
###
> -3 * qi8
-3 * qi8 : i8?
Binder : Guard(?1: qi8, Mul(-3, ?1))
Reducer: Guard(?1: qi8, Mul(?1, -3))
###
> -3 * qi4
-3 * qi4 : i8?
Binder : Guard(?1: qi4, Mul(-3, Num<i8>(?1)))
Reducer: Guard(?1: qi4, Mul(Num<i8>(?1), -3))
###
> -3 * qi2
-3 * qi2 : i8?
Binder : Guard(?1: qi2, Mul(-3, Num<i8>(?1)))
Reducer: Guard(?1: qi2, Mul(Num<i8>(?1), -3))
###
> -3 * qi1
-3 * qi1 : i8?
Binder : Guard(?1: qi1, Mul(-3, Num<i8>(?1)))
Reducer: Guard(?1: qi1, Mul(Num<i8>(?1), -3))
###
> -3 * qu8
-3 * qu8 : i8?
*** Warning: (5,8) Node: qu8, Message: Conversion from unsigned to signed integer can reinterpret large values as negative
Binder : Guard(?1: qu8, Mul(-3, Num<i8>(?1)))
Reducer: Guard(?1: qu8, Mul(Num<i8>(?1), -3))
###
> -3 * qu4
-3 * qu4 : i8?
Binder : Guard(?1: qu4, Mul(-3, Num<i8>(?1)))
Reducer: Guard(?1: qu4, Mul(Num<i8>(?1), -3))
###
> -3 * qu2
-3 * qu2 : i8?
Binder : Guard(?1: qu2, Mul(-3, Num<i8>(?1)))
Reducer: Guard(?1: qu2, Mul(Num<i8>(?1), -3))
###
> -3 * qu1
-3 * qu1 : i8?
Binder : Guard(?1: qu1, Mul(-3, Num<i8>(?1)))
Reducer: Guard(?1: qu1, Mul(Num<i8>(?1), -3))
###
> 3u * qb
3 * qb : u8?
Binder : Guard(?1: qb, Mul(3, Num<u8>(?1)))
Reducer: Guard(?1: qb, Mul(Num<u8>(?1), 3))
###
> 3u * qn
3 * qn : r8?
Binder : Guard(?1: qn, Mul(3, ?1))
###
> 3u * qr8
3 * qr8 : r8?
Binder : Guard(?1: qr8, Mul(3, ?1))
###
> 3u * qr4
3 * qr4 : r8?
Binder : Guard(?1: qr4, Mul(3, Num<r8>(?1)))
###
> 3u * qi
3 * qi : i?
Binder : Guard(?1: qi, Mul(3, ?1))
Reducer: Guard(?1: qi, Mul(?1, 3))
###
> 3u * qi8
3 * qi8 : i8?
Binder : Guard(?1: qi8, Mul(3, ?1))
Reducer: Guard(?1: qi8, Mul(?1, 3))
###
> 3u * qi4
3 * qi4 : i8?
Binder : Guard(?1: qi4, Mul(3, Num<i8>(?1)))
Reducer: Guard(?1: qi4, Mul(Num<i8>(?1), 3))
###
> 3u * qi2
3 * qi2 : i8?
Binder : Guard(?1: qi2, Mul(3, Num<i8>(?1)))
Reducer: Guard(?1: qi2, Mul(Num<i8>(?1), 3))
###
> 3u * qi1
3 * qi1 : i8?
Binder : Guard(?1: qi1, Mul(3, Num<i8>(?1)))
Reducer: Guard(?1: qi1, Mul(Num<i8>(?1), 3))
###
> 3u * qu8
3 * qu8 : u8?
Binder : Guard(?1: qu8, Mul(3, ?1))
Reducer: Guard(?1: qu8, Mul(?1, 3))
###
> 3u * qu4
3 * qu4 : u8?
Binder : Guard(?1: qu4, Mul(3, Num<u8>(?1)))
Reducer: Guard(?1: qu4, Mul(Num<u8>(?1), 3))
###
> 3u * qu2
3 * qu2 : u8?
Binder : Guard(?1: qu2, Mul(3, Num<u8>(?1)))
Reducer: Guard(?1: qu2, Mul(Num<u8>(?1), 3))
###
> 3u * qu1
3 * qu1 : u8?
Binder : Guard(?1: qu1, Mul(3, Num<u8>(?1)))
Reducer: Guard(?1: qu1, Mul(Num<u8>(?1), 3))
###
> 3u2 * qb
3 * qb : i8?
Binder : Guard(?1: qb, Mul(3, Num<i8>(?1)))
Reducer: Guard(?1: qb, Mul(Num<i8>(?1), 3))
###
> 3u2 * qn
3 * qn : r8?
Binder : Guard(?1: qn, Mul(3, ?1))
###
> 3u2 * qr8
3 * qr8 : r8?
Binder : Guard(?1: qr8, Mul(3, ?1))
###
> 3u2 * qr4
3 * qr4 : r8?
Binder : Guard(?1: qr4, Mul(3, Num<r8>(?1)))
###
> 3u2 * qi
3 * qi : i?
Binder : Guard(?1: qi, Mul(3, ?1))
Reducer: Guard(?1: qi, Mul(?1, 3))
###
> 3u2 * qi8
3 * qi8 : i8?
Binder : Guard(?1: qi8, Mul(3, ?1))
Reducer: Guard(?1: qi8, Mul(?1, 3))
###
> 3u2 * qi4
3 * qi4 : i8?
Binder : Guard(?1: qi4, Mul(3, Num<i8>(?1)))
Reducer: Guard(?1: qi4, Mul(Num<i8>(?1), 3))
###
> 3u2 * qi2
3 * qi2 : i8?
Binder : Guard(?1: qi2, Mul(3, Num<i8>(?1)))
Reducer: Guard(?1: qi2, Mul(Num<i8>(?1), 3))
###
> 3u2 * qi1
3 * qi1 : i8?
Binder : Guard(?1: qi1, Mul(3, Num<i8>(?1)))
Reducer: Guard(?1: qi1, Mul(Num<i8>(?1), 3))
###
> 3u2 * qu8
3 * qu8 : u8?
Binder : Guard(?1: qu8, Mul(3, ?1))
Reducer: Guard(?1: qu8, Mul(?1, 3))
###
> 3u2 * qu4
3 * qu4 : i8?
Binder : Guard(?1: qu4, Mul(3, Num<i8>(?1)))
Reducer: Guard(?1: qu4, Mul(Num<i8>(?1), 3))
###
> 3u2 * qu2
3 * qu2 : i8?
Binder : Guard(?1: qu2, Mul(3, Num<i8>(?1)))
Reducer: Guard(?1: qu2, Mul(Num<i8>(?1), 3))
###
> 3u2 * qu1
3 * qu1 : i8?
Binder : Guard(?1: qu1, Mul(3, Num<i8>(?1)))
Reducer: Guard(?1: qu1, Mul(Num<i8>(?1), 3))
###
> 3f * qb
3 * qb : r8?
Binder : Guard(?1: qb, Mul(3, Num<r8>(?1)))
###
> 3f * qn
3 * qn : r8?
Binder : Guard(?1: qn, Mul(3, ?1))
###
> 3f * qr8
3 * qr8 : r8?
Binder : Guard(?1: qr8, Mul(3, ?1))
###
> 3f * qr4
3 * qr4 : r8?
Binder : Guard(?1: qr4, Mul(3, Num<r8>(?1)))
###
> 3f * qi
3 * qi : r8?
Binder : Guard(?1: qi, Mul(3, Num<r8>(?1)))
###
> 3f * qi8
3 * qi8 : r8?
Binder : Guard(?1: qi8, Mul(3, Num<r8>(?1)))
###
> 3f * qi4
3 * qi4 : r8?
Binder : Guard(?1: qi4, Mul(3, Num<r8>(?1)))
###
> 3f * qi2
3 * qi2 : r8?
Binder : Guard(?1: qi2, Mul(3, Num<r8>(?1)))
###
> 3f * qi1
3 * qi1 : r8?
Binder : Guard(?1: qi1, Mul(3, Num<r8>(?1)))
###
> 3f * qu8
3 * qu8 : r8?
Binder : Guard(?1: qu8, Mul(3, Num<r8>(?1)))
###
> 3f * qu4
3 * qu4 : r8?
Binder : Guard(?1: qu4, Mul(3, Num<r8>(?1)))
###
> 3f * qu2
3 * qu2 : r8?
Binder : Guard(?1: qu2, Mul(3, Num<r8>(?1)))
###
> 3f * qu1
3 * qu1 : r8?
Binder : Guard(?1: qu1, Mul(3, Num<r8>(?1)))
###
> 3d * qb
3 * qb : r8?
Binder : Guard(?1: qb, Mul(3, Num<r8>(?1)))
###
> 3d * qn
3 * qn : r8?
Binder : Guard(?1: qn, Mul(3, ?1))
###
> 3d * qr8
3 * qr8 : r8?
Binder : Guard(?1: qr8, Mul(3, ?1))
###
> 3d * qr4
3 * qr4 : r8?
Binder : Guard(?1: qr4, Mul(3, Num<r8>(?1)))
###
> 3d * qi
3 * qi : r8?
Binder : Guard(?1: qi, Mul(3, Num<r8>(?1)))
###
> 3d * qi8
3 * qi8 : r8?
Binder : Guard(?1: qi8, Mul(3, Num<r8>(?1)))
###
> 3d * qi4
3 * qi4 : r8?
Binder : Guard(?1: qi4, Mul(3, Num<r8>(?1)))
###
> 3d * qi2
3 * qi2 : r8?
Binder : Guard(?1: qi2, Mul(3, Num<r8>(?1)))
###
> 3d * qi1
3 * qi1 : r8?
Binder : Guard(?1: qi1, Mul(3, Num<r8>(?1)))
###
> 3d * qu8
3 * qu8 : r8?
Binder : Guard(?1: qu8, Mul(3, Num<r8>(?1)))
###
> 3d * qu4
3 * qu4 : r8?
Binder : Guard(?1: qu4, Mul(3, Num<r8>(?1)))
###
> 3d * qu2
3 * qu2 : r8?
Binder : Guard(?1: qu2, Mul(3, Num<r8>(?1)))
###
> 3d * qu1
3 * qu1 : r8?
Binder : Guard(?1: qu1, Mul(3, Num<r8>(?1)))
###
> null * qb
null * qb : i8?
Binder : Guard(?1: null, ?2: qb, Mul(Unit<i8>(?1), Num<i8>(?2)))
Reducer: null
###
> null * qn
null * qn : r8?
Binder : Guard(?1: null, ?2: qn, Mul(Unit<r8>(?1), ?2))
Reducer: null
###
> null * qr8
null * qr8 : r8?
Binder : Guard(?1: null, ?2: qr8, Mul(Unit<r8>(?1), ?2))
Reducer: null
###
> null * qr4
null * qr4 : r8?
Binder : Guard(?1: null, ?2: qr4, Mul(Unit<r8>(?1), Num<r8>(?2)))
Reducer: null
###
> null * qi
null * qi : i?
Binder : Guard(?1: null, ?2: qi, Mul(Unit<i>(?1), ?2))
Reducer: null
###
> null * qi8
null * qi8 : i8?
Binder : Guard(?1: null, ?2: qi8, Mul(Unit<i8>(?1), ?2))
Reducer: null
###
> null * qi4
null * qi4 : i8?
Binder : Guard(?1: null, ?2: qi4, Mul(Unit<i8>(?1), Num<i8>(?2)))
Reducer: null
###
> null * qi2
null * qi2 : i8?
Binder : Guard(?1: null, ?2: qi2, Mul(Unit<i8>(?1), Num<i8>(?2)))
Reducer: null
###
> null * qi1
null * qi1 : i8?
Binder : Guard(?1: null, ?2: qi1, Mul(Unit<i8>(?1), Num<i8>(?2)))
Reducer: null
###
> null * qu8
null * qu8 : u8?
Binder : Guard(?1: null, ?2: qu8, Mul(Unit<u8>(?1), ?2))
Reducer: null
###
> null * qu4
null * qu4 : i8?
Binder : Guard(?1: null, ?2: qu4, Mul(Unit<i8>(?1), Num<i8>(?2)))
Reducer: null
###
> null * qu2
null * qu2 : i8?
Binder : Guard(?1: null, ?2: qu2, Mul(Unit<i8>(?1), Num<i8>(?2)))
Reducer: null
###
> null * qu1
null * qu1 : i8?
Binder : Guard(?1: null, ?2: qu1, Mul(Unit<i8>(?1), Num<i8>(?2)))
Reducer: null
###
> i1 * qb
i1 * qb : i8?
Binder : Guard(?1: qb, Mul(Num<i8>(i1), Num<i8>(?1)))
###
> i1 * qn
i1 * qn : r8?
Binder : Guard(?1: qn, Mul(Num<r8>(i1), ?1))
###
> i1 * qr8
i1 * qr8 : r8?
Binder : Guard(?1: qr8, Mul(Num<r8>(i1), ?1))
###
> i1 * qr4
i1 * qr4 : r8?
Binder : Guard(?1: qr4, Mul(Num<r8>(i1), Num<r8>(?1)))
###
> i1 * qi
i1 * qi : i?
Binder : Guard(?1: qi, Mul(Num<i>(i1), ?1))
###
> i1 * qi8
i1 * qi8 : i8?
Binder : Guard(?1: qi8, Mul(Num<i8>(i1), ?1))
###
> i1 * qi4
i1 * qi4 : i8?
Binder : Guard(?1: qi4, Mul(Num<i8>(i1), Num<i8>(?1)))
###
> i1 * qi2
i1 * qi2 : i8?
Binder : Guard(?1: qi2, Mul(Num<i8>(i1), Num<i8>(?1)))
###
> i1 * qi1
i1 * qi1 : i8?
Binder : Guard(?1: qi1, Mul(Num<i8>(i1), Num<i8>(?1)))
###
> i1 * qu8
i1 * qu8 : i8?
*** Warning: (5,8) Node: qu8, Message: Conversion from unsigned to signed integer can reinterpret large values as negative
Binder : Guard(?1: qu8, Mul(Num<i8>(i1), Num<i8>(?1)))
###
> i1 * qu4
i1 * qu4 : i8?
Binder : Guard(?1: qu4, Mul(Num<i8>(i1), Num<i8>(?1)))
###
> i1 * qu2
i1 * qu2 : i8?
Binder : Guard(?1: qu2, Mul(Num<i8>(i1), Num<i8>(?1)))
###
> i1 * qu1
i1 * qu1 : i8?
Binder : Guard(?1: qu1, Mul(Num<i8>(i1), Num<i8>(?1)))
###
> 1 / (0 / r8)
1 / (0 / r8) : r8
Binder : Mul(1, [/] Mul(0, [/] r8))
Reducer: Mul([/] Mul(0, [/] r8))
###
> 4 * -(5 * (7- i8))
4 * -(5 * (7 - i8)) : i8
Binder : Mul(4, Add([-] Mul(5, Add(7, [-] i8))))
Reducer: Mul(Add(i8, [-] 7), 20)
###
> -1 * (2 - r8)
-1 * (2 - r8) : r8
Binder : Mul(-1, Add(2, [-] r8))
Reducer: Add(-2, r8)
###

**** New globals: {b:b*, g:g*, i:i*, i1:i1*, i2:i2*, i4:i4*, i8:i8*, n:r8*, o:o*, qb:b?*, qi:i?*, qi1:i1?*, qi2:i2?*, qi4:i4?*, qi8:i8?*, qn:r8?*, qr4:r4?*, qr8:r8?*, qu1:u1?*, qu2:u2?*, qu4:u4?*, qu8:u8?*, r4:r4*, r8:r8*, s:s*, u1:u1*, u2:u2*, u4:u4*, u8:u8*}

> 3 * g
3 * g : i8*
*** Error: (4,5) Node: g, Message: Invalid operand type: cannot convert type 'g' to 'i8'
Binder : ForEach(*1: g, Mul(3, Error(ErrBadType_Src_Dst)))
Reducer: ForEach(*1: g, Mul(Error(ErrBadType_Src_Dst), 3))
###
> 3 * o
3 * o : i8?*
Binder : ForEach(*1: o, Guard(?2: *1, Mul(3, Unit<i8>(?2))))
Reducer: ForEach(*1: o, null)
###
> 3 * s
3 * s : i8*
*** Error: (4,5) Node: s, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : ForEach(*1: s, Mul(3, Error(ErrBadType_Src_Dst)))
Reducer: ForEach(*1: s, Mul(Error(ErrBadType_Src_Dst), 3))
###
> 3 * b
3 * b : i8*
Binder : ForEach(*1: b, Mul(3, Num<i8>(*1)))
Reducer: ForEach(*1: b, Mul(Num<i8>(*1), 3))
###
> 3 * n
3 * n : r8*
Binder : ForEach(*1: n, Mul(3, *1))
###
> 3 * r8
3 * r8 : r8*
Binder : ForEach(*1: r8, Mul(3, *1))
###
> 3 * r4
3 * r4 : r8*
Binder : ForEach(*1: r4, Mul(3, Num<r8>(*1)))
###
> 3 * i
3 * i : i*
Binder : ForEach(*1: i, Mul(3, *1))
Reducer: ForEach(*1: i, Mul(*1, 3))
###
> 3 * i8
3 * i8 : i8*
Binder : ForEach(*1: i8, Mul(3, *1))
Reducer: ForEach(*1: i8, Mul(*1, 3))
###
> 3 * i4
3 * i4 : i8*
Binder : ForEach(*1: i4, Mul(3, Num<i8>(*1)))
Reducer: ForEach(*1: i4, Mul(Num<i8>(*1), 3))
###
> 3 * i2
3 * i2 : i8*
Binder : ForEach(*1: i2, Mul(3, Num<i8>(*1)))
Reducer: ForEach(*1: i2, Mul(Num<i8>(*1), 3))
###
> 3 * i1
3 * i1 : i8*
Binder : ForEach(*1: i1, Mul(3, Num<i8>(*1)))
Reducer: ForEach(*1: i1, Mul(Num<i8>(*1), 3))
###
> 3 * u8
3 * u8 : i8*
*** Warning: (4,6) Node: u8, Message: Conversion from unsigned to signed integer can reinterpret large values as negative
Binder : ForEach(*1: u8, Mul(3, Num<i8>(*1)))
Reducer: ForEach(*1: u8, Mul(Num<i8>(*1), 3))
###
> 3 * u4
3 * u4 : i8*
Binder : ForEach(*1: u4, Mul(3, Num<i8>(*1)))
Reducer: ForEach(*1: u4, Mul(Num<i8>(*1), 3))
###
> 3 * u2
3 * u2 : i8*
Binder : ForEach(*1: u2, Mul(3, Num<i8>(*1)))
Reducer: ForEach(*1: u2, Mul(Num<i8>(*1), 3))
###
> 3 * u1
3 * u1 : i8*
Binder : ForEach(*1: u1, Mul(3, Num<i8>(*1)))
Reducer: ForEach(*1: u1, Mul(Num<i8>(*1), 3))
###
> 3f * g
3 * g : r8*
*** Error: (5,6) Node: g, Message: Invalid operand type: cannot convert type 'g' to 'r8'
Binder : ForEach(*1: g, Mul(3, Error(ErrBadType_Src_Dst)))
###
> 3f * o
3 * o : r8?*
Binder : ForEach(*1: o, Guard(?2: *1, Mul(3, Unit<r8>(?2))))
Reducer: ForEach(*1: o, null)
###
> 3f * s
3 * s : r8*
*** Error: (5,6) Node: s, Message: Invalid operand type: cannot convert type 's' to 'r8'
Binder : ForEach(*1: s, Mul(3, Error(ErrBadType_Src_Dst)))
###
> 3f * b
3 * b : r8*
Binder : ForEach(*1: b, Mul(3, Num<r8>(*1)))
###
> 3f * n
3 * n : r8*
Binder : ForEach(*1: n, Mul(3, *1))
###
> 3f * r8
3 * r8 : r8*
Binder : ForEach(*1: r8, Mul(3, *1))
###
> 3f * r4
3 * r4 : r8*
Binder : ForEach(*1: r4, Mul(3, Num<r8>(*1)))
###
> 3f * i
3 * i : r8*
Binder : ForEach(*1: i, Mul(3, Num<r8>(*1)))
###
> 3f * i8
3 * i8 : r8*
Binder : ForEach(*1: i8, Mul(3, Num<r8>(*1)))
###
> 3f * i4
3 * i4 : r8*
Binder : ForEach(*1: i4, Mul(3, Num<r8>(*1)))
###
> 3f * i2
3 * i2 : r8*
Binder : ForEach(*1: i2, Mul(3, Num<r8>(*1)))
###
> 3f * i1
3 * i1 : r8*
Binder : ForEach(*1: i1, Mul(3, Num<r8>(*1)))
###
> 3f * u8
3 * u8 : r8*
Binder : ForEach(*1: u8, Mul(3, Num<r8>(*1)))
###
> 3f * u4
3 * u4 : r8*
Binder : ForEach(*1: u4, Mul(3, Num<r8>(*1)))
###
> 3f * u2
3 * u2 : r8*
Binder : ForEach(*1: u2, Mul(3, Num<r8>(*1)))
###
> 3f * u1
3 * u1 : r8*
Binder : ForEach(*1: u1, Mul(3, Num<r8>(*1)))
###
> i1 * g
i1 * g : i8*
*** Error: (5,6) Node: g, Message: Invalid operand type: cannot convert type 'g' to 'i8'
Binder : ForEach(*1: i1, *2: g, Mul(Num<i8>(*1), Error(ErrBadType_Src_Dst)))
###
> i1 * o
i1 * o : i8?*
Binder : ForEach(*1: i1, *2: o, Guard(?3: *2, Mul(Num<i8>(*1), Unit<i8>(?3))))
Reducer: ForEach(*1: i1, *2: o, null)
###
> i1 * s
i1 * s : i8*
*** Error: (5,6) Node: s, Message: Invalid operand type: cannot convert type 's' to 'i8'
Binder : ForEach(*1: i1, *2: s, Mul(Num<i8>(*1), Error(ErrBadType_Src_Dst)))
###
> i1 * b
i1 * b : i8*
Binder : ForEach(*1: i1, *2: b, Mul(Num<i8>(*1), Num<i8>(*2)))
###
> i1 * n
i1 * n : r8*
Binder : ForEach(*1: i1, *2: n, Mul(Num<r8>(*1), *2))
###
> i1 * r8
i1 * r8 : r8*
Binder : ForEach(*1: i1, *2: r8, Mul(Num<r8>(*1), *2))
###
> i1 * r4
i1 * r4 : r8*
Binder : ForEach(*1: i1, *2: r4, Mul(Num<r8>(*1), Num<r8>(*2)))
###
> i1 * i
i1 * i : i*
Binder : ForEach(*1: i1, *2: i, Mul(Num<i>(*1), *2))
###
> i1 * i8
i1 * i8 : i8*
Binder : ForEach(*1: i1, *2: i8, Mul(Num<i8>(*1), *2))
###
> i1 * i4
i1 * i4 : i8*
Binder : ForEach(*1: i1, *2: i4, Mul(Num<i8>(*1), Num<i8>(*2)))
###
> i1 * i2
i1 * i2 : i8*
Binder : ForEach(*1: i1, *2: i2, Mul(Num<i8>(*1), Num<i8>(*2)))
###
> i1 * i1
i1 * i1 : i8*
Binder : ForEach(*1: i1, *2: i1, Mul(Num<i8>(*1), Num<i8>(*2)))
Reducer: ForEach(*1: i1, Mul(Num<i8>(*1), Num<i8>(*1)))
###
> i1 * u8
i1 * u8 : i8*
*** Warning: (5,7) Node: u8, Message: Conversion from unsigned to signed integer can reinterpret large values as negative
Binder : ForEach(*1: i1, *2: u8, Mul(Num<i8>(*1), Num<i8>(*2)))
###
> i1 * u4
i1 * u4 : i8*
Binder : ForEach(*1: i1, *2: u4, Mul(Num<i8>(*1), Num<i8>(*2)))
###
> i1 * u2
i1 * u2 : i8*
Binder : ForEach(*1: i1, *2: u2, Mul(Num<i8>(*1), Num<i8>(*2)))
###
> i1 * u1
i1 * u1 : i8*
Binder : ForEach(*1: i1, *2: u1, Mul(Num<i8>(*1), Num<i8>(*2)))
###
> 3 * qb
3 * qb : i8?*
Binder : ForEach(*1: qb, Guard(?2: *1, Mul(3, Num<i8>(?2))))
Reducer: ForEach(*1: qb, Guard(?2: *1, Mul(Num<i8>(?2), 3)))
###
> 3 * qn
3 * qn : r8?*
Binder : ForEach(*1: qn, Guard(?2: *1, Mul(3, ?2)))
###
> 3 * qr8
3 * qr8 : r8?*
Binder : ForEach(*1: qr8, Guard(?2: *1, Mul(3, ?2)))
###
> 3 * qr4
3 * qr4 : r8?*
Binder : ForEach(*1: qr4, Guard(?2: *1, Mul(3, Num<r8>(?2))))
###
> 3 * qi
3 * qi : i?*
Binder : ForEach(*1: qi, Guard(?2: *1, Mul(3, ?2)))
Reducer: ForEach(*1: qi, Guard(?2: *1, Mul(?2, 3)))
###
> 3 * qi8
3 * qi8 : i8?*
Binder : ForEach(*1: qi8, Guard(?2: *1, Mul(3, ?2)))
Reducer: ForEach(*1: qi8, Guard(?2: *1, Mul(?2, 3)))
###
> 3 * qi4
3 * qi4 : i8?*
Binder : ForEach(*1: qi4, Guard(?2: *1, Mul(3, Num<i8>(?2))))
Reducer: ForEach(*1: qi4, Guard(?2: *1, Mul(Num<i8>(?2), 3)))
###
> 3 * qi2
3 * qi2 : i8?*
Binder : ForEach(*1: qi2, Guard(?2: *1, Mul(3, Num<i8>(?2))))
Reducer: ForEach(*1: qi2, Guard(?2: *1, Mul(Num<i8>(?2), 3)))
###
> 3 * qi1
3 * qi1 : i8?*
Binder : ForEach(*1: qi1, Guard(?2: *1, Mul(3, Num<i8>(?2))))
Reducer: ForEach(*1: qi1, Guard(?2: *1, Mul(Num<i8>(?2), 3)))
###
> 3 * qu8
3 * qu8 : i8?*
*** Warning: (4,7) Node: qu8, Message: Conversion from unsigned to signed integer can reinterpret large values as negative
Binder : ForEach(*1: qu8, Guard(?2: *1, Mul(3, Num<i8>(?2))))
Reducer: ForEach(*1: qu8, Guard(?2: *1, Mul(Num<i8>(?2), 3)))
###
> 3 * qu4
3 * qu4 : i8?*
Binder : ForEach(*1: qu4, Guard(?2: *1, Mul(3, Num<i8>(?2))))
Reducer: ForEach(*1: qu4, Guard(?2: *1, Mul(Num<i8>(?2), 3)))
###
> 3 * qu2
3 * qu2 : i8?*
Binder : ForEach(*1: qu2, Guard(?2: *1, Mul(3, Num<i8>(?2))))
Reducer: ForEach(*1: qu2, Guard(?2: *1, Mul(Num<i8>(?2), 3)))
###
> 3 * qu1
3 * qu1 : i8?*
Binder : ForEach(*1: qu1, Guard(?2: *1, Mul(3, Num<i8>(?2))))
Reducer: ForEach(*1: qu1, Guard(?2: *1, Mul(Num<i8>(?2), 3)))
###
> 3f * qb
3 * qb : r8?*
Binder : ForEach(*1: qb, Guard(?2: *1, Mul(3, Num<r8>(?2))))
###
> 3f * qn
3 * qn : r8?*
Binder : ForEach(*1: qn, Guard(?2: *1, Mul(3, ?2)))
###
> 3f * qr8
3 * qr8 : r8?*
Binder : ForEach(*1: qr8, Guard(?2: *1, Mul(3, ?2)))
###
> 3f * qr4
3 * qr4 : r8?*
Binder : ForEach(*1: qr4, Guard(?2: *1, Mul(3, Num<r8>(?2))))
###
> 3f * qi
3 * qi : r8?*
Binder : ForEach(*1: qi, Guard(?2: *1, Mul(3, Num<r8>(?2))))
###
> 3f * qi8
3 * qi8 : r8?*
Binder : ForEach(*1: qi8, Guard(?2: *1, Mul(3, Num<r8>(?2))))
###
> 3f * qi4
3 * qi4 : r8?*
Binder : ForEach(*1: qi4, Guard(?2: *1, Mul(3, Num<r8>(?2))))
###
> 3f * qi2
3 * qi2 : r8?*
Binder : ForEach(*1: qi2, Guard(?2: *1, Mul(3, Num<r8>(?2))))
###
> 3f * qi1
3 * qi1 : r8?*
Binder : ForEach(*1: qi1, Guard(?2: *1, Mul(3, Num<r8>(?2))))
###
> 3f * qu8
3 * qu8 : r8?*
Binder : ForEach(*1: qu8, Guard(?2: *1, Mul(3, Num<r8>(?2))))
###
> 3f * qu4
3 * qu4 : r8?*
Binder : ForEach(*1: qu4, Guard(?2: *1, Mul(3, Num<r8>(?2))))
###
> 3f * qu2
3 * qu2 : r8?*
Binder : ForEach(*1: qu2, Guard(?2: *1, Mul(3, Num<r8>(?2))))
###
> 3f * qu1
3 * qu1 : r8?*
Binder : ForEach(*1: qu1, Guard(?2: *1, Mul(3, Num<r8>(?2))))
###
> i1 * qb
i1 * qb : i8?*
Binder : ForEach(*1: i1, *2: qb, Guard(?3: *2, Mul(Num<i8>(*1), Num<i8>(?3))))
###
> i1 * qn
i1 * qn : r8?*
Binder : ForEach(*1: i1, *2: qn, Guard(?3: *2, Mul(Num<r8>(*1), ?3)))
###
> i1 * qr8
i1 * qr8 : r8?*
Binder : ForEach(*1: i1, *2: qr8, Guard(?3: *2, Mul(Num<r8>(*1), ?3)))
###
> i1 * qr4
i1 * qr4 : r8?*
Binder : ForEach(*1: i1, *2: qr4, Guard(?3: *2, Mul(Num<r8>(*1), Num<r8>(?3))))
###
> i1 * qi
i1 * qi : i?*
Binder : ForEach(*1: i1, *2: qi, Guard(?3: *2, Mul(Num<i>(*1), ?3)))
###
> i1 * qi8
i1 * qi8 : i8?*
Binder : ForEach(*1: i1, *2: qi8, Guard(?3: *2, Mul(Num<i8>(*1), ?3)))
###
> i1 * qi4
i1 * qi4 : i8?*
Binder : ForEach(*1: i1, *2: qi4, Guard(?3: *2, Mul(Num<i8>(*1), Num<i8>(?3))))
###
> i1 * qi2
i1 * qi2 : i8?*
Binder : ForEach(*1: i1, *2: qi2, Guard(?3: *2, Mul(Num<i8>(*1), Num<i8>(?3))))
###
> i1 * qi1
i1 * qi1 : i8?*
Binder : ForEach(*1: i1, *2: qi1, Guard(?3: *2, Mul(Num<i8>(*1), Num<i8>(?3))))
###
> i1 * qu8
i1 * qu8 : i8?*
*** Warning: (5,8) Node: qu8, Message: Conversion from unsigned to signed integer can reinterpret large values as negative
Binder : ForEach(*1: i1, *2: qu8, Guard(?3: *2, Mul(Num<i8>(*1), Num<i8>(?3))))
###
> i1 * qu4
i1 * qu4 : i8?*
Binder : ForEach(*1: i1, *2: qu4, Guard(?3: *2, Mul(Num<i8>(*1), Num<i8>(?3))))
###
> i1 * qu2
i1 * qu2 : i8?*
Binder : ForEach(*1: i1, *2: qu2, Guard(?3: *2, Mul(Num<i8>(*1), Num<i8>(?3))))
###
> i1 * qu1
i1 * qu1 : i8?*
Binder : ForEach(*1: i1, *2: qu1, Guard(?3: *2, Mul(Num<i8>(*1), Num<i8>(?3))))
###
