AddGate[TT] {.final.} = ref object of Gate[TT]
SubGate[TT] {.final.} = ref object of Gate[TT]
proc `+`[TT](a, b: Variable[TT]): Variable[TT]
proc `-`[TT](a, b: Variable[TT]): Variable[TT]