use super::*;
#[apply(nat_expr)]
pub type _Eq<L: NatExpr, R: NatExpr> = If<
L,
If<
_Xnor<_P<L>, _P<R>>,
_Eq<_H<R>, _H<L>>, crate::lit!(0),
>,
IsZero<R>,
>;
#[doc(alias = "==")]
#[apply(opaque)]
#[apply(test_op! test_eq, (L == R) as _)]
pub type Eq<L, R> = _Eq;
#[apply(nat_expr)]
pub type _Ne<L: NatExpr, R: NatExpr> = IsZero<Eq<L, R>>;
#[doc(alias = "!=")]
#[apply(opaque)]
pub type Ne<L, R> = _Ne;
type _LtByLast<L, R> = _And<
If<_P<L>, crate::lit!(0), _P<R>>, _Eq<_H<L>, _H<R>>,
>;
#[apply(nat_expr)]
pub type _Lt<L: NatExpr, R: NatExpr> = If<
R,
If<
L,
If<
_Lt<_H<L>, _H<R>>, crate::lit!(1),
_LtByLast<L, R>,
>,
crate::lit!(1), >,
crate::lit!(0), >;
#[doc(alias = "<")]
#[apply(opaque)]
#[apply(test_op! test_lt, (L < R) as _)]
pub type Lt<L, R> = _Lt;
#[doc(alias = ">")]
pub type Gt<L, R> = Lt<R, L>;
#[doc(alias = ">=")]
pub type Ge<L, R> = Le<R, L>;
#[apply(nat_expr)]
pub type _Le<L: NatExpr, R: NatExpr> = IsZero<_Lt<R, L>>;
#[doc(alias = "<=")]
#[apply(opaque)]
pub type Le<L, R> = _Le;
#[apply(nat_expr)]
pub type _Min<L: NatExpr, R: NatExpr> = If<_Lt<L, R>, R, L>;
#[apply(opaque)]
pub type Min<L, R> = _Min;
#[apply(nat_expr)]
pub type _Max<L: NatExpr, R: NatExpr> = If<_Lt<L, R>, L, R>;
#[apply(opaque)]
pub type Max<L, R> = _Max;