use *;
// AddIf(C, L, R) := if C { L + R } else { R }
// = L + if C { R } else { 0 }
type _AddIf<C, L, R> = ;
// Double(N) := 2 * N
type _Double<N> = >;
// Mul(L, R) := L * R
//
// H := H(L), P := P(L)
//
// L * R = (2 * H + P) * R
// = 2 * (H * R) + P * R
// = 2 * (H * R) + if P { R } else { 0 }
// = AddIf(P, Double(H * R), R)
pub type _Mul<L: NatExpr, R: NatExpr> = ,
>;
/// Type-level [`*`](core::ops::Mul)
pub type Mul<L, R> = _Mul;