use super::*;
#[apply(nat_expr)]
pub type _Inc<N: NatExpr> = If<
_P<N>, PushBit<_Inc<_H<N>>, crate::lit!(0)>,
PushBit<_H<N>, crate::lit!(1)>,
>;
pub(crate) type _PlusBit<N, C> = If<C, _Inc<N>, N>;
#[apply(nat_expr)]
pub type _Add<L: NatExpr, R: NatExpr, C: NatExpr = crate::lit!(0)> = If<
L,
PushBit<
_Add<
_H<R>, _H<L>,
crate::Eval<
If<
_P<L>,
_Or<_P<R>, C>,
_And<_P<R>, C>,
>,
>,
>,
_Xor3<_P<L>, _P<R>, C>,
>,
_PlusBit<R, C>,
>;
#[apply(opaque)]
#[apply(test_op! test_add, L + R)]
pub type Add<L, R> = _Add;