diff --git a/Acme/NumberSystem.hs b/Acme/NumberSystem.hs
--- a/Acme/NumberSystem.hs
+++ b/Acme/NumberSystem.hs
@@ -1,14 +1,21 @@
-{-# LANGUAGE TemplateHaskell, ConstraintKinds #-}
+{-# LANGUAGE TemplateHaskell, ConstraintKinds, TypeFamilies, DataKinds, MultiParamTypeClasses #-}
 module Acme.NumberSystem where
 
 import GHC.TypeLits
 import Language.Haskell.TH
 
 type Less = (<=)
+type family Sub (m :: Nat) (n :: Nat) :: Nat
 
 -- | Define the less than relation for numbers up to a number using Template Haskell.
+-- | Also define subtraction.
 -- | E.g. numberSystem 100
 numberSystem :: Integer -> Q [Dec]
-numberSystem theBiggestNumber = return . concat $ map (\i -> map (\j ->
-      InstanceD [] (AppT (AppT (ConT (''Less)) (LitT (NumTyLit i))  ) (LitT (NumTyLit j))) []
-      ) [i..theBiggestNumber]) [1..theBiggestNumber]
+numberSystem theBiggestNumber = return . concat $ lessThan ++ subs
+  where
+    lessThan = map (\i -> map (\j ->
+      InstanceD [] (AppT (AppT (ConT (''Less)) (LitT (NumTyLit i))) (LitT (NumTyLit j))) []
+      ) [i..theBiggestNumber]) [0..theBiggestNumber]
+    subs = map (\i -> map (\j ->
+      TySynInstD ''Sub [LitT (NumTyLit j), LitT (NumTyLit i)] (LitT (NumTyLit (j - i)))
+      ) [i..theBiggestNumber]) [0..theBiggestNumber]
diff --git a/acme-numbersystem.cabal b/acme-numbersystem.cabal
--- a/acme-numbersystem.cabal
+++ b/acme-numbersystem.cabal
@@ -1,7 +1,7 @@
 name:                acme-numbersystem
-version:             0.1.0.0
-synopsis:            Define the less than relation for numbers up to a number
-description:         Define the less than relation for numbers up to a number using Template Haskell.
+version:             0.2.0.0
+synopsis:            Define the less than and subtraction for nats
+description:         Define the less than relation and subtraction for numbers up to a number by using Template Haskell.
 license:             BSD3
 license-file:        LICENSE
 author:              Maxwell Swadling
