Trait NatSub

Source
pub trait NatSub<B: Nat>: Nat {
    type Output: Nat;
}
Expand description

Nat subtraction. Used as Sub<X, Y> or <X as NatSub<Y>>::Output. Undefined for any inputs which would result in an output less than zero. If you need signed numbers, you should probably be using a signed representation, such as balanced ternary.

Required Associated Types§

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl NatSub<Term> for Term

Source§

impl NatSub<Term> for Undefined

Source§

impl NatSub<Undefined> for Term

Source§

impl NatSub<Undefined> for Undefined

Source§

impl<X> NatSub<Term> for Zero<X>
where X: NatTriple + Nat,

Source§

impl<X, Y: Nat> NatSub<One<Y>> for One<X>
where <X as NatSub<Y>>::Output: NatTriple, X: NatSub<Y> + Nat,

Source§

type Output = <<X as NatSub<Y>>::Output as NatTriple>::Output

Source§

impl<X, Y: Nat> NatSub<One<Y>> for Two<X>
where <X as NatSub<Y>>::Output: NatTriplePlusOne, X: NatSub<Y> + Nat,

Source§

impl<X, Y: Nat> NatSub<One<Y>> for Zero<X>
where <<X as NatSub<Y>>::Output as NatPred>::Output: NatTriplePlusTwo, <X as NatSub<Y>>::Output: NatPred, X: NatSub<Y> + Nat,

Source§

impl<X, Y: Nat> NatSub<Two<Y>> for One<X>
where <<X as NatSub<Y>>::Output as NatPred>::Output: NatTriplePlusTwo, <X as NatSub<Y>>::Output: NatPred, X: NatSub<Y> + Nat,

Source§

impl<X, Y: Nat> NatSub<Two<Y>> for Two<X>
where <X as NatSub<Y>>::Output: NatTriple, X: NatSub<Y> + Nat,

Source§

type Output = <<X as NatSub<Y>>::Output as NatTriple>::Output

Source§

impl<X, Y: Nat> NatSub<Two<Y>> for Zero<X>
where <<X as NatSub<Y>>::Output as NatPred>::Output: NatTriplePlusOne, <X as NatSub<Y>>::Output: NatPred, X: NatSub<Y> + Nat,

Source§

impl<X, Y: Nat> NatSub<Zero<Y>> for One<X>
where <X as NatSub<Y>>::Output: NatTriplePlusOne, X: NatSub<Y> + Nat,

Source§

impl<X, Y: Nat> NatSub<Zero<Y>> for Two<X>
where <X as NatSub<Y>>::Output: NatTriplePlusTwo, X: NatSub<Y> + Nat,

Source§

impl<X, Y: Nat> NatSub<Zero<Y>> for Zero<X>
where <X as NatSub<Y>>::Output: NatTriple, X: NatSub<Y> + Nat,

Source§

type Output = <<X as NatSub<Y>>::Output as NatTriple>::Output

Source§

impl<X: Nat> NatSub<One<X>> for Term

Source§

impl<X: Nat> NatSub<One<X>> for Undefined

Source§

impl<X: Nat> NatSub<Term> for One<X>

Source§

impl<X: Nat> NatSub<Term> for Two<X>

Source§

impl<X: Nat> NatSub<Two<X>> for Term

Source§

impl<X: Nat> NatSub<Two<X>> for Undefined

Source§

impl<X: Nat> NatSub<Undefined> for One<X>

Source§

impl<X: Nat> NatSub<Undefined> for Two<X>

Source§

impl<X: Nat> NatSub<Undefined> for Zero<X>

Source§

impl<X: Nat> NatSub<Zero<X>> for Term
where Term: NatSub<X>,

Source§

impl<X: Nat> NatSub<Zero<X>> for Undefined