content: {-# LANGUAGE DataKinds            #-}
  {-# LANGUAGE PolyKinds            #-}
  {-# LANGUAGE TypeFamilies         #-}
  {-# LANGUAGE TypeOperators        #-}
  {-# LANGUAGE UndecidableInstances #-}
  
  module Type.Compare
    ( CmpType
    ) where
  
  import GHC.TypeLits
  import Plugin.MagicTyFam (WhenStuck)
  
  
  import Data.Foldable
  import Data.List
  
  ------------------------------------------------------------------------------
  -- | Compare two types. For 'Nat's and 'Symbol's, this uses the built-in
  -- comparisons. For all other types, "Type.Compare.Plugin" will solve it.
  --
  -- The actual /meaning/ of comparing types is left to your imagination. But it's
  -- deterministic so that's good enough.
  type family CmpType (a :: k) (b :: k) :: Ordering where
    CmpType a             a = 'EQ
    CmpType (a :: Nat)    b = CmpNat a b
    CmpType (a :: Symbol) b = CmpSymbol a b
  
    -- These instances are generated via '_generateCmpType'
    CmpType '(a1, a2) '(b1, b2) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) ('EQ))
    CmpType '(a1, a2, a3) '(b1, b2, b3) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) ('EQ)))
    CmpType '(a1, a2, a3, a4) '(b1, b2, b3, b4) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) ('EQ))))
    CmpType '(a1, a2, a3, a4, a5) '(b1, b2, b3, b4, b5) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) ('EQ)))))
    CmpType '(a1, a2, a3, a4, a5, a6) '(b1, b2, b3, b4, b5, b6) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) ('EQ))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7) '(b1, b2, b3, b4, b5, b6, b7) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) ('EQ)))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8) '(b1, b2, b3, b4, b5, b6, b7, b8) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) ('EQ))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9) '(b1, b2, b3, b4, b5, b6, b7, b8, b9) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) ('EQ)))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) ('EQ))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) ('EQ)))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) ('EQ))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) ('EQ)))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) ('EQ))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) ('EQ)))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) ('EQ))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) ('EQ)))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) ('EQ))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) ('EQ)))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) ('EQ))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) ('EQ)))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) ('EQ))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) ('EQ)))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) ('EQ))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) ('EQ)))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) ('EQ))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) ('EQ)))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) ('EQ))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) ('EQ)))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) ('EQ))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) ('EQ)))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) ('EQ))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) ('EQ)))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) ('EQ))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) ('EQ)))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) ('EQ))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) ('EQ)))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) ('EQ))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) ('EQ)))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) ('EQ))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) ('EQ)))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) ('EQ))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) ('EQ)))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) ('EQ))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) ('EQ)))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) ('EQ))))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) ('EQ)))))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) ('EQ))))))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) ('EQ)))))))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) ('EQ))))))))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) ('EQ)))))))))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) ('EQ))))))))))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) ('EQ)))))))))))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) ('EQ))))))))))))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) ('EQ)))))))))))))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) (OrderingSemigroup (CmpType a56 b56) ('EQ))))))))))))))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) (OrderingSemigroup (CmpType a56 b56) (OrderingSemigroup (CmpType a57 b57) ('EQ)))))))))))))))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57, b58) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) (OrderingSemigroup (CmpType a56 b56) (OrderingSemigroup (CmpType a57 b57) (OrderingSemigroup (CmpType a58 b58) ('EQ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) (OrderingSemigroup (CmpType a56 b56) (OrderingSemigroup (CmpType a57 b57) (OrderingSemigroup (CmpType a58 b58) (OrderingSemigroup (CmpType a59 b59) ('EQ)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b60) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) (OrderingSemigroup (CmpType a56 b56) (OrderingSemigroup (CmpType a57 b57) (OrderingSemigroup (CmpType a58 b58) (OrderingSemigroup (CmpType a59 b59) (OrderingSemigroup (CmpType a60 b60) ('EQ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b60, b61) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) (OrderingSemigroup (CmpType a56 b56) (OrderingSemigroup (CmpType a57 b57) (OrderingSemigroup (CmpType a58 b58) (OrderingSemigroup (CmpType a59 b59) (OrderingSemigroup (CmpType a60 b60) (OrderingSemigroup (CmpType a61 b61) ('EQ)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b60, b61, b62) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) (OrderingSemigroup (CmpType a56 b56) (OrderingSemigroup (CmpType a57 b57) (OrderingSemigroup (CmpType a58 b58) (OrderingSemigroup (CmpType a59 b59) (OrderingSemigroup (CmpType a60 b60) (OrderingSemigroup (CmpType a61 b61) (OrderingSemigroup (CmpType a62 b62) ('EQ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, a63) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b60, b61, b62, b63) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) (OrderingSemigroup (CmpType a56 b56) (OrderingSemigroup (CmpType a57 b57) (OrderingSemigroup (CmpType a58 b58) (OrderingSemigroup (CmpType a59 b59) (OrderingSemigroup (CmpType a60 b60) (OrderingSemigroup (CmpType a61 b61) (OrderingSemigroup (CmpType a62 b62) (OrderingSemigroup (CmpType a63 b63) ('EQ)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
    CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, a63, a64) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b60, b61, b62, b63, b64) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) (OrderingSemigroup (CmpType a56 b56) (OrderingSemigroup (CmpType a57 b57) (OrderingSemigroup (CmpType a58 b58) (OrderingSemigroup (CmpType a59 b59) (OrderingSemigroup (CmpType a60 b60) (OrderingSemigroup (CmpType a61 b61) (OrderingSemigroup (CmpType a62 b62) (OrderingSemigroup (CmpType a63 b63) (OrderingSemigroup (CmpType a64 b64) ('EQ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
  
    CmpType a b = WhenStuck (CmpTypeImpl a b)
                            (TypeError ('Text "The CmpType plugin isn't enabled."
                                  ':$$: 'Text "  Fix: enable '-fplugin=Type.Compare.Plugin'"))
  
  type family OrderingSemigroup (a :: Ordering) (b :: Ordering) :: Ordering where
    OrderingSemigroup 'EQ b = b
    OrderingSemigroup a _   = a
  
  type family CmpTypeImpl (a :: k) (b :: k) :: Ordering where
  
  
  
  ------------------------------------------------------------------------------
  -- | Constructs the tuple instances for CmpType
  _generateCmpType :: IO ()
  _generateCmpType = Data.Foldable.for_ [2..64] $ \t -> do
    let ns = fmap show [1 .. t]
        as = fmap ('a' :) ns
        bs = fmap ('b' :) ns
        tupled zs =
          mconcat
            [ "'("
            , intercalate ", " zs
            , ")"
            ]
        rhs =
          foldr (\(a,b) z ->
            mconcat
              [ "OrderingSemigroup (CmpType "
              , a
              , " "
              , b
              , ") ("
              , z
              , ")"
              ]) "'EQ" (zip as bs)
        lhs =
          mconcat
            [ "  CmpType "
            , tupled as
            , " "
            , tupled bs
            , " = "
            ]
    putStrLn $ mappend lhs rhs
  
  