# Data.PosNat

MultPosNatMonoid : Monoid (DPair Nat IsSucc)

  Monoid, neutral = 1

MultPosNatSemi : Semigroup (DPair Nat IsSucc)

  Semigroup using multiplication

PosNat : Type

  ℤ⁺: {1..}.

multPosNat : PosNat -> PosNat -> PosNat

  Multiply two PosNats

one : PosNat

  1

p : (n : Nat) -> {auto ok : IsSucc n} -> PosNat

  Convert a Nat to a PosNat, using automatic proof search

plusNatPosNat : Nat -> PosNat -> PosNat

  Add a Nat to a positive Nat

plusPos : (n : Nat) -> (k : Nat) -> IsSucc n -> IsSucc (n + k)

  A proof that the addition of a natural number to a natural number that is
  already positive doesn't make a difference

plusPosNat : PosNat -> PosNat -> PosNat

  | Add two PosNats

succ : PosNat -> PosNat

  The successor of a PosNat

timesPos : (n : Nat) -> (k : Nat) -> IsSucc n -> IsSucc k -> IsSucc (n * k)

  The proof that one positive Nat times another is still positive