﻿:: {b:(b,b), qb:(b,b)?, r8:r8, qr8:r8?, r4:r4, qr4:r4?, i:i, qi:i?, i8:i8, qi8:i8?, i4:i4, qi4:i4?, i2:i2, qi2:i2?, i1:i1, qi1:i1?, u8:u8, qu8:u8?, u4:u4, qu4:u4?, u2:u2, qu2:u2?, u1:u1, qu1:u1?, d:d, t:t}

// Negation
-t
-d

// Add/Sub
d + t
d - t
d - d

// Mul
t * i
t * i1
t * i2
t * i4
t * i8
t * qi
t * qi1
t * qi2
t * qi4
t * qi8
t * r4
t * r8
t * qr4
t * qr8
t * u1
t * u2
t * u4
t * u8
t * qu1
t * qu2
t * qu4
t * qu8

// Normalize Mul
i   * t
i1  * t
i2  * t
i4  * t
i8  * t
qi  * t
qi1 * t
qi2 * t
qi4 * t
qi8 * t
r4  * t
r8  * t
qr4 * t
qr8 * t
u1  * t
u2  * t
u4  * t
u8  * t
qu1 * t
qu2 * t
qu4 * t
qu8 * t

// Div
t / t
t / i
t / i1
t / i2
t / i4
t / i8
t / qi
t / qi1
t / qi2
t / qi4
t / qi8
t / r4
t / r8
t / qr4
t / qr8
t / u1
t / u2
t / u4
t / u8
t / qu1
t / qu2
t / qu4
t / qu8

// IntDiv
t div t
t div i
t div i1
t div i2
t div i4
t div i8
t div qi
t div qi1
t div qi2
t div qi4
t div qi8
t div r4
t div r8
t div qr4
t div qr8
t div u1
t div u2
t div u4
t div u8
t div qu1
t div qu2
t div qu4
t div qu8

// IntMod
t mod t

// Error cases
d + d
t + i4
t - r8
t * t
d * t
d * d
d * r8
d * i4
r8 / t
d / t
t / d
d / d
d / r8
d / i8
d + b
d - b
d * b
d / b
b / d
t + b
t - b
t * b
t / b
b / t
d + qb
d - qb
d * qb
d / qb
qb / d
t + qb
t - qb
t * qb
t / qb
qb / t
i8 div t
t mod i8
i8 mod t
