{-# LANGUAGE GADTs #-}
{-# LANGUAGE ViewPatterns #-}
{-# OPTIONS_GHC -fno-warn-type-defaults #-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE BlockArguments #-} -- is this the only way I can right read?
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE MultiParamTypeClasses #-}  --   To convert between Posit Types, via Posit's Convertable Type Class


#if __GLASGOW_HASKELL__ == 810
-- Work around to fix GHC Issue #15304, issue popped up again in GHC 8.10, it should be fixed in GHC 8.12
-- This code is meant to reproduce MR 2608 for GHC 8.10
{-# OPTIONS_GHC -funfolding-keeness-factor=1 -funfolding-use-threshold=80 #-}
#endif



--------------------------------------------------------------------------------------------
-- |
-- Copyright   :  (C) 2017-2024 Nathan Waivio
-- License     :  BSD3
-- Maintainer  :  Nathan Waivio <nathan.waivio@gmail.com>
-- Stability   :  Stable
-- Portability :  unportable
--
-- Library implementing standard functions for the <https://en.wikipedia.org/wiki/Algebra_of_physical_space Algebra of Physical Space> Cl(3,0)
-- 
---------------------------------------------------------------------------------------------


module Posit.Cl3
(-- * The type for the Algebra of Physical Space
 Cl3(..),
 Cl3Posit8,
 Cl3Posit16,
 Cl3Posit32,
 Cl3Posit64,
 Cl3Posit128,
 Cl3Posit256,
 Cl3P8,
 Cl3P16,
 Cl3P32,
 Cl3P64,
 Cl3P128,
 Cl3P256,
 -- * Clifford Conjugate and Complex Conjugate
 bar, dag,
 -- * The littlest singular value
 lsv,
 -- * Constructor Selectors - For optimizing and simplifying calculations
 toR, toV3, toBV, toI,
 toPV, toH, toC,
 toBPV, toODD, toTPV,
 toAPS,
 -- * Pretty Printing for use with Octave
 showOctave,
 -- * Eliminate grades that are less than 'tol' to use a simpler Constructor
 reduce, tol,
#ifndef O_NO_STORABLE
 -- * Compact Storable types for the Cl3 Constructors with smart constructors
 Cl3_R, toCl3_R, fromCl3_R,
 Cl3_V3, toCl3_V3, fromCl3_V3,
 Cl3_BV, toCl3_BV, fromCl3_BV,
 Cl3_I, toCl3_I, fromCl3_I,
 Cl3_PV, toCl3_PV, fromCl3_PV,
 Cl3_H, toCl3_H, fromCl3_H,
 Cl3_C, toCl3_C, fromCl3_C,
 Cl3_BPV, toCl3_BPV, fromCl3_BPV,
 Cl3_ODD, toCl3_ODD, fromCl3_ODD,
 Cl3_TPV, toCl3_TPV, fromCl3_TPV,
 Cl3_APS, toCl3_APS, fromCl3_APS,
#endif
#ifndef O_NO_RANDOM
 -- * Random Instances
 randR, rangeR,
 randV3, rangeV3,
 randBV, rangeBV,
 randI, rangeI,
 randPV, rangePV,
 randH, rangeH,
 randC, rangeC,
 randBPV, rangeBPV,
 randODD, rangeODD,
 randTPV, rangeTPV,
 randAPS, rangeAPS,
 randUnitV3,
 randProjector,
 randNilpotent,
 randUnitary,
#endif
 -- * Helpful Functions
 eigvals, hasNilpotent,
 spectraldcmp, project,
 mIx, timesI,
 abssignum,
 
 -- * Cl3 Types are Convertable between different Posit representations
 Convertible(..)
) where

-- ifndef O_NO_DERIVED
-- import Data.Data (Typeable, Data)
-- import GHC.Generics (Generic)
import Text.Read ( Lexeme(..)
                 , readPrec
                 , readListPrec
                 , pfail
                 , readListPrecDefault
                 , lexP
                 , parens
                 , step) -- Used to read a Posit value
-- endif

import Control.DeepSeq (NFData,rnf)

#ifndef O_NO_STORABLE
import Foreign.Storable (Storable, sizeOf, alignment, peek, poke)
import Foreign.Ptr (Ptr, plusPtr, castPtr)
#endif

#ifndef O_NO_RANDOM
import System.Random (RandomGen, Random, randomR, random)
#endif

import Posit hiding (R)
import Posit.Internal.PositC

-- | Cl3 provides specialized constructors for sub-algebras and other geometric objects
-- contained in the algebra.  Cl(3,0), abbreviated to Cl3, is a Geometric Algebra
-- of 3 dimensional space known as the Algebra of Physical Space (APS).  Geometric Algebras are Real
-- Clifford Algebras, [posit](https://hackage.haskell.org/package/posit) Numbers are used to approximate real numbers in this
-- library.  Single and Double grade combinations are specialized using algebraic datatypes
-- and live within the APS.
--
--   * 'R' is the constructor for the Real Scalar Sub-algebra Grade-0
--
--   * 'V3' is the Three Dimensional Real Vector constructor Grade-1
--
--   * 'BV' is the Bivector constructor Grade-2 an Imaginary Three Dimensional Vector
--
--   * 'I' is the Imaginary constructor Grade-3 and is the Pseudo-Scalar for APS
--
--   * 'PV' is the Paravector constructor with Grade-0 and Grade-1 elements, a Real Scalar plus Vector, (R + V3)
--
--   * 'H' is the Quaternion constructor it is the Even Sub-algebra with Grade-0 and Grade-2 elements, a Real Scalar plus Bivector, (R + BV)
--
--   * 'C' is the Complex constructor it is the Scalar Sub-algebra with Grade-0 and Grade-3 elements, a Real Scalar plus Imaginar Scalar, (R + I)
--
--   * 'BPV' is the Biparavector constructor with Grade-1 and Grade-2 elements, a Real Vector plus Bivector, (V3 + BV)
--
--   * 'ODD' is the Odd constructor with Grade-1 and Grade-3 elements, a Vector plus Imaginary Scalar, (V3 + I)
--
--   * 'TPV' is the Triparavector constructor with Grade-2 and Grade-3 elements, a Bivector plus Imaginary, (BV + I)
--
--   * 'APS' is the constructor for an element in the Algebra of Physical Space with Grade-0 through Grade-3 elements
--
data Cl3 es where
  R  :: (PositC es) => !(Posit es) -> Cl3 es -- Real Scalar Sub-algebra
  V3  :: (PositC es) => !(Posit es) -> !(Posit es) -> !(Posit es) -> Cl3 es -- Three Dimensional Vectors
  BV  :: (PositC es) => !(Posit es) -> !(Posit es) -> !(Posit es) -> Cl3 es -- Bivectors, Imaginary Three Dimenstional Vectors
  I   :: (PositC es) => !(Posit es) -> Cl3 es -- Trivector Imaginary Pseudo-Scalar, Imaginary Scalar
  PV  :: (PositC es) => !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> Cl3 es -- Paravector, Real Scalar plus Three Dimensional Real Vector, (R + V3)
  H   :: (PositC es) => !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> Cl3 es -- Quaternion Even Sub-algebra, Real Scalar plus Bivector, (R + BV)
  C   :: (PositC es) => !(Posit es) -> !(Posit es) -> Cl3 es -- Complex Sub-algebra, Real Scalar plus Imaginary Scalar, (R + I)
  BPV :: (PositC es) => !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> Cl3 es -- Biparavector, Vector plus Bivector, (V3 + BV)
  ODD :: (PositC es) => !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> Cl3 es -- Odd, Vector plus Imaginary, (V3 + I)
  TPV :: (PositC es) => !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> Cl3 es -- Triparavector, Bivector plus Imaginary Scalar, (BV + I)
  APS :: (PositC es) => !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> Cl3 es -- Algebra of Physical Space

    -- deriving (Show, Read, Typeable, Data, Generic)

type Cl3Posit8 = Cl3 Z_3_2
type Cl3Posit16 = Cl3 I_3_2
type Cl3Posit32 = Cl3 II_3_2
type Cl3Posit64 = Cl3 III_3_2
type Cl3Posit128 = Cl3 IV_3_2
type Cl3Posit256 = Cl3 V_3_2

type Cl3P8 = Cl3 Z_2022
type Cl3P16 = Cl3 I_2022
type Cl3P32 = Cl3 II_2022
type Cl3P64 = Cl3 III_2022
type Cl3P128 = Cl3 IV_2022
type Cl3P256 = Cl3 V_2022

-- | In case we don't derive Show, provide 'showOctave' as the Show instance
instance PositC es => Show (Cl3 es) where
  show :: Cl3 es -> String
show (R Posit es
a0) = String
"R (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a0 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
  show (V3 Posit es
a1 Posit es
a2 Posit es
a3) = String
"V3 (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") ("  String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
  show (BV Posit es
a32 Posit es
a31 Posit es
a12) = String
"BV (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a32 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a31 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a12 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
  show (I Posit es
a123) = String
"I (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a123 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
  show (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) = String
"PV (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a0 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") ("  String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
  show (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) = String
"H (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a0 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a23 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a31 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") ("  String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a12 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
  show (C Posit es
a0 Posit es
a123) = String
"C (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a0 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a123 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
  show (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) = String
"BPV (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") ("  String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a23 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a31 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a12 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
  show (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) = String
"ODD (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") ("  String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a123 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
  show (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = String
"TPV (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a23 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a31 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") ("  String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a12 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a123 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
  show (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = String
"APS (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a0 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") ("  String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a23 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a31 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") ("  String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a12 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a123 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance forall es. (Read (Posit es), PositC es) => Read (Cl3 es) where
  readListPrec :: ReadPrec [Cl3 es]
readListPrec = ReadPrec [Cl3 es]
forall a. Read a => ReadPrec [a]
readListPrecDefault
  readPrec :: ReadPrec (Cl3 es)
readPrec = ReadPrec (Cl3 es) -> ReadPrec (Cl3 es)
forall a. ReadPrec a -> ReadPrec a
parens (ReadPrec (Cl3 es) -> ReadPrec (Cl3 es))
-> ReadPrec (Cl3 es) -> ReadPrec (Cl3 es)
forall a b. (a -> b) -> a -> b
$ do
      Lexeme
x <- ReadPrec Lexeme
lexP
      case Lexeme
x of
        Ident String
"R" -> do Posit es
a0 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                        Cl3 es -> ReadPrec (Cl3 es)
forall a. a -> ReadPrec a
forall (m :: * -> *) a. Monad m => a -> m a
return (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0)
        Ident String
"V3" -> do Posit es
a1 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                         Posit es
a2 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                         Posit es
a3 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                         Cl3 es -> ReadPrec (Cl3 es)
forall a. a -> ReadPrec a
forall (m :: * -> *) a. Monad m => a -> m a
return (Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 Posit es
a1 Posit es
a2 Posit es
a3)
        Ident String
"BV" -> do Posit es
a32 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                         Posit es
a31 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                         Posit es
a12 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                         Cl3 es -> ReadPrec (Cl3 es)
forall a. a -> ReadPrec a
forall (m :: * -> *) a. Monad m => a -> m a
return (Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV Posit es
a32 Posit es
a31 Posit es
a12)
        Ident String
"I" -> do Posit es
a123 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                        Cl3 es -> ReadPrec (Cl3 es)
forall a. a -> ReadPrec a
forall (m :: * -> *) a. Monad m => a -> m a
return (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123)
        Ident String
"PV" -> do Posit es
a0 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                         Posit es
a1 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                         Posit es
a2 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                         Posit es
a3 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                         Cl3 es -> ReadPrec (Cl3 es)
forall a. a -> ReadPrec a
forall (m :: * -> *) a. Monad m => a -> m a
return (Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3)
        Ident String
"H" -> do Posit es
a0 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                        Posit es
a32 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                        Posit es
a31 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                        Posit es
a12 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                        Cl3 es -> ReadPrec (Cl3 es)
forall a. a -> ReadPrec a
forall (m :: * -> *) a. Monad m => a -> m a
return (Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
a0 Posit es
a32 Posit es
a31 Posit es
a12)
        Ident String
"C" -> do Posit es
a0 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                        Posit es
a123 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                        Cl3 es -> ReadPrec (Cl3 es)
forall a. a -> ReadPrec a
forall (m :: * -> *) a. Monad m => a -> m a
return (Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
a0 Posit es
a123)
        Ident String
"BPV" -> do Posit es
a1 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Posit es
a2 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Posit es
a3 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Posit es
a32 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Posit es
a31 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Posit es
a12 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Cl3 es -> ReadPrec (Cl3 es)
forall a. a -> ReadPrec a
forall (m :: * -> *) a. Monad m => a -> m a
return (Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a32 Posit es
a31 Posit es
a12)
        Ident String
"ODD" -> do Posit es
a1 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Posit es
a2 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Posit es
a3 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Posit es
a123 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Cl3 es -> ReadPrec (Cl3 es)
forall a. a -> ReadPrec a
forall (m :: * -> *) a. Monad m => a -> m a
return (Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123)
        Ident String
"TPV" -> do Posit es
a32 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Posit es
a31 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Posit es
a12 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Posit es
a123 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Cl3 es -> ReadPrec (Cl3 es)
forall a. a -> ReadPrec a
forall (m :: * -> *) a. Monad m => a -> m a
return (Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV Posit es
a32 Posit es
a31 Posit es
a12 Posit es
a123)
        Ident String
"APS" -> do Posit es
a0 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Posit es
a1 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Posit es
a2 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Posit es
a3 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Posit es
a32 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Posit es
a31 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Posit es
a12 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Posit es
a123 <- ReadPrec (Posit es) -> ReadPrec (Posit es)
forall a. ReadPrec a -> ReadPrec a
step ReadPrec (Posit es)
forall a. Read a => ReadPrec a
readPrec
                          Cl3 es -> ReadPrec (Cl3 es)
forall a. a -> ReadPrec a
forall (m :: * -> *) a. Monad m => a -> m a
return (Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a32 Posit es
a31 Posit es
a12 Posit es
a123)
        Lexeme
_ -> ReadPrec (Cl3 es)
forall a. ReadPrec a
pfail
--



-- | Cl3 can be reduced to a normal form.
instance PositC es => NFData (Cl3 es) where
  rnf :: Cl3 es -> ()
rnf !Cl3 es
_ = ()


-- |'showOctave' for useful for debug purposes.
-- The additional octave definition is needed:  
-- 
-- > e0 = [1,0;0,1]; e1=[0,1;1,0]; e2=[0,-i;i,0]; e3=[1,0;0,-1];
--
-- This allows one to take advantage of the isomorphism between Cl3 and M(2,C)
showOctave :: PositC es => Cl3 es -> String
showOctave :: forall (es :: ES). PositC es => Cl3 es -> String
showOctave (R Posit es
a0) = Posit es -> String
forall a. Show a => a -> String
show Posit es
a0 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e0"
showOctave (V3 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> String
forall a. Show a => a -> String
show Posit es
a1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e3"
showOctave (BV Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> String
forall a. Show a => a -> String
show Posit es
a23 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a31 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a12 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e3"
showOctave (I Posit es
a123) = Posit es -> String
forall a. Show a => a -> String
show Posit es
a123 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e0"
showOctave (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> String
forall a. Show a => a -> String
show Posit es
a0 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e0 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e3"
showOctave (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> String
forall a. Show a => a -> String
show Posit es
a0 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e0 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a23 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a31 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a12 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e3"
showOctave (C Posit es
a0 Posit es
a123) = Posit es -> String
forall a. Show a => a -> String
show Posit es
a0 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e0 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a123 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e0"
showOctave (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> String
forall a. Show a => a -> String
show Posit es
a1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e3 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++
                                        Posit es -> String
forall a. Show a => a -> String
show Posit es
a23 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a31 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a12 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e3"
showOctave (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) = Posit es -> String
forall a. Show a => a -> String
show Posit es
a1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e3 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a123 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e0"
showOctave (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es -> String
forall a. Show a => a -> String
show Posit es
a23 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a31 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a12 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e3 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a123 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e0"
showOctave (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es -> String
forall a. Show a => a -> String
show Posit es
a0 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e0 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e3 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++
                                                Posit es -> String
forall a. Show a => a -> String
show Posit es
a23 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a31 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a12 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e3 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Posit es -> String
forall a. Show a => a -> String
show Posit es
a123 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e0"


-- |Cl(3,0) has the property of equivalence.  "Eq" is "True" when all of the grade elements are equivalent.
instance PositC es => Eq (Cl3 es) where
  (R Posit es
a0) == :: Cl3 es -> Cl3 es -> Bool
== (R Posit es
b0) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0

  (R Posit es
a0) == (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (R Posit es
a0) == (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (R Posit es
a0) == (I Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (R Posit es
a0) == (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (R Posit es
a0) == (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (R Posit es
a0) == (C Posit es
b0 Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (R Posit es
a0) == (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (R Posit es
a0) == (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (R Posit es
a0) == (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (R Posit es
a0) == (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (V3 Posit es
a1 Posit es
a2 Posit es
a3) == (R Posit es
b0) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (BV Posit es
a23 Posit es
a31 Posit es
a12) == (R Posit es
b0) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (I Posit es
a123) == (R Posit es
b0) = Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) == (R Posit es
b0) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) == (R Posit es
b0) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (C Posit es
a0 Posit es
a123) == (R Posit es
b0) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) == (R Posit es
b0) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) == (R Posit es
b0) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (R Posit es
b0) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (R Posit es
b0) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (V3 Posit es
a1 Posit es
a2 Posit es
a3) == (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3

  (V3 Posit es
a1 Posit es
a2 Posit es
a3) == (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) == (I Posit es
b123) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) == (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) == (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) == (C Posit es
b0 Posit es
b123) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) == (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) == (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) == (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) == (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (BV Posit es
a23 Posit es
a31 Posit es
a12) == (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (I Posit es
a123) == (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) == (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) == (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (C Posit es
a0 Posit es
a123) == (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) == (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) == (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (BV Posit es
a23 Posit es
a31 Posit es
a12) == (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12

  (BV Posit es
a23 Posit es
a31 Posit es
a12) == (I Posit es
b123) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (BV Posit es
a23 Posit es
a31 Posit es
a12) == (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (BV Posit es
a23 Posit es
a31 Posit es
a12) == (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (BV Posit es
a23 Posit es
a31 Posit es
a12) == (C Posit es
b0 Posit es
b123) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (BV Posit es
a23 Posit es
a31 Posit es
a12) == (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (BV Posit es
a23 Posit es
a31 Posit es
a12) == (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (BV Posit es
a23 Posit es
a31 Posit es
a12) == (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (BV Posit es
a23 Posit es
a31 Posit es
a12) == (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (I Posit es
a123) == (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) == (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) == (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12
  (C Posit es
a0 Posit es
a123) == (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) == (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) == (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (I Posit es
a123) == (I Posit es
b123) = Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123

  (I Posit es
a123) == (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (I Posit es
a123) == (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (I Posit es
a123) == (C Posit es
b0 Posit es
b123) = Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (I Posit es
a123) == (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (I Posit es
a123) == (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (I Posit es
a123) == (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (I Posit es
a123) == (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) == (I Posit es
b123) = Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) == (I Posit es
b123) = Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (C Posit es
a0 Posit es
a123) == (I Posit es
b123) = Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123 Bool -> Bool -> Bool
&& Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) == (I Posit es
b123) = Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) == (I Posit es
b123) = Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (I Posit es
b123) = Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (I Posit es
b123) = Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123 Bool -> Bool -> Bool
&& Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) == (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3

  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) == (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) == (C Posit es
b0 Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) == (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) == (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) == (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) == (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) == (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (C Posit es
a0 Posit es
a123) == (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) == (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) == (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) == (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12

  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) == (C Posit es
b0 Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) == (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) == (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) == (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) == (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (C Posit es
a0 Posit es
a123) == (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) == (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) == (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (C Posit es
a0 Posit es
a123) == (C Posit es
b0 Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123

  (C Posit es
a0 Posit es
a123) == (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (C Posit es
a0 Posit es
a123) == (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (C Posit es
a0 Posit es
a123) == (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (C Posit es
a0 Posit es
a123) == (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) == (C Posit es
b0 Posit es
b123) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) == (C Posit es
b0 Posit es
b123) = Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (C Posit es
b0 Posit es
b123) = Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (C Posit es
b0 Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) == (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12

  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) == (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) == (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) == (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12
                                                                              Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) == (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31
                                                                             Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) == (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123

  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) == (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) == (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123 Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123 Bool -> Bool -> Bool
&& Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123

  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123
                                                                            Bool -> Bool -> Bool
&& Posit es
b0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
b3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23 Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123
                                                                            Bool -> Bool -> Bool
&& Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0

  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) == (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b0 Bool -> Bool -> Bool
&& Posit es
a1 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b1 Bool -> Bool -> Bool
&& Posit es
a2 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b2 Bool -> Bool -> Bool
&& Posit es
a3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b3 Bool -> Bool -> Bool
&& Posit es
a23 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b23
                                                                                      Bool -> Bool -> Bool
&& Posit es
a31 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b31 Bool -> Bool -> Bool
&& Posit es
a12 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b12 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
b123


-- |Cl3 has a total preorder ordering in which all pairs are comparable by two real valued functions.
-- Comparison of two reals is just the typical real compare function.  Comparison of to imaginary numbers
-- is just the typical comparison function.  When reals are compared to anything else it will compare the
-- absolute value of the reals to the magnitude of the other cliffor.  Compare of two complex values
-- compares the polar magnitude of the complex numbers.  Compare of two vectors compares the vector
-- magnitudes.  The Ord instance for the general case is based on the singular values of each cliffor and
-- this Ordering compares the largest singular value 'abs' and then the littlest singular value 'lsv'.
-- Some arbitrary cliffors may return EQ for Ord but not be exactly '==' equivalent, but they are related
-- by a right and left multiplication of two unitary elements.  For instance for the Cliffors A and B,
-- A == B could be False, but compare A B is EQ, because A * V = U * B, where V and U are unitary.  
instance PositF es => Ord (Cl3 es) where
  compare :: Cl3 es -> Cl3 es -> Ordering
compare (R Posit es
a0) (R Posit es
b0) = Posit es -> Posit es -> Ordering
forall a. Ord a => a -> a -> Ordering
compare Posit es
a0 Posit es
b0 -- Real Numbers have a total order within the limitations of Double Precision comparison
  compare (I Posit es
a123) (I Posit es
b123) = Posit es -> Posit es -> Ordering
forall a. Ord a => a -> a -> Ordering
compare Posit es
a123 Posit es
b123 -- Imaginary Numbers have a total order within the limitations of Double Precision comparison
  compare Cl3 es
cliffor1 Cl3 es
cliffor2 =
     let R Posit es
a0 = Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs Cl3 es
cliffor1
         R Posit es
b0 = Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs Cl3 es
cliffor2
         R Posit es
a0' = Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
lsv Cl3 es
cliffor1
         R Posit es
b0' = Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
lsv Cl3 es
cliffor2
     in case Posit es -> Posit es -> Ordering
forall a. Ord a => a -> a -> Ordering
compare Posit es
a0 Posit es
b0 of
          Ordering
LT -> Ordering
LT
          Ordering
GT -> Ordering
GT
          Ordering
EQ -> Posit es -> Posit es -> Ordering
forall a. Ord a => a -> a -> Ordering
compare Posit es
a0' Posit es
b0'



-- |Cl3 has a "Num" instance.  "Num" is addition, geometric product, negation, 'abs' the largest
-- singular value, and 'signum'.
-- 
instance PositF es => Num (Cl3 es) where
  -- | Cl3 can be added
  (R Posit es
a0) + :: Cl3 es -> Cl3 es -> Cl3 es
+ (R Posit es
b0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0)

  (R Posit es
a0) + (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
a0 Posit es
b1 Posit es
b2 Posit es
b3
  (R Posit es
a0) + (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
a0 Posit es
b23 Posit es
b31 Posit es
b12
  (R Posit es
a0) + (I Posit es
b123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
a0 Posit es
b123
  (R Posit es
a0) + (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) Posit es
b1 Posit es
b2 Posit es
b3
  (R Posit es
a0) + (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) Posit es
b23 Posit es
b31 Posit es
b12
  (R Posit es
a0) + (C Posit es
b0 Posit es
b123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) Posit es
b123
  (R Posit es
a0) + (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
0
  (R Posit es
a0) + (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
0 Posit es
0 Posit es
0 Posit es
b123
  (R Posit es
a0) + (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
0 Posit es
0 Posit es
0 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123
  (R Posit es
a0) + (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123

  (V3 Posit es
a1 Posit es
a2 Posit es
a3) + (R Posit es
b0) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
b0 Posit es
a1 Posit es
a2 Posit es
a3
  (BV Posit es
a23 Posit es
a31 Posit es
a12) + (R Posit es
b0) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
b0 Posit es
a23 Posit es
a31 Posit es
a12
  (I Posit es
a123) + (R Posit es
b0) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
b0 Posit es
a123
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) + (R Posit es
b0) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) Posit es
a1 Posit es
a2 Posit es
a3
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) + (R Posit es
b0) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) Posit es
a23 Posit es
a31 Posit es
a12
  (C Posit es
a0 Posit es
a123) + (R Posit es
b0) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) Posit es
a123
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) + (R Posit es
b0) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
0
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) + (R Posit es
b0) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
0 Posit es
0 Posit es
0 Posit es
a123
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (R Posit es
b0) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
0 Posit es
0 Posit es
0 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (R Posit es
b0) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123

  (V3 Posit es
a1 Posit es
a2 Posit es
a3) + (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3)

  (V3 Posit es
a1 Posit es
a2 Posit es
a3) + (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
b23 Posit es
b31 Posit es
b12
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) + (I Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
b123
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) + (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
b0 (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3)
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) + (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
0
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) + (C Posit es
b0 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
0 Posit es
0 Posit es
0 Posit es
b123
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) + (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) Posit es
b23 Posit es
b31 Posit es
b12
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) + (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) Posit es
b123
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) + (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) + (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123

  (BV Posit es
a23 Posit es
a31 Posit es
a12) + (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
a23 Posit es
a31 Posit es
a12
  (I Posit es
a123) + (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
a123
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) + (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
a0 (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3)
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) + (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
0
  (C Posit es
a0 Posit es
a123) + (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
0 Posit es
0 Posit es
0 Posit es
a123
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) + (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) Posit es
a23 Posit es
a31 Posit es
a12
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) + (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) Posit es
a123
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123

  (BV Posit es
a23 Posit es
a31 Posit es
a12) + (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12)

  (BV Posit es
a23 Posit es
a31 Posit es
a12) + (I Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
b123
  (BV Posit es
a23 Posit es
a31 Posit es
a12) + (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
0
  (BV Posit es
a23 Posit es
a31 Posit es
a12) + (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
b0 (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12)
  (BV Posit es
a23 Posit es
a31 Posit es
a12) + (C Posit es
b0 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
0 Posit es
0 Posit es
0 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
b123
  (BV Posit es
a23 Posit es
a31 Posit es
a12) + (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
b1 Posit es
b2 Posit es
b3 (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12)
  (BV Posit es
a23 Posit es
a31 Posit es
a12) + (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
b123
  (BV Posit es
a23 Posit es
a31 Posit es
a12) + (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12) Posit es
b123
  (BV Posit es
a23 Posit es
a31 Posit es
a12) + (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12) Posit es
b123

  (I Posit es
a123) + (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
a123
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) + (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
0
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) + (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
a0 (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12)
  (C Posit es
a0 Posit es
a123) + (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
0 Posit es
0 Posit es
0 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
a123
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) + (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
a1 Posit es
a2 Posit es
a3 (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12)
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) + (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
a123
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12) Posit es
a123
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12) Posit es
a123

  (I Posit es
a123) + (I Posit es
b123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)

  (I Posit es
a123) + (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
0 Posit es
0 Posit es
0 Posit es
a123
  (I Posit es
a123) + (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
0 Posit es
0 Posit es
0 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
a123
  (I Posit es
a123) + (C Posit es
b0 Posit es
b123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
b0 (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)
  (I Posit es
a123) + (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
a123
  (I Posit es
a123) + (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
b1 Posit es
b2 Posit es
b3 (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)
  (I Posit es
a123) + (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV Posit es
b23 Posit es
b31 Posit es
b12 (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)
  (I Posit es
a123) + (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)

  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) + (I Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
0 Posit es
0 Posit es
0 Posit es
b123
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) + (I Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
0 Posit es
0 Posit es
0 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
b123
  (C Posit es
a0 Posit es
a123) + (I Posit es
b123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
a0 (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) + (I Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
b123
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) + (I Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
a1 Posit es
a2 Posit es
a3 (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (I Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV Posit es
a23 Posit es
a31 Posit es
a12 (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (I Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)

  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) + (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3)

  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) + (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) Posit es
a1 Posit es
a2 Posit es
a3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
0
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) + (C Posit es
b0 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) Posit es
a1 Posit es
a2 Posit es
a3 Posit es
0 Posit es
0 Posit es
0 Posit es
b123
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) + (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) Posit es
b23 Posit es
b31 Posit es
b12 Posit es
0
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) + (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) Posit es
0 Posit es
0 Posit es
0 Posit es
b123
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) + (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) + (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123

  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) + (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) Posit es
b1 Posit es
b2 Posit es
b3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
0
  (C Posit es
a0 Posit es
a123) + (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) Posit es
b1 Posit es
b2 Posit es
b3 Posit es
0 Posit es
0 Posit es
0 Posit es
a123
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) + (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) Posit es
a23 Posit es
a31 Posit es
a12 Posit es
0
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) + (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) Posit es
0 Posit es
0 Posit es
0 Posit es
a123
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123

  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) + (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12)

  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) + (C Posit es
b0 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) Posit es
0 Posit es
0 Posit es
0 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
b123
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) + (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
b1 Posit es
b2 Posit es
b3 (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12) Posit es
0
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) + (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
b123
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) + (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
0 Posit es
0 Posit es
0 (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12) Posit es
b123
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) + (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) Posit es
b1 Posit es
b2 Posit es
b3 (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12) Posit es
b123

  (C Posit es
a0 Posit es
a123) + (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) Posit es
0 Posit es
0 Posit es
0 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
a123
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) + (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
a1 Posit es
a2 Posit es
a3 (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12) Posit es
0
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) + (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
a123
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
0 Posit es
0 Posit es
0 (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12) Posit es
a123
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) Posit es
a1 Posit es
a2 Posit es
a3 (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12) Posit es
a123

  (C Posit es
a0 Posit es
a123) + (C Posit es
b0 Posit es
b123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)

  (C Posit es
a0 Posit es
a123) + (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
a123
  (C Posit es
a0 Posit es
a123) + (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
0 Posit es
0 Posit es
0 (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)
  (C Posit es
a0 Posit es
a123) + (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
0 Posit es
0 Posit es
0 Posit es
b23 Posit es
b31 Posit es
b12 (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)
  (C Posit es
a0 Posit es
a123) + (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)

  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) + (C Posit es
b0 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
b123
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) + (C Posit es
b0 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
0 Posit es
0 Posit es
0 (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (C Posit es
b0 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
0 Posit es
0 Posit es
0 Posit es
a23 Posit es
a31 Posit es
a12 (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (C Posit es
b0 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0) Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)

  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) + (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12)

  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) + (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0 (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) Posit es
a23 Posit es
a31 Posit es
a12 Posit es
b123
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) + (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0 Posit es
a1 Posit es
a2 Posit es
a3 (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12) Posit es
b123
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) + (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12) Posit es
b123

  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) + (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0 (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) Posit es
b23 Posit es
b31 Posit es
b12 Posit es
a123
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0 Posit es
b1 Posit es
b2 Posit es
b3 (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12) Posit es
a123
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12) Posit es
a123

  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) + (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)

  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) + (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
b23 Posit es
b31 Posit es
b12 (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) + (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) Posit es
b23 Posit es
b31 Posit es
b12 (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)

  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
a23 Posit es
a31 Posit es
a12 (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3) Posit es
a23 Posit es
a31 Posit es
a12 (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)

  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12) (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)

  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12) (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)

  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12) (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)

  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) + (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b0)
                                                                                (Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b1) (Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2) (Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3)
                                                                                (Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b23) (Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b31) (Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b12)
                                                                                (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123)

  -- | Multiplication Instance implementing a Geometric Product
  (R Posit es
a0) * :: Cl3 es -> Cl3 es -> Cl3 es
* (R Posit es
b0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)

  (R Posit es
a0) * (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (R Posit es
a0) * (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (R Posit es
a0) * (I Posit es
b123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (R Posit es
a0) * (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                 (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (R Posit es
a0) * (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                  (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (R Posit es
a0) * (C Posit es
b0 Posit es
b123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                           (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (R Posit es
a0) * (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                            (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (R Posit es
a0) * (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                     (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (R Posit es
a0) * (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                        (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (R Posit es
a0) * (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                                    (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                    (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                    (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)

  (V3 Posit es
a1 Posit es
a2 Posit es
a3) * (R Posit es
b0) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (BV Posit es
a23 Posit es
a31 Posit es
a12) * (R Posit es
b0) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (I Posit es
a123) * (R Posit es
b0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) * (R Posit es
b0) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                 (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) * (R Posit es
b0) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                  (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (C Posit es
a0 Posit es
a123) * (R Posit es
b0) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                           (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) * (R Posit es
b0) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                            (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) * (R Posit es
b0) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                     (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (R Posit es
b0) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                        (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (R Posit es
b0) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                                    (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                                    (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                                    (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)

  (V3 Posit es
a1 Posit es
a2 Posit es
a3) * (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                    (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)

  (V3 Posit es
a1 Posit es
a2 Posit es
a3) * (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                         (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) * (I Posit es
b123) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) * (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                         (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                         (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
                                         Posit es
0
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) * (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                           (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) * (C Posit es
b0 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                    (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) * (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                   (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                   (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
                                                   (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) * (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                          (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) * (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0
                                               (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                               (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                               (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (V3 Posit es
a1 Posit es
a2 Posit es
a3) * (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                           (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                           (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                           (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)

  (BV Posit es
a23 Posit es
a31 Posit es
a12) * (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2  Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1  Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                         (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1  Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2  Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (I Posit es
a123) * (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) * (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                         (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                         (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
                                         Posit es
0
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) * (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                           (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (C Posit es
a0 Posit es
a123) * (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                    (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) * (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                   (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                                   (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
                                                   (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) * (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                          (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0
                                               (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                               (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                               (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (V3 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                           (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                                           (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                           (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)

  (BV Posit es
a23 Posit es
a31 Posit es
a12) * (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                          (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12) (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)

  (BV Posit es
a23 Posit es
a31 Posit es
a12) * (I Posit es
b123) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (BV Posit es
a23 Posit es
a31 Posit es
a12) * (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0
                                            (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                            (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                            (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (BV Posit es
a23 Posit es
a31 Posit es
a12) * (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                            (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
  (BV Posit es
a23 Posit es
a31 Posit es
a12) * (C Posit es
b0 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                       (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (BV Posit es
a23 Posit es
a31 Posit es
a12) * (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                      (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                                      (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12) (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                      (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (BV Posit es
a23 Posit es
a31 Posit es
a12) * (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                               (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (BV Posit es
a23 Posit es
a31 Posit es
a12) * (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                  (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                  (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12) (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                  Posit es
0
  (BV Posit es
a23 Posit es
a31 Posit es
a12) * (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                              (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                              (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                              (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)

  (I Posit es
a123) * (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) * (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0
                                            (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                            (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                            (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) * (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                            (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
  (C Posit es
a0 Posit es
a123) * (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                       (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) * (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                      (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                      (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12) (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                      (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) * (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                               (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                               (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                               (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                  (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                  (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                  Posit es
0
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (BV Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                              (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                              (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                              (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)

  (I Posit es
a123) * (I Posit es
b123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)

  (I Posit es
a123) * (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                    (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (I Posit es
a123) * (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                      (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (I Posit es
a123) * (C Posit es
b0 Posit es
b123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                             (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (I Posit es
a123) * (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                              (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (I Posit es
a123) * (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                     (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (I Posit es
a123) * (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                         (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (I Posit es
a123) * (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                      (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                      (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                      (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)

  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) * (I Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                    (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) * (I Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                      (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (C Posit es
a0 Posit es
a123) * (I Posit es
b123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                             (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) * (I Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                              (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) * (I Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                     (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (I Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                         (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (I Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                      (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                      (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                      (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)


  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) * (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                            (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                            (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
                                            Posit es
0

  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) * (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                              (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                              (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                              (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) * (C Posit es
b0 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                       (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                       (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                       (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) * (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                      (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                      (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
                                                      (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) * (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                               (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                               (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
                                               (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) * (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0
                                                  (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                  (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                  (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) * (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                              (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                              (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                              (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                              (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                                              (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                              (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                              (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)

  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) * (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                              (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                              (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                              (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (C Posit es
a0 Posit es
a123) * (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                       (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                       (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                       (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) * (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                      (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                                      (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
                                                      (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) * (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                               (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                               (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                               (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
                                               (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
                                               (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0
                                                  (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                                  (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                  (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (PV Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                              (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                              (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                              (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                                              (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                                              (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                                              (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                              (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)

  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) * (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                              (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                              (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                              (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)

  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) * (C Posit es
b0 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                         (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                         (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                         (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) * (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                        (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                                        (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                        (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2  Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) * (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                 (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                 (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                 (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) * (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                    (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                    (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                    (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) * (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                                (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                                (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                                (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                                (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                                (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)

  (C Posit es
a0 Posit es
a123) * (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                         (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                         (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                         (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) * (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                        (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                        (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                        (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) * (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                 (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                 (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                 (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                    (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                    (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                    (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (H Posit es
b0 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                                (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                                (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                                (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                                (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)

  (C Posit es
a0 Posit es
a123) * (C Posit es
b0 Posit es
b123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)

  (C Posit es
a0 Posit es
a123) * (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                 (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (C Posit es
a0 Posit es
a123) * (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                          (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                          (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                          (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (C Posit es
a0 Posit es
a123) * (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                             (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                             (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                             (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (C Posit es
a0 Posit es
a123) * (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                         (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                         (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                         (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)

  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) * (C Posit es
b0 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                 (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) * (C Posit es
b0 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                          (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                          (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                          (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (C Posit es
b0 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                             (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                             (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0) (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
                                             (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (C Posit es
b0 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                         (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                         (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                         (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0)

  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) * (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                                (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                                (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                                (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                                                (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                                (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)

  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) * (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                         (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                         (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
                                                         (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) * (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                            (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                            (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                            (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) * (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                                        (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                                        (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                                        (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                                        (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                                        (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                        (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                        (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)

  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) * (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                         (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                         (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
                                                         (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                            (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                            (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                            (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (BPV Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                                        (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                        (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                                        (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                                        (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                                        (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                        (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                        (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)

  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) * (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                                (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
                                                (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)

  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) * (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                     (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                     (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                     (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
  (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) * (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                                 (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                 (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                                 (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                                 (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                                                 (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
                                                                 (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
                                                                 (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)

  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                     (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                     (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2) (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
                                                     (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)
  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (ODD Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                                 (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                                 (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                                 (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                                 (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2)
                                                                 (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
                                                                 (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1)
                                                                 (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)

  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                        (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                        (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12) (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23) (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                        Posit es
0

  (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                                    (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                    (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                                    (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                                    (Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                                    (Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                    (Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                    (Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)

  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (TPV Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                                    (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                    (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                                    (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                                    (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                                    (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                    (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                    (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)

  (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) * (APS Posit es
b0 Posit es
b1 Posit es
b2 Posit es
b3 Posit es
b23 Posit es
b31 Posit es
b12 Posit es
b123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123)
                                                                                (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                                (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                                                (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12)
                                                                                (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31)
                                                                                (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                                (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23)
                                                                                (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
b3)




  -- |'abs' is the spectral norm aka the spectral radius
  -- it is the largest singular value. This function may need to be fiddled with
  -- to make the math a bit safer wrt overflows.  This makes use of the largest
  -- singular value, if the littlest singular value is zero then the element is not
  -- invertable, we can see here that R, C, V3, BV, and H are all invertable, and
  -- by implication R, C, and H are division algebras.
  abs :: Cl3 es -> Cl3 es
abs Cl3 es
cl3 = (Cl3 es, Cl3 es) -> Cl3 es
forall a b. (a, b) -> a
fst ((Cl3 es, Cl3 es) -> Cl3 es) -> (Cl3 es, Cl3 es) -> Cl3 es
forall a b. (a -> b) -> a -> b
$ Cl3 es -> (Cl3 es, Cl3 es)
forall (es :: ES). PositF es => Cl3 es -> (Cl3 es, Cl3 es)
abssignum Cl3 es
cl3


  -- |'signum' satisfies the Law "abs x * signum x == x"
  -- kind of cool: signum of a vector is it's unit vector.
  signum :: Cl3 es -> Cl3 es
signum Cl3 es
cl3 = (Cl3 es, Cl3 es) -> Cl3 es
forall a b. (a, b) -> b
snd ((Cl3 es, Cl3 es) -> Cl3 es) -> (Cl3 es, Cl3 es) -> Cl3 es
forall a b. (a -> b) -> a -> b
$ Cl3 es -> (Cl3 es, Cl3 es)
forall (es :: ES). PositF es => Cl3 es -> (Cl3 es, Cl3 es)
abssignum Cl3 es
cl3


  -- |'fromInteger'
  fromInteger :: Integer -> Cl3 es
fromInteger Integer
int = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Integer -> Posit es
forall a. Num a => Integer -> a
fromInteger Integer
int)


  -- |'negate' simply distributes into the grade components
  negate :: Cl3 es -> Cl3 es
negate (R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a0)
  negate (V3 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a1) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a2) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a3)
  negate (BV Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12)
  negate (I Posit es
a123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a123)
  negate (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) =  Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a0)
                                (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a1) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a2) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a3)
  negate (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a0)
                                (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12)
  negate (C Posit es
a0 Posit es
a123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a0)
                         (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a123)
  negate (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a1) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a2) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a3)
                                          (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12)
  negate (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a1) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a2) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a3)
                                   (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a123)
  negate (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12)
                                      (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a123)
  negate (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a0)
                                                  (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a1) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a2) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a3)
                                                  (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12)
                                                  (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a123)

-- | 'reimMag' small helper function to calculate magnitude for PV and TPV
reimMag :: PositF es => Posit es -> Posit es -> Posit es -> Posit es -> Posit es
reimMag :: forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Posit es -> Posit es
reimMag Posit es
v0 Posit es
v1 Posit es
v2 Posit es
v3 =
  let sumsqs :: Posit es
sumsqs = Posit es
v1Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
v2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
v3Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      x :: Posit es
x = Posit es -> Posit es
forall a. Num a => a -> a
abs Posit es
v0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
sqrt Posit es
sumsqs
  in Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es
v0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
sumsqs Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
x)

-- |Cl(3,0) has a Fractional instance
instance PositF es => Fractional (Cl3 es) where
  -- |Some of the sub algebras are division algebras but APS is not a division algebra
  recip :: Cl3 es -> Cl3 es
recip (R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Fractional a => a -> a
recip Posit es
a0)   -- R is a division algebra
  recip Cl3 es
cliff = 
    let R Posit es
mag = Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs Cl3 es
cliff
        recipsqmag :: Posit es
recipsqmag = Posit es -> Posit es
forall a. Fractional a => a -> a
recip Posit es
magPosit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
        negrecipsqmag :: Posit es
negrecipsqmag = Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
recipsqmag
        recipmag2 :: Cl3 es
recipmag2 = Cl3 es -> Cl3 es
forall a. Fractional a => a -> a
recip(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toR (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall a b. (a -> b) -> a -> b
$ Cl3 es
cliff Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
bar Cl3 es
cliff
        go_recip :: Cl3 es -> Cl3 es
go_recip (V3 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 (Posit es
recipsqmag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a1) (Posit es
recipsqmag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a2) (Posit es
recipsqmag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a3)
        go_recip (BV Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV (Posit es
negrecipsqmag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a23) (Posit es
negrecipsqmag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a31) (Posit es
negrecipsqmag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a12)
        go_recip (I Posit es
a123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es
negrecipsqmag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a123)
        go_recip (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es
recipsqmag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a0) (Posit es
negrecipsqmag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a23) (Posit es
negrecipsqmag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a31) (Posit es
negrecipsqmag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a12)  -- H is a division algebra
        go_recip (C Posit es
a0 Posit es
a123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es
recipsqmag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a0) (Posit es
negrecipsqmag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a123)   -- C is a division algebra
        go_recip (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es
recipsqmag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a1) (Posit es
recipsqmag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a2) (Posit es
recipsqmag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a3) (Posit es
negrecipsqmag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a123)
        go_recip pv :: Cl3 es
pv@PV{} = Cl3 es
recipmag2 Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
bar Cl3 es
pv
        go_recip tpv :: Cl3 es
tpv@TPV{} = Cl3 es
recipmag2 Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
bar Cl3 es
tpv
        go_recip Cl3 es
cliffor = Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
reduce (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall a b. (a -> b) -> a -> b
$ (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmp Cl3 es -> Cl3 es
forall a. Fractional a => a -> a
recip Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
recip' Cl3 es
cliffor
    in Cl3 es -> Cl3 es
go_recip Cl3 es
cliff


  -- |'fromRational'
  fromRational :: Rational -> Cl3 es
fromRational Rational
rat = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Rational -> Posit es
forall a. Fractional a => Rational -> a
fromRational Rational
rat)


-- |Cl(3,0) has a "Floating" instance.
instance PositF es => Floating (Cl3 es) where
  pi :: Cl3 es
pi = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
forall a. Floating a => a
pi

  --
  exp :: Cl3 es -> Cl3 es
exp (R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
exp Posit es
a0)
  exp (I Posit es
a123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Floating a => a -> a
cos Posit es
a123) (Posit es -> Posit es
forall a. Floating a => a -> a
sin Posit es
a123)
  exp (C Posit es
a0 Posit es
a123)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
exp (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
exp (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0)
    | Bool
otherwise =
      let expa0 :: Posit es
expa0 = Posit es -> Posit es
forall a. Floating a => a -> a
exp Posit es
a0
      in Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es
expa0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
cos Posit es
a123) (Posit es
expa0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
sin Posit es
a123)
  exp Cl3 es
cliffor = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmp Cl3 es -> Cl3 es
forall a. Floating a => a -> a
exp Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
exp' Cl3 es
cliffor



  --
  log :: Cl3 es -> Cl3 es
log (R Posit es
a0)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
>= Posit es
0 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
log Posit es
a0)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== (-Posit es
1) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
forall a. Floating a => a
pi
    | Bool
otherwise = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Floating a => a -> a
log(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a0) Posit es
forall a. Floating a => a
pi
  log (I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
forall (es :: ES). PositC es => Posit es
NaR
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
1 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es
forall a. Floating a => a
piPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== (-Posit es
1) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (-Posit es
forall a. Floating a => a
piPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)
    | Bool
otherwise = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Floating a => a -> a
log(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Num a => a -> a
abs (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123) (Posit es -> Posit es
forall a. Num a => a -> a
signum Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* (Posit es
forall a. Floating a => a
piPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2))
  log (C Posit es
a0 Posit es
a123)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
&& Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
forall (es :: ES). PositC es => Posit es
NaR
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
log (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
log (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0)
    | Bool
otherwise = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Floating a => a -> a
log (Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2) Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/ Posit es
2) (Posit es -> Posit es -> Posit es
forall a. RealFloat a => a -> a -> a
atan2 Posit es
a123 Posit es
a0)
  log Cl3 es
cliffor = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmp Cl3 es -> Cl3 es
forall a. Floating a => a -> a
log Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
log' Cl3 es
cliffor


  --
  sqrt :: Cl3 es -> Cl3 es
sqrt (R Posit es
a0)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
>= Posit es
0 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
sqrt Posit es
a0)
    | Bool
otherwise = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es -> Posit es
forall a. Floating a => a -> a
sqrt(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a0)
  sqrt (I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0
    | Bool
otherwise =
        let sqrtr :: Posit es
sqrtr = Posit es -> Posit es
forall a. Floating a => a -> a
sqrt(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Num a => a -> a
abs (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a123
            phiby2 :: Posit es
phiby2 = Posit es -> Posit es
forall a. Num a => a -> a
signum Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* (Posit es
forall a. Floating a => a
piPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
4) -- evaluated: atan2 a123 0 / 2
        in Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es
sqrtr Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
cos Posit es
phiby2) (Posit es
sqrtr Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
sin Posit es
phiby2)
  sqrt (C Posit es
a0 Posit es
a123)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
sqrt (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
sqrt (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0)
    | Bool
otherwise =
      let sqrtr :: Posit es
sqrtr = Posit es -> Posit es
forall a. Floating a => a -> a
sqrt(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
          phiby2 :: Posit es
phiby2 = Posit es -> Posit es -> Posit es
forall a. RealFloat a => a -> a -> a
atan2 Posit es
a123 Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/ Posit es
2
      in Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es
sqrtr Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
cos Posit es
phiby2) (Posit es
sqrtr Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
sin Posit es
phiby2)
  sqrt Cl3 es
cliffor = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmp Cl3 es -> Cl3 es
forall a. Floating a => a -> a
sqrt Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
sqrt' Cl3 es
cliffor

  --
  sin :: Cl3 es -> Cl3 es
sin (R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
sin Posit es
a0)
  sin (I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0
    | Bool
otherwise = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es -> Posit es
forall a. Floating a => a -> a
sinh Posit es
a123)
  sin (C Posit es
a0 Posit es
a123)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
sin (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
sin (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0)
    | Bool
otherwise = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Floating a => a -> a
sin Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
cosh Posit es
a123) (Posit es -> Posit es
forall a. Floating a => a -> a
cos Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
sinh Posit es
a123)
  sin Cl3 es
cliffor = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmp Cl3 es -> Cl3 es
forall a. Floating a => a -> a
sin Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
sin' Cl3 es
cliffor

  --
  cos :: Cl3 es -> Cl3 es
cos (R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
cos Posit es
a0)
  cos (I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
cos (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0)
    | Bool
otherwise = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
cosh Posit es
a123)
  cos (C Posit es
a0 Posit es
a123)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
cos (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
cos (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0)
    | Bool
otherwise = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Floating a => a -> a
cos Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
cosh Posit es
a123) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es -> Posit es
forall a. Floating a => a -> a
sin Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
sinh Posit es
a123)
  cos Cl3 es
cliffor = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmp Cl3 es -> Cl3 es
forall a. Floating a => a -> a
cos Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
cos' Cl3 es
cliffor

  --
  tan :: Cl3 es -> Cl3 es
tan (R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
tan Posit es
a0)
  tan (I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0
    | Bool
otherwise = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es -> Posit es
forall a. Floating a => a -> a
tanh Posit es
a123)
  tan (C Posit es
a0 Posit es
a123)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
tan (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
tan (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0)
    | Bool
otherwise =
      let
        m :: Posit es
m = Posit es
x2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
y2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
        x1 :: Posit es
x1 = Posit es
sinxPosit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
coshy
        y1 :: Posit es
y1 = Posit es
cosxPosit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
sinhy
        x2 :: Posit es
x2 = Posit es
cosxPosit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
coshy
        y2 :: Posit es
y2 = Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
sinxPosit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
sinhy
        sinx :: Posit es
sinx  = Posit es -> Posit es
forall a. Floating a => a -> a
sin Posit es
a0
        cosx :: Posit es
cosx  = Posit es -> Posit es
forall a. Floating a => a -> a
cos Posit es
a0
        sinhy :: Posit es
sinhy = Posit es -> Posit es
forall a. Floating a => a -> a
sinh Posit es
a123
        coshy :: Posit es
coshy = Posit es -> Posit es
forall a. Floating a => a -> a
cosh Posit es
a123
      in Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C ((Posit es
x1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
x2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
y1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
y2)Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
m) ((Posit es
x2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
y1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
x1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
y2)Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
m)
  tan Cl3 es
cliffor = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmp Cl3 es -> Cl3 es
forall a. Floating a => a -> a
tan Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
tan' Cl3 es
cliffor



  --
  asin :: Cl3 es -> Cl3 es
asin (R Posit es
a0)
      -- asin (R a0) = I (-1) * log (I 1 * R a0 + sqrt (1 - (R a0)^2))
      -- I (-1) * log (I a0 + sqrt (R 1 - (R a0)^2))
      -- I (-1) * log (I a0 + sqrt (R (1 - a0^2)))
      -- I (-1) * log (I a0 + (I (sqrt.negate $ 1 - a0^2)))
      -- I (-1) * log (I a0 + (sqrt.negate $ 1 - a0^2))
      -- Def ==> log (I a123) = C (log.abs $ a123) (signum a123 * (pi/2))
      -- I (-1) * C (log.abs $ (a0 + (sqrt.negate $ 1 - a0^2))) (signum (a0 + (sqrt.negate $ 1 - a0^2)) * (pi/2))
      -- C (signum (a0 + (sqrt.negate $ 1 - a0^2)) * (pi/2)) (negate.log.abs $ (a0 + (sqrt.negate $ 1 - a0^2)))
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
> Posit es
1 = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es
forall a. Floating a => a
piPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2) (Posit es -> Posit es
forall a. Num a => a -> a
negate(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
log (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
1)))
      -- I (-1) * log (I a0 + R (sqrt $ 1 - a0^2))
      -- I (-1) * log (C (sqrt $ 1 - a0^2) a0)
      -- Def ==> log (C a0 a123) = C (log.sqrt $ a0^2 + a123^2) (atan2 a123 a0)
      -- I (-1) * C (log.sqrt $ (sqrt $ 1 - a0^2)^2 + a0^2) (atan2 a0 (sqrt $ 1 - a0^2))
      -- C (atan2 a0 (sqrt $ 1 - a0^2)) (negate.log.sqrt $ (sqrt $ 1 - a0^2)^2 + a0^2)
      -- C (atan(a0/(sqrt $ 1 - a0^2))) (negate.log.sqrt $ 1)
      -- Apply sqrt 1 == 1, Apply log 1 == 0, Rduce
      -- R (atan(a0/(sqrt $ 1 - a0^2)))
      -- Identity: tan(asin x) = x / (sqrt (1 - x^2))
      -- R (asin a0)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
>= (-Posit es
1) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
asin Posit es
a0)
      -- I (-1) * log (I a0 + sqrt (R (1 - a0^2)))
      -- I (-1) * log (I (a0 + (sqrt.negate $ 1 - a0^2)))
      -- Def ==> log (I a123) = C (log.abs $ a123) (signum a123 * (pi/2))
      -- I (-1) * C (log.abs $ (a0 + (sqrt.negate $ 1 - a0^2))) (signum (a0 + (sqrt.negate $ 1 - a0^2)) * (pi/2))
      -- C (signum (a0 + (sqrt.negate $ 1 - a0^2)) * (pi/2)) (negate.log.abs $ (a0 + (sqrt.negate $ 1 - a0^2)))
      -- For the negative branch signum is -1
      -- C (-pi/2) (negate.log.abs $ (a0 + (sqrt $ a0^2 - 1)))
    | Bool
otherwise = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (-Posit es
forall a. Floating a => a
piPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2) (Posit es -> Posit es
forall a. Num a => a -> a
negate(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
log(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Num a => a -> a
abs (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
1)))
      --
      -- For I:
      -- I (-1) * log (I (1) * I a123 + sqrt (R 1 - (I a123)^2))
      -- I (-1) * log (R (-a123) + sqrt (R 1 - (I a123)^2))
      -- I (-1) * log (R (-a123) + sqrt (R 1 - R (-a123^2)))
      -- I (-1) * log (R (-a123) + sqrt (R (1 + a123^2)))
      -- I (-1) * log (R (-a123) + R (sqrt $ 1 + a123^2))
      -- I (-1) * log (R ((sqrt $ 1 + a123^2) - a123))
      -- ((sqrt $ 1 + a123^2) - a123)) is always positive
      -- Def ==> log (R a0) | a0 >= 0 = R (log a0)
      -- I (-1) * (R (log $ (sqrt $ 1 + a123^2) - a123))
      -- I (negate.log $ (sqrt $ 1 + a123^2) - a123)
      -- I (negate.log $ (sqrt $ 1 + a123^2) - a123)
      -- because ((sqrt $ 1 + a123^2) - a123)) is always positive: negate.log == log.Rcip
      -- I (log.recip $ (sqrt $ 1 + a123^2) - a123)
      -- recip $ (sqrt $ 1 + a123^2) - a123) == (sqrt $ 1 + a123^2) + a123)
      -- I (log $ (sqrt $ 1 + a123^2) + a123)
      -- I (asinh a123)
  asin (I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0
    | Bool
otherwise = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es -> Posit es
forall a. Floating a => a -> a
asinh Posit es
a123)
    --
  asin (C Posit es
a0 Posit es
a123)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
asin (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
asin (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0)
      -- For C:
      -- I (-1) * log (I 1 * C a0 a123 + sqrt (R 1 - (C a0 a123)^2))
      -- I (-1) * log (C (-a123) a0 + sqrt (R 1 - (C a0 a123)^2))
      -- I (-1) * log (C (-a123) a0 + sqrt (C (1 - a0^2 + a123^2) (-2*a0*a123)))
      -- Def ==> sqrt (C a0 a123) = C ((sqrt.sqrt $ a0^2 + a123^2) * cos (atan2 a123 a0 / 2)) ((sqrt.sqrt $ a0^2 + a123^2) * sin (atan2 a123 a0 / 2))
      -- I (-1) * log (C (-a123) a0 + C ((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * cos (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) ((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * sin (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)))
      -- I (-1) * log (C (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * cos (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) - a123) (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * sin (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) + a0))
      -- Def ==> log (C a0 a123) = C (log.sqrt $ a0^2 + a123^2) (atan2 a123 a0)
      -- C (atan2 (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * sin (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) + a0)
      --          (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * cos (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) - a123))
      --   (negate.log.sqrt $ (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * cos (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) - a123)^2 +
      --                      (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * sin (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) + a0)^2)
      -- Collect like terms:
    | Bool
otherwise = 
      let theta :: Posit es
theta = Posit es -> Posit es -> Posit es
forall a. RealFloat a => a -> a -> a
atan2 (-Posit es
2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a123) (Posit es
1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)
          rho :: Posit es
rho = Posit es -> Posit es
forall a. Floating a => a -> a
sqrt(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ (Posit es
1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (-Posit es
2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a123)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
          b0 :: Posit es
b0 = Posit es
rho Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
cos (Posit es
thetaPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2) Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123
          b123 :: Posit es
b123 = Posit es
rho Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
sin (Posit es
thetaPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2) Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a0
      in Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es -> Posit es
forall a. RealFloat a => a -> a -> a
atan2 Posit es
b123 Posit es
b0) (Posit es -> Posit es
forall a. Floating a => a -> a
log (Posit es
b0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2) Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/ (-Posit es
2))
    --
  asin Cl3 es
cliffor = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmp Cl3 es -> Cl3 es
forall a. Floating a => a -> a
asin Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
asin' Cl3 es
cliffor

  --
  acos :: Cl3 es -> Cl3 es
acos (R Posit es
a0)
      -- acos x == (pi/2) - asin x so just subistute
      -- For R a0 > 1:
      -- R (pi/2) - C (pi/2) (negate.log $ (a0 + (sqrt $ a0^2 - 1)))
      -- C 0 (negate.negate.log $ (a0 + (sqrt $ a0^2 - 1)))
      -- I (log $ (a0 + (sqrt $ a0^2 - 1)))
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
> Posit es
1 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es -> Posit es
forall a. Floating a => a -> a
log (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
1)))
      -- For R a0 > (-1)
      -- R (pi/2) - R (asin a0) == R (acos a0)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
>= (-Posit es
1) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
acos Posit es
a0)
      -- For R otherwise:
      -- R (pi/2) - C (-pi/2) (negate.log.abs $ (a0 + (sqrt $ a0^2 - 1)))
      -- C pi (negate.negate.log.abs $ (a0 + (sqrt $ a0^2 - 1)))
      -- C pi (log.abs $ (a0 + (sqrt $ a0^2 - 1)))
    | Bool
otherwise = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
forall a. Floating a => a
pi (Posit es -> Posit es
forall a. Floating a => a -> a
log(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Num a => a -> a
abs (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ (Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
1)))
      --
      -- For I:
      -- asin (I a123)  = I (asinh a123) -- so,
      -- acos x == R (pi/2) - I (asinh a123)
      -- C (pi/2) (negate $ asinh a123)
  acos (I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es
forall a. Floating a => a
piPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)
    | Bool
otherwise = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es
forall a. Floating a => a
piPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2) (Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es -> Posit es
forall a. Floating a => a -> a
asinh Posit es
a123)
  --
  acos (C Posit es
a0 Posit es
a123)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
acos (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
acos (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0)
      -- For C:
      -- asin (C a0 a123) = C (atan2 (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * sin (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) + a0) (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * cos (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) - a123)) (negate.log.sqrt $ (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * cos (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) - a123)^2 + (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * sin (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) + a0)^2)
      -- acos x == (pi/2) - asin x so just subistute
      -- R (pi/2) - C (atan2 (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * sin (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) + a0) (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * cos (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) - a123)) (negate.log.sqrt $ (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * cos (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) - a123)^2 + (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * sin (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) + a0)^2)
    | Bool
otherwise =
      let theta :: Posit es
theta = Posit es -> Posit es -> Posit es
forall a. RealFloat a => a -> a -> a
atan2 (-Posit es
2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a123) (Posit es
1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)
          rho :: Posit es
rho = Posit es -> Posit es
forall a. Floating a => a -> a
sqrt(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ (Posit es
1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (-Posit es
2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a123)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
          b0 :: Posit es
b0 = Posit es
rho Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
cos (Posit es
thetaPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2) Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123
          b123 :: Posit es
b123 = Posit es
rho Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
sin (Posit es
thetaPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2) Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a0
      in Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C ((Posit es
forall a. Floating a => a
piPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2) Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es -> Posit es -> Posit es
forall a. RealFloat a => a -> a -> a
atan2 Posit es
b123 Posit es
b0) (Posit es -> Posit es
forall a. Floating a => a -> a
log (Posit es
b0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2) Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/ Posit es
2)
    --
  acos Cl3 es
cliffor = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmp Cl3 es -> Cl3 es
forall a. Floating a => a -> a
acos Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
acos' Cl3 es
cliffor

  --
  atan :: Cl3 es -> Cl3 es
atan (R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
atan Posit es
a0)
  --
  atan (I Posit es
a123)
      -- I (0.5) * (log (R 1 - (I 1 * I a123)) - log (R 1 + (I 1 * I a123)))
      -- I (0.5) * (log (R 1 - (R (-a123))) - log (R 1 + (R (-a123))))
      -- I (0.5) * ((log (R (1 + a123))) - log (R (1 - a123)))
      -- Def ==> C (log.negate $ a0) pi for negative a123
      -- I (0.5) * ((log (R (1 + a123))) - (C (log.negate $ (1 - a123)) pi))
      -- Def ==> R (log a0) for positive a123
      -- I (0.5) * ((R (log (1 + a123))) - (C (log.negate $ (1 - a123)) pi))
      -- I (0.5) * (C (log (1 + a123) - (log.negate $ (1 - a123))) (-pi))
      -- C (pi/2) ((log (1 + a123) - (log.negate $ (1 - a123)))/2)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
> Posit es
1 = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es
forall a. Floating a => a
piPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2) (Posit es
0.5Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*(Posit es -> Posit es
forall a. Floating a => a -> a
log (Posit es
1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123) Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es -> Posit es
forall a. Floating a => a -> a
log (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
1)))
      -- I (0.5) * (log (R 1 - (I 1 * I a123)) - log (R 1 + (I 1 * I a123)))
      -- I (0.5) * (log (R 1 - (R (-a123))) - log (R 1 + (R (-a123))))
      -- I (0.5) * ((log (R (1 + a123))) - log (R (1 - a123)))
      -- I (0.5) * ((R (log (1 + a123))) - R (log (1 - a123)))
      -- I (0.5) * (R ((log (1 + a123)) - (log (1 - a123))))
      -- I (((log (1 + a123)) - (log (1 - a123)))/2)
      -- I (atanh a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
>= (-Posit es
1) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es -> Posit es
forall a. Floating a => a -> a
atanh Posit es
a123)
      -- I (0.5) * (log (R 1 - (I 1 * I a123)) - log (R 1 + (I 1 * I a123)))
      -- I (0.5) * (log (R 1 - (R (-a123))) - log (R 1 + (R (-a123))))
      -- I (0.5) * ((log (R (1 + a123))) - R (log (1 - a123)))
      -- C (-pi/2) (((log.negate $ (1 + a123)) - (log (1 - a123)))/2)
    | Bool
otherwise = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (-Posit es
forall a. Floating a => a
piPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2) (((Posit es -> Posit es
forall a. Floating a => a -> a
log(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ (Posit es
1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123)) Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es -> Posit es
forall a. Floating a => a -> a
log (Posit es
1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123))Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)
      --
      -- I (0.5) * (log (R 1 - (I 1 * C a0 a123)) - log (R 1 + (I 1 * C a0 a123)))
      -- I (0.5) * (log (C (1 + a123) (-a0)) - log (C (1 - a123) a0))
      -- Def ==> log (C a0 a123) = C (log.sqrt $ a0^2 + a123^2) (atan2 a123 a0)
      -- I (0.5) * ((C (log.sqrt $ (1 + a123)^2 + (-a0)^2) (atan2 (-a0) (1 + a123))) - (C (log.sqrt $ (1 - a123)^2 + a0^2) (atan2 a0 (1 - a123))))
      -- I (0.5) * C ((log.sqrt $ (1 + a123)^2 + (-a0)^2) - (log.sqrt $ (1 - a123)^2 + a0^2)) ((atan2 (-a0) (1 + a123)) - (atan2 a0 (1 - a123)))
      -- I (0.5) * C (0.5*((log $ (1 + a123)^2 + a0^2) - (log $ (1 - a123)^2 + a0^2))) ((atan2 (-a0) (1 + a123)) - (atan2 a0 (1 - a123)))
      -- C (((atan2 a0 (1 - a123)) + (atan2 a0 (1 + a123)))/2) (((log $ (1 + a123)^2 + a0^2) - (log $ (1 - a123)^2 + a0^2))/4)
  atan (C Posit es
a0 Posit es
a123)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
atan (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
atan (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0)
    | Bool
otherwise = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C ((Posit es -> Posit es -> Posit es
forall a. RealFloat a => a -> a -> a
atan2 Posit es
a0 (Posit es
1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123) Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es -> Posit es -> Posit es
forall a. RealFloat a => a -> a -> a
atan2 Posit es
a0 (Posit es
1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123))Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)
                    ((Posit es -> Posit es
forall a. Floating a => a -> a
log ((Posit es
1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2) Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es -> Posit es
forall a. Floating a => a -> a
log ((Posit es
1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2))Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
4)
    --
  atan Cl3 es
cliffor = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmp Cl3 es -> Cl3 es
forall a. Floating a => a -> a
atan Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
atan' Cl3 es
cliffor

  --
  sinh :: Cl3 es -> Cl3 es
sinh (R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
sinh Posit es
a0)
  sinh (I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0
    | Bool
otherwise = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es -> Posit es
forall a. Floating a => a -> a
sin Posit es
a123)
  sinh (C Posit es
a0 Posit es
a123)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
sinh (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
sinh (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0)
    | Bool
otherwise = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Floating a => a -> a
cos Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
sinh Posit es
a0) (Posit es -> Posit es
forall a. Floating a => a -> a
sin Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
cosh Posit es
a0)
  sinh Cl3 es
cliffor = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmp Cl3 es -> Cl3 es
forall a. Floating a => a -> a
sinh Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
sinh' Cl3 es
cliffor

  --
  cosh :: Cl3 es -> Cl3 es
cosh (R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
cosh Posit es
a0)
  cosh (I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
1
    | Bool
otherwise = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
cos Posit es
a123)
  cosh (C Posit es
a0 Posit es
a123)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
cosh (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
cosh (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0)
    | Bool
otherwise = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Floating a => a -> a
cos Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
cosh Posit es
a0) (Posit es -> Posit es
forall a. Floating a => a -> a
sin Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
sinh Posit es
a0)
  cosh Cl3 es
cliffor = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmp Cl3 es -> Cl3 es
forall a. Floating a => a -> a
cosh Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
cosh' Cl3 es
cliffor

  --
  tanh :: Cl3 es -> Cl3 es
tanh (R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
tanh Posit es
a0)
  tanh (I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0
    | Bool
otherwise = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es -> Posit es
forall a. Floating a => a -> a
tan Posit es
a123)
  tanh (C Posit es
a0 Posit es
a123)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
tanh (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
tanh (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0)
    | Bool
otherwise =
      let
        m :: Posit es
m = Posit es
x2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
y2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
        x1 :: Posit es
x1 = Posit es
cosyPosit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
sinhx
        y1 :: Posit es
y1 = Posit es
sinyPosit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
coshx
        x2 :: Posit es
x2 = Posit es
cosyPosit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
coshx
        y2 :: Posit es
y2 = Posit es
sinyPosit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
sinhx
        siny :: Posit es
siny  = Posit es -> Posit es
forall a. Floating a => a -> a
sin Posit es
a123
        cosy :: Posit es
cosy  = Posit es -> Posit es
forall a. Floating a => a -> a
cos Posit es
a123
        sinhx :: Posit es
sinhx = Posit es -> Posit es
forall a. Floating a => a -> a
sinh Posit es
a0
        coshx :: Posit es
coshx = Posit es -> Posit es
forall a. Floating a => a -> a
cosh Posit es
a0
      in Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C ((Posit es
x1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
x2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
y1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
y2)Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
m) ((Posit es
x2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
y1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
x1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
y2)Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
m)
  tanh Cl3 es
cliffor = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmp Cl3 es -> Cl3 es
forall a. Floating a => a -> a
tanh Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
tanh' Cl3 es
cliffor

  --
  asinh :: Cl3 es -> Cl3 es
asinh (R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
asinh Posit es
a0)
  --
  asinh (I Posit es
a123)
      -- log (I a123 + sqrt (R (1 - a123^2)))
      -- 3 branches where between -1 and 1 it is just asin
      -- For a123 > 1:
      -- log (I a123 + I (sqrt.negate $ (1 - a123^2)))
      -- log (I (a123 + (sqrt (a123^2 - 1))))
      -- Def ==> log (I a123) = C (log.abs $ a123) (signum a123 * (pi/2))
      -- C (log.abs $ (a123 + (sqrt (a123^2 - 1)))) (signum (a123 + (sqrt (a123^2 - 1))) * (pi/2))
      -- a123 is positive so signum evaluates to 1
      -- C (log.abs $ (a123 + (sqrt (a123^2 - 1)))) (pi/2)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
> Posit es
1 = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Floating a => a -> a
log(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Num a => a -> a
abs (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
1))) (Posit es
forall a. Floating a => a
piPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)
      -- log (I a123 + sqrt (R (1 - a123^2)))
      -- log (I a123 + R (sqrt (1 - a123^2)))
      -- log (C (sqrt (1 - a123^2)) a123)
      -- Def ==> log (C a0 a123) = C (log.sqrt $ a0^2 + a123^2) (atan2 a123 a0)
      -- C (log.sqrt $ (sqrt (1 - a123^2))^2 + a123^2) (atan2 a123 (sqrt (1 - a123^2)))
      -- (sqrt (1 - a123^2))^2 + a123^2 == 1
      -- sqrt 1 == 1
      -- log 1 == 0
      -- I (atan2 a123 (sqrt (1 - a123^2)))
      -- I (atan (a123 / (sqrt (1 - a123^2))))
      -- Identity: tan(asin x) = x / (sqrt (1 - x^2))
      -- asin a123 = atan (a123 / (sqrt (1 - a123^2)))
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
>= (-Posit es
1) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es -> Posit es
forall a. Floating a => a -> a
asin Posit es
a123)
      -- log (I a123 + sqrt (R (1 - a123^2)))
      -- For a123 < (-1):
      -- log (I a123 + I (sqrt.negate $ (1 - a123^2)))
      -- log (I (a123 + (sqrt (a123^2 - 1))))
      -- Def ==> log (I a123) = C (log.abs $ a123) (signum a123 * (pi/2))
      -- C (log.abs $ (a123 + (sqrt (a123^2 - 1)))) (signum (a123 + (sqrt (a123^2 - 1))) * (pi/2))
      -- for a123 lt (-1) signum evaluates to -1
    | Bool
otherwise = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Floating a => a -> a
log(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Num a => a -> a
abs (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
1))) (-Posit es
forall a. Floating a => a
piPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)
    --
  asinh (C Posit es
a0 Posit es
a123)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
asinh (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
asinh (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0)
      -- For C:
      -- log (C a0 a123 + sqrt (C (a0^2 - a123^2 +1) (2*a0*a123)))
      -- Def ==> sqrt (C a0 a123) = C ((sqrt.sqrt $ a0^2 + a123^2) * cos (atan2 a123 a0 / 2)) ((sqrt.sqrt $ a0^2 + a123^2) * sin (atan2 a123 a0 / 2))
      -- log (C a0 a123 + C ((sqrt.sqrt $ (a0^2 - a123^2 +1)^2 + (2*a0*a123)^2) * cos (atan2 (2*a0*a123) (a0^2 - a123^2 +1) / 2)) ((sqrt.sqrt $ (a0^2 - a123^2 +1)^2 + (2*a0*a123)^2) * sin (atan2 (2*a0*a123) (a0^2 - a123^2 +1) / 2)))
      -- log (C (a0 + ((sqrt.sqrt $ (a0^2 - a123^2 +1)^2 + (2*a0*a123)^2) * cos (atan2 (2*a0*a123) (a0^2 - a123^2 +1) / 2))) (a123 + ((sqrt.sqrt $ (a0^2 - a123^2 +1)^2 + (2*a0*a123)^2) * sin (atan2 (2*a0*a123) (a0^2 - a123^2 +1) / 2))))
      -- Def ==> log (C a0 a123) = C (log.sqrt $ a0^2 + a123^2) (atan2 a123 a0)
      -- C (log.sqrt $ (a0 + ((sqrt.sqrt $ (a0^2 - a123^2 +1)^2 + (2*a0*a123)^2) * cos (atan2 (2*a0*a123) (a0^2 - a123^2 +1) / 2)))^2 +
      --               (a123 + ((sqrt.sqrt $ (a0^2 - a123^2 +1)^2 + (2*a0*a123)^2) * sin (atan2 (2*a0*a123) (a0^2 - a123^2 +1) / 2)))^2)
      --   (atan2 (a123 + ((sqrt.sqrt $ (a0^2 - a123^2 +1)^2 + (2*a0*a123)^2) * sin (atan2 (2*a0*a123) (a0^2 - a123^2 +1) / 2)))
      --          (a0 + ((sqrt.sqrt $ (a0^2 - a123^2 +1)^2 + (2*a0*a123)^2) * cos (atan2 (2*a0*a123) (a0^2 - a123^2 +1) / 2))))
      -- Collect like terms:
    | Bool
otherwise =
      let theta :: Posit es
theta = Posit es -> Posit es -> Posit es
forall a. RealFloat a => a -> a -> a
atan2 (Posit es
2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a123) (Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+Posit es
1)
          rho :: Posit es
rho = Posit es -> Posit es
forall a. Floating a => a -> a
sqrt(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ (Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+Posit es
1)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a123)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
          b0 :: Posit es
b0 = Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
rho Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
cos (Posit es
thetaPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)
          b123 :: Posit es
b123 = Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
rho Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
sin (Posit es
thetaPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)
      in Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Floating a => a -> a
log (Posit es
b0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2) Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/ Posit es
2) (Posit es -> Posit es -> Posit es
forall a. RealFloat a => a -> a -> a
atan2 Posit es
b123 Posit es
b0)
    --
  asinh Cl3 es
cliffor = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmp Cl3 es -> Cl3 es
forall a. Floating a => a -> a
asinh Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
asinh' Cl3 es
cliffor

  --
  acosh :: Cl3 es -> Cl3 es
acosh (R Posit es
a0)
    -- log (R a0 + sqrt(R (a0+1)) * sqrt(R (a0-1)))
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
>= Posit es
1 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
acosh Posit es
a0)
      -- log (R a0 + sqrt(R (a0+1)) * sqrt(R (a0-1)))
      -- log (R a0 + R (sqrt $ a0+1) * R (sqrt $ a0-1))
      -- log (R a0 + R ((sqrt $ a0+1) * (sqrt $ a0-1)))
      -- log (R (a0 + (sqrt $ a0+1) * (sqrt $ a0-1)))
      -- R (log $ a0 + (sqrt $ a0+1) * (sqrt $ a0-1))
      -- R (acosh a0)
      -- Strangely ghc substitutes 'acosh a0' with something like:
      -- R (log $ a0 + (a0 + 1 ) * (sqrt $ (a0 - 1)/(a0 + 1)))
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
>= (-Posit es
1) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es -> Posit es -> Posit es
forall a. RealFloat a => a -> a -> a
atan2 (Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
-Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2) Posit es
a0) -- This is I because of cancelation of the real component
      -- log (R a0 + sqrt(R (a0+1)) * sqrt(R (a0-1)))
      -- log (R a0 + R (sqrt $ a0+1) * I (sqrt.negate $ a0-1))
      -- log (R a0 + I ((sqrt $ a0+1) * (sqrt.negate $ a0-1)))
      -- log (R a0 + I ((sqrt $ a0+1) * (sqrt $ 1-a0)))
      -- log $ C (a0) ((sqrt $ a0+1) * (sqrt $ 1-a0))
      -- Def log ==> log (C b0 b123) = C (log.sqrt $ b0^2 + b123^2) (atan2 b123 b0)
      -- let b0 = a0
      --     b123 = (sqrt $ a0+1) * (sqrt $ 1-a0) = sqrt $ 1-a0^2
      -- in C (log.sqrt $ b0^2 + b123^2) (atan2 b123 b0)
      -- b123^2 = 1-a0^2
      -- C (log.sqrt $ a0^2 + 1-a0^2) (atan2 (sqrt $ 1-a0^2) a0)
      -- C (log.sqrt $ 1) (atan2 (sqrt $ 1-a0^2) a0)
      -- C 0 (atan2 (sqrt $ 1-a0^2) a0)
      -- I (atan2 (sqrt $ 1-a0^2) a0)
    | Bool
otherwise = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Floating a => a -> a
acosh(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a0) Posit es
forall a. Floating a => a
pi
      -- log (R a0 + sqrt(R (a0+1)) * sqrt(R (a0-1)))
      -- log (R a0 + I (sqrt.negate $ a0+1) * I (sqrt.negate $ a0-1))
      -- Def ==> (I a123) * (I b123) = R (negate $ a123*b123)
      -- log (R a0 + R (negate $ (sqrt.negate $ a0+1) * (sqrt.negate $ a0-1))
      -- log (R (a0 + (negate $ (sqrt.negate $ a0+1) * (sqrt.negate $ a0-1))))
      -- C (log.negate $ (a0 + (negate $ (sqrt.negate $ a0+1) * (sqrt.negate $ a0-1)))) pi
      -- C (log $ (negate a0 + ((sqrt $ (negate a0)+1) * (sqrt $ (negate a0)-1)))) pi
      -- C (acosh (negate a0)) pi
      --
  acosh (I Posit es
a123)
      -- log (I a123 + sqrt(C 1 a123) * sqrt(C (-1) a123))
      -- Def ==> sqrt (C a0 a123) =
      --   C ((sqrt.sqrt $ a0^2 + a123^2) * cos (atan2 a123 a0 / 2))
      --      ((sqrt.sqrt $ a0^2 + a123^2) * sin (atan2 a123 a0 / 2))
      -- log (I a123 +
      --      C ((sqrt.sqrt $ 1 + a123^2) * cos (atan2 a123 1 / 2))
      --        ((sqrt.sqrt $ 1 + a123^2) * sin (atan2 a123 1 / 2)) *
      --      C ((sqrt.sqrt $ 1 + a123^2) * cos (atan2 a123 (-1) / 2))
      --        ((sqrt.sqrt $ 1 + a123^2) * sin (atan2 a123 (-1) / 2)) )
      -- Factor out "(sqrt.sqrt $ 1 + a123^2)*"
      -- log (I a123 + R (sqrt.sqrt $ 1 + a123^2) *
      --               C (cos (atan2 a123 1 / 2)) (sin (atan2 a123 1 / 2)) *
      --               R (sqrt.sqrt $ 1 + a123^2) *
      --               C (cos (atan2 a123 (-1) / 2)) (sin (atan2 a123 (-1) / 2)))
      -- Collect both R's and simplify
      -- log (I a123 + (R (sqrt $ 1 + a123^2)) *
      --                C (cos (atan2 a123 1 / 2)) (sin (atan2 a123 1 / 2)) *
      --                C (cos (atan2 a123 (-1) / 2)) (sin (atan2 a123 (-1) / 2)))
      -- Def ==> (C a0 a123) * (C b0 b123) = C (a0*b0 - a123*b123) (a0*b123 + a123*b0)
      -- log (I a123 + R (sqrt $ 1 + a123^2) *
      --               C ((cos (atan2 a123 1 / 2))*(cos (atan2 a123 (-1) / 2)) - (sin (atan2 a123 1 / 2))*(sin (atan2 a123 (-1) / 2)))
      --                 ((cos (atan2 a123 1 / 2))*(sin (atan2 a123 (-1) / 2)) + (sin (atan2 a123 1 / 2))*(cos (atan2 a123 (-1) / 2))) )
      --
      -- Solution now branches for positive and negative a123
      --
      -- For a123 > 0 Substitute (cos (atan2 a123 (-1) / 2)) == (sin (atan2 a123 1 / 2)) AND
      --                         (sin (atan2 a123 (-1) / 2)) == (cos (atan2 a123 1 / 2)) AND
      --                         atan2 a123 1 == atan a123
      -- log (I a123 + R (sqrt $ 1 + a123^2) *
      --               C ((cos (atan a123 / 2))*(sin (atan a123 / 2)) - (sin (atan a123 / 2))*(cos (atan a123 / 2)))
      --                 ((cos (atan a123 / 2))*(cos (atan a123 / 2)) + (sin (atan a123 / 2))*(sin (atan a123 / 2))) )
      -- sin^2 + cos^2 == 1 AND cos*sin - sin*cos == 0 AND Reduce C 0 1 to I 1 AND apply (*) AND apply (+)
      -- log (I (a123 + sqrt (1 + a123^2)))
      -- Def ==> log (I a123) = C (log.abs $ a123) (signum a123 * (pi/2))
      -- C (log.abs $ (a123 + sqrt (1 + a123^2))) (signum (a123 + sqrt (1 + a123^2)) * (pi/2))
      -- With a123 positive Apply signum:
      -- C (log.abs $ (a123 + sqrt (1 + a123^2))) (pi/2)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
> Posit es
0 = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Floating a => a -> a
log(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Num a => a -> a
abs (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es
1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2))) (Posit es
forall a. Floating a => a
piPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)
      -- With a123 == 0:
      -- reduce C 0 (pi/2)
      -- I (pi/2)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es
forall a. Floating a => a
piPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)
      -- For a123 < 0 Substitute (cos (atan2 a123 (-1) / 2)) == (negate.sin $ (atan2 a123 1 / 2)) AND
      --                         (sin (atan2 a123 (-1) / 2)) == (negate.cos $ (atan2 a123 1 / 2)) AND
      --                         atan2 a123 1 == atan a123
      -- log (I a123 + R (sqrt $ 1 + a123^2) *
      --               C ((cos (atan2 a123 1 / 2))*(negate.sin $ (atan2 a123 1 / 2)) - (sin (atan2 a123 1 / 2))*(negate.cos $ (atan2 a123 1 / 2)))
      --                 ((cos (atan2 a123 1 / 2))*(negate.cos $ (atan2 a123 1 / 2)) + (sin (atan2 a123 1 / 2))*(negate.sin $ (atan2 a123 1 / 2))) )
      -- Factor negate out AND sin^2 + cos^2 == 1 AND cos*sin - sin*cos == 0 AND Reduce C 0 (-1) to I (-1) AND apply (*) AND apply (+)
      -- log (I (a123 - sqrt (1 + a123^2)))
      -- Def ==> log (I a123) = C (log.abs $ a123) (signum a123 * (pi/2))
      -- C (log.abs $ (a123 - sqrt (1 + a123^2))) (signum (a123 - sqrt (1 + a123^2)) * (pi/2))
      -- With a123 negateive Apply signum:
      -- C (log.abs $ (a123 - sqrt (1 + a123^2))) (-pi/2)
    | Bool
otherwise = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Floating a => a -> a
log(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Num a => a -> a
abs (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ (Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es
1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2))) (-Posit es
forall a. Floating a => a
piPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)
    --
  acosh (C Posit es
a0 Posit es
a123)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
acosh (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
acosh (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0)
      -- log (C a0 a123 + sqrt(C (a0+1) a123) * sqrt(C (a0-1) a123))
      -- Def ==> sqrt (C a0 a123) =
      --   C ((sqrt.sqrt $ a0^2 + a123^2) * cos (atan2 a123 a0 / 2))
      --      ((sqrt.sqrt $ a0^2 + a123^2) * sin (atan2 a123 a0 / 2))
      -- log (C a0 a123 +
      --      C ((sqrt.sqrt $ (a0+1)^2 + a123^2) * cos (atan2 a123 (a0+1) / 2))
      --        ((sqrt.sqrt $ (a0+1)^2 + a123^2) * sin (atan2 a123 (a0+1) / 2)) *
      --      C ((sqrt.sqrt $ (a0-1)^2 + a123^2) * cos (atan2 a123 (a0-1) / 2))
      --        ((sqrt.sqrt $ (a0-1)^2 + a123^2) * sin (atan2 a123 (a0-1) / 2)) )
      -- Factor out the scalar in both Complex numbers
      -- log (C a0 a123 +
      --      R (sqrt.sqrt $ (a0+1)^2 + a123^2) *
      --      C (cos (atan2 a123 (a0+1) / 2)) (sin (atan2 a123 (a0+1) / 2)) *
      --      R (sqrt.sqrt $ (a0-1)^2 + a123^2) *
      --      C (cos (atan2 a123 (a0-1) / 2)) (sin (atan2 a123 (a0-1) / 2)) )
      -- Combine the R terms
      -- log (C a0 a123 +
      --      R (sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) *
      --      C (cos (atan2 a123 (a0+1) / 2)) (sin (atan2 a123 (a0+1) / 2)) *
      --      C (cos (atan2 a123 (a0-1) / 2)) (sin (atan2 a123 (a0-1) / 2)) )
      -- Def ==> (C a0 a123) * (C b0 b123) = C (a0*b0 - a123*b123)
      --                                       (a0*b123 + a123*b0)
      -- log (C a0 a123 +
      --      R (sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) *
      --      C (((cos (atan2 a123 (a0+1) / 2))*(cos (atan2 a123 (a0-1) / 2))) - ((sin (atan2 a123 (a0+1) / 2))*(sin (atan2 a123 (a0-1) / 2))))
      --        (((cos (atan2 a123 (a0+1) / 2))*(sin (atan2 a123 (a0-1) / 2))) + ((sin (atan2 a123 (a0+1) / 2))*(cos (atan2 a123 (a0-1) / 2)))) )
      -- =
      -- log (C a0 a123 +
      --      R (sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) *
      --      C (cos(0.5*(atan2 a123 (a0+1) + atan2 a123 (a0-1))))
      --        (sin(0.5*(atan2 a123 (a0-1) + atan2 a123 (a0+1)))) )
      -- Apply (*)
      -- log (C a0 a123 +
      --      C ((sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) *(cos(0.5*(atan2 a123 (a0+1) + atan2 a123 (a0-1)))))
      --        ((sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) *(sin(0.5*(atan2 a123 (a0-1) + atan2 a123 (a0+1))))) )
      -- Apply (+)
      -- log (C (a0 + (sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) * ((cos(0.5*(atan2 a123 (a0+1) + atan2 a123 (a0-1))))))
      --        (a123 + (sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) * ((sin(0.5*(atan2 a123 (a0-1) + atan2 a123 (a0+1)))))) )
      -- Def ==>  log (C a0 a123) = C (log.sqrt $ a0^2 + a123^2) (atan2 a123 a0)
      -- = C (log.sqrt $ (a0 + (sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) * ((cos(0.5*(atan2 a123 (a0+1) + atan2 a123 (a0-1))))))^2 + (a123 + (sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) * ((sin(0.5*(atan2 a123 (a0-1) + atan2 a123 (a0+1))))))^2) 
      --     (atan2 (a123 + (sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) * ((sin(0.5*(atan2 a123 (a0-1) + atan2 a123 (a0+1)))))) (a0 + (sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) * ((cos(0.5*(atan2 a123 (a0+1) + atan2 a123 (a0-1)))))))
      -- Collect like terms:
    | Bool
otherwise =
      let theta :: Posit es
theta = Posit es -> Posit es -> Posit es
forall a. RealFloat a => a -> a -> a
atan2 Posit es
a123 (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+Posit es
1) Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es -> Posit es -> Posit es
forall a. RealFloat a => a -> a -> a
atan2 Posit es
a123 (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
-Posit es
1)
          rho :: Posit es
rho = Posit es -> Posit es
forall a. Floating a => a -> a
sqrt(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ ((Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+Posit es
1)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2) Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* ((Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
-Posit es
1)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)
          b0 :: Posit es
b0 = Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
rho Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
cos(Posit es
thetaPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)
          b123 :: Posit es
b123 = Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
rho Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
sin(Posit es
thetaPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)
      in Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Floating a => a -> a
log (Posit es
b0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2) Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/ Posit es
2) (Posit es -> Posit es -> Posit es
forall a. RealFloat a => a -> a -> a
atan2 Posit es
b123 Posit es
b0)
    --
  acosh Cl3 es
cliffor = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmp Cl3 es -> Cl3 es
forall a. Floating a => a -> a
acosh Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
acosh' Cl3 es
cliffor

  --
  atanh :: Cl3 es -> Cl3 es
atanh (R Posit es
a0)
      -- = 0.5*log (R (1+a0)) - 0.5*log (R (1-a0))
      -- = (R ((0.5*).log $ 1+a0)) - (C ((0.5*).log.negate $ 1-a0) (pi/2))
      -- = C (((0.5*).log $ 1+a0) - ((0.5*).log.negate $ 1-a0)) (-pi/2)
      -- = C (0.5*((log $ 1+a0) - (log $ a0-1))) (-pi/2)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
> Posit es
1 = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C ((Posit es -> Posit es
forall a. Floating a => a -> a
log (Posit es
1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+Posit es
a0) Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es -> Posit es
forall a. Floating a => a -> a
log (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
-Posit es
1))Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2) (-Posit es
forall a. Floating a => a
piPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)
      -- = 0.5 * (log (R (1+a0)) - log (R (1-a0)))
      -- = 0.5*(R (log $ 1+a0) - R (log $ 1-a0))
      -- = R (0.5*(log $ 1+a0) - 0.5*(log $ 1-a0))
      -- = R (atanh a0)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
>= (-Posit es
1) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
atanh Posit es
a0)
      -- = 0.5 * (log (R (1+a0)) - log (R (1-a0)))
      -- = (C ((0.5*).log.negate $ 1+a0) (pi/2)) - (R ((0.5*).log $ 1-a0))
      -- = C (((0.5*).log.negate $ 1+a0) - ((0.5*).log $ 1-a0)) (pi/2)
      -- = C (0.5*((log.negate $ 1+a0) - (log $ 1-a0))) (pi/2)
    | Bool
otherwise = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (((Posit es -> Posit es
forall a. Floating a => a -> a
log(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+Posit es
a0) Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es -> Posit es
forall a. Floating a => a -> a
log (Posit es
1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
-Posit es
a0))Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2) (Posit es
forall a. Floating a => a
piPosit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)
    --
    -- For I:
    -- = 0.5 * (log (C 1 a123) - log (C 1 (-a123)))
    -- = I (atan a123)
  atanh (I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0
    | Bool
otherwise = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es -> Posit es
forall a. Floating a => a -> a
atan Posit es
a123)
    -- = 0.5 * (log (C (1+a0) a123) - log (C (1-a0) (-a123)))
    -- Def log ==> log (C a0 a123) = C (log.sqrt $ a0^2 + a123^2) (atan2 a123 a0)
    -- log (C (1+a0) a123) = C (log.sqrt $ (1+a0)^2 + a123^2) (atan2 a123 (1+a0))
    -- log (C (1-a0) (-a123)) = C (log.sqrt $ (1-a0)^2 + (-a123)^2) (atan2 (-a123) (1-a0))
    -- = C (((0.5*).log.sqrt $ (1+a0)^2 + a123^2) - ((0.5*).log.sqrt $ (1-a0)^2 + a123^2)) (0.5*((atan2 a123 (1+a0)) - (atan2 (-a123) (1-a0))))
    -- C (((log $ (1+a0)^2 + a123^2) - (log $ (1-a0)^2 + a123^2))/4) (((atan2 a123 (1-a0)) + (atan2 a123 (1+a0)))/2)
  atanh (C Posit es
a0 Posit es
a123)
    | Posit es
a0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
atanh (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123)
    | Posit es
a123 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
atanh (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0)
    | Bool
otherwise = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C ((Posit es -> Posit es
forall a. Floating a => a -> a
log ((Posit es
1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+Posit es
a0)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2) Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es -> Posit es
forall a. Floating a => a -> a
log ((Posit es
1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
-Posit es
a0)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2))Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
4) ((Posit es -> Posit es -> Posit es
forall a. RealFloat a => a -> a -> a
atan2 Posit es
a123 (Posit es
1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
-Posit es
a0) Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es -> Posit es -> Posit es
forall a. RealFloat a => a -> a -> a
atan2 Posit es
a123 (Posit es
1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+Posit es
a0))Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)
  --
  atanh Cl3 es
cliffor = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmp Cl3 es -> Cl3 es
forall a. Floating a => a -> a
atanh Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
atanh' Cl3 es
cliffor



-- |'lsv' the littlest singular value. Useful for testing for invertability.
lsv :: PositF es => Cl3 es -> Cl3 es
lsv :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
lsv (R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Num a => a -> a
abs Posit es
a0) -- absolute value of a real number
lsv (V3 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es -> Posit es -> Posit es
forall p. AltFloating p => p -> p -> p -> p
hypot3 Posit es
a1 Posit es
a2 Posit es
a3) -- magnitude of a vector
lsv (BV Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es -> Posit es -> Posit es
forall p. AltFloating p => p -> p -> p -> p
hypot3 Posit es
a23 Posit es
a31 Posit es
a12) -- magnitude of a bivector
lsv (I Posit es
a123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Num a => a -> a
abs Posit es
a123)
lsv (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es -> Posit es -> Posit es -> Posit es
forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Posit es -> Posit es
loDisc Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3)
lsv (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es -> Posit es -> Posit es -> Posit es
forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Posit es -> Posit es
loDisc Posit es
a123 Posit es
a23 Posit es
a31 Posit es
a12)
lsv (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es -> Posit es -> Posit es -> Posit es
forall p. AltFloating p => p -> p -> p -> p -> p
hypot4 Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12)
lsv (C Posit es
a0 Posit es
a123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es -> Posit es
forall p. AltFloating p => p -> p -> p
hypot2 Posit es
a0 Posit es
a123) -- magnitude of a complex number
lsv (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) =
  let x :: Posit es
x = Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es -> Posit es -> Posit es -> Posit es
forall p. AltFloating p => p -> p -> p -> p
hypot3 (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a23) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a23) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a31) -- core was duplicating this computation added let to hopefully reduce the duplication
      y :: Posit es
y = Posit es
a1Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
x -- attempted to balance out the sum of several positives with a negitive before the next sum of positives and negitive
  in if Posit es
y Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
<= Posit es
forall (es :: ES). PositF es => Posit es
tol' -- gaurd for numerical errors, y could be negative with large enough biparavectors
     then Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0
     else Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
sqrt Posit es
y)
lsv (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es -> Posit es -> Posit es -> Posit es
forall p. AltFloating p => p -> p -> p -> p -> p
hypot4 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123)
lsv (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) =
  let x :: Posit es
x = Posit es -> Posit es
forall a. Num a => a -> a
negate(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a23)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a31)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a12)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+
                        (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a31)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a12)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a23)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 -- core was duplicating this computation added let to hopefully reduce the duplication
      y :: Posit es
y = Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
x -- attempted to balance out the sum of several positives with a negitive before the next sum of positives and negitive
  in if Posit es
y Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
<= Posit es
forall (es :: ES). PositF es => Posit es
tol' -- gaurd for numerical errors, y could be negative with large enough cliffors
     then Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0
     else Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Floating a => a -> a
sqrt Posit es
y)


-- | 'loDisc' The Lower Discriminant for Paravectors and Triparavectors, real and imagninary portions of APS
loDisc :: PositF es => Posit es -> Posit es -> Posit es -> Posit es -> Posit es
loDisc :: forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Posit es -> Posit es
loDisc Posit es
v0 Posit es
v1 Posit es
v2 Posit es
v3 =
  let sumsqs :: Posit es
sumsqs = Posit es
v1Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
v2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
v3Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      x :: Posit es
x = Posit es -> Posit es
forall a. Num a => a -> a
negate (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es -> Posit es
forall a. Num a => a -> a
abs Posit es
v0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
sqrt Posit es
sumsqs
      y :: Posit es
y = Posit es
v0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
x Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
sumsqs Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
x
  in if Posit es
y Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
<= Posit es
forall (es :: ES). PositF es => Posit es
tol' -- gaurd for numerical errors, y could be negative with large enough paravectors
     then Posit es
0
     else Posit es -> Posit es
forall a. Floating a => a -> a
sqrt Posit es
y


-- | 'spectraldcmp' the spectral decomposition of a function to calculate analytic functions of cliffors in Cl(3,0).
-- This function requires the desired function's R, I, and C instances to be calculated and the function's derivative.
-- If multiple functions are being composed, its best to pass the composition of the funcitons
-- to this function and the derivative to this function.  Any function with a Taylor Series
-- approximation should be able to be used.  A real, imaginary, and complex version of the function to be decomposed
-- must be provided and spectraldcmp will handle the case for an arbitrary Cliffor.
-- 
-- It may be possible to add, in the future, a RULES pragma like:
--
-- > "spectral decomposition function composition"
-- > forall f f' g g' cliff.
-- > spectraldcmp f f' (spectraldcmp g g' cliff) = spectraldcmp (f.g) (f'.g') cliff
-- 
-- 
spectraldcmp :: PositF es => (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmp :: forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmp Cl3 es -> Cl3 es
fun Cl3 es -> Cl3 es
fun' (Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
reduce -> Cl3 es
cliffor) = Cl3 es -> Cl3 es
dcmp Cl3 es
cliffor
  where
    dcmp :: Cl3 es -> Cl3 es
dcmp r :: Cl3 es
r@R{} = Cl3 es -> Cl3 es
fun Cl3 es
r
    dcmp i :: Cl3 es
i@I{} = Cl3 es -> Cl3 es
fun Cl3 es
i
    dcmp c :: Cl3 es
c@C{} = Cl3 es -> Cl3 es
fun Cl3 es
c
    dcmp v :: Cl3 es
v@V3{} = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmpSpecial Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toR Cl3 es -> Cl3 es
fun Cl3 es
v -- spectprojR fun v
    dcmp pv :: Cl3 es
pv@PV{} = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmpSpecial Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toR Cl3 es -> Cl3 es
fun Cl3 es
pv -- spectprojR fun pv
    dcmp bv :: Cl3 es
bv@BV{} = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmpSpecial Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toI Cl3 es -> Cl3 es
fun Cl3 es
bv -- spectprojI fun bv
    dcmp tpv :: Cl3 es
tpv@TPV{} = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmpSpecial Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toI Cl3 es -> Cl3 es
fun Cl3 es
tpv -- spectprojI fun tpv
    dcmp h :: Cl3 es
h@H{} = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmpSpecial Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toC Cl3 es -> Cl3 es
fun Cl3 es
h -- spectprojC fun h
    dcmp od :: Cl3 es
od@ODD{} = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmpSpecial Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toC Cl3 es -> Cl3 es
fun Cl3 es
od -- spectprojC fun od
    dcmp Cl3 es
cliff
      | Cl3 es -> Bool
forall (es :: ES). PositF es => Cl3 es -> Bool
hasNilpotent Cl3 es
cliff = (Cl3 es -> Cl3 es)
-> (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es)
-> (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
jordan Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toC Cl3 es -> Cl3 es
fun Cl3 es -> Cl3 es
fun' Cl3 es
cliff  -- jordan normal form Cl3 style
      | Cl3 es -> Bool
forall (es :: ES). PositF es => Cl3 es -> Bool
isColinear Cl3 es
cliff = (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmpSpecial Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toC Cl3 es -> Cl3 es
fun Cl3 es
cliff -- spectprojC fun bpv
      | Bool
otherwise =                               -- transform it so it will be colinear
          let BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 = Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toBPV Cl3 es
cliff
              boost :: Cl3 es
boost = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositF es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
boost2colinear Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12
          in Cl3 es
boost Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmpSpecial Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toC Cl3 es -> Cl3 es
fun (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
bar Cl3 es
boost Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* Cl3 es
cliff Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* Cl3 es
boost) Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
bar Cl3 es
boost -- v * spectprojC fun d * v_bar
--


-- | 'jordan' does a Cl(3,0) version of the decomposition into Jordan Normal Form and Matrix Function Calculation
-- The intended use is for calculating functions for cliffors with vector parts simular to Nilpotent.
-- It is a helper function for 'spectraldcmp'.  It is fortunate because eigen decomposition doesn't
-- work with elements with nilpotent content, so it fills the gap.
jordan :: PositF es => (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
jordan :: forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es)
-> (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
jordan Cl3 es -> Cl3 es
toSpecial Cl3 es -> Cl3 es
fun Cl3 es -> Cl3 es
fun' Cl3 es
cliffor =
  let eigs :: Cl3 es
eigs = Cl3 es -> Cl3 es
toSpecial Cl3 es
cliffor
  in Cl3 es -> Cl3 es
fun Cl3 es
eigs Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
+ Cl3 es -> Cl3 es
fun' Cl3 es
eigs Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toBPV Cl3 es
cliffor

-- | 'spectraldcmpSpecial' helper function for with specialization for real, imaginary, or complex eigenvalues.
-- To specialize for Reals pass 'toR', to specialize for Imaginary pass 'toI', to specialize for Complex pass 'toC'
spectraldcmpSpecial :: PositF es => (Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmpSpecial :: forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
spectraldcmpSpecial Cl3 es -> Cl3 es
toSpecial Cl3 es -> Cl3 es
function Cl3 es
cliffor =
  let (Cl3 es
p,Cl3 es
p_bar,Cl3 es
eig1,Cl3 es
eig2) = (Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es, Cl3 es, Cl3 es)
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es, Cl3 es, Cl3 es)
projEigs Cl3 es -> Cl3 es
toSpecial Cl3 es
cliffor
  in Cl3 es -> Cl3 es
function Cl3 es
eig1 Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* Cl3 es
p Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
+ Cl3 es -> Cl3 es
function Cl3 es
eig2 Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* Cl3 es
p_bar



-- | 'eigvals' calculates the eignenvalues of the cliffor.
-- This is useful for determining if a cliffor is the pole
-- of a function.
eigvals :: PositF es => Cl3 es -> (Cl3 es,Cl3 es)
eigvals :: forall (es :: ES). PositF es => Cl3 es -> (Cl3 es, Cl3 es)
eigvals (Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
reduce -> Cl3 es
cliffor) = Cl3 es -> (Cl3 es, Cl3 es)
forall {es :: ES}.
(PositC es, PositC (Next es), PositC (Prev es)) =>
Cl3 es -> (Cl3 es, Cl3 es)
eigv Cl3 es
cliffor
  where
    eigv :: Cl3 es -> (Cl3 es, Cl3 es)
eigv r :: Cl3 es
r@R{} = Cl3 es -> (Cl3 es, Cl3 es)
forall (es :: ES). PositC es => Cl3 es -> (Cl3 es, Cl3 es)
dup Cl3 es
r
    eigv i :: Cl3 es
i@I{} = Cl3 es -> (Cl3 es, Cl3 es)
forall (es :: ES). PositC es => Cl3 es -> (Cl3 es, Cl3 es)
dup Cl3 es
i
    eigv c :: Cl3 es
c@C{} = Cl3 es -> (Cl3 es, Cl3 es)
forall (es :: ES). PositC es => Cl3 es -> (Cl3 es, Cl3 es)
dup Cl3 es
c
    eigv v :: Cl3 es
v@V3{} = (Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es)
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es)
eigvalsSpecial Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toR Cl3 es
v -- eigvalsR v
    eigv pv :: Cl3 es
pv@PV{} = (Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es)
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es)
eigvalsSpecial Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toR Cl3 es
pv -- eigvalsR pv
    eigv bv :: Cl3 es
bv@BV{} = (Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es)
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es)
eigvalsSpecial Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toI Cl3 es
bv -- eigvalsI bv
    eigv tpv :: Cl3 es
tpv@TPV{} = (Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es)
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es)
eigvalsSpecial Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toI Cl3 es
tpv -- eigvalsI tpv
    eigv h :: Cl3 es
h@H{} = (Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es)
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es)
eigvalsSpecial Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toC Cl3 es
h -- eigvalsC h
    eigv od :: Cl3 es
od@ODD{} = (Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es)
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es)
eigvalsSpecial Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toC Cl3 es
od -- eigvalsC od
    eigv Cl3 es
cliff
      | Cl3 es -> Bool
forall (es :: ES). PositF es => Cl3 es -> Bool
hasNilpotent Cl3 es
cliff = Cl3 es -> (Cl3 es, Cl3 es)
forall (es :: ES). PositC es => Cl3 es -> (Cl3 es, Cl3 es)
dup(Cl3 es -> (Cl3 es, Cl3 es))
-> (Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
reduce(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toC (Cl3 es -> (Cl3 es, Cl3 es)) -> Cl3 es -> (Cl3 es, Cl3 es)
forall a b. (a -> b) -> a -> b
$ Cl3 es
cliff  -- this case is actually nilpotent
      | Cl3 es -> Bool
forall (es :: ES). PositF es => Cl3 es -> Bool
isColinear Cl3 es
cliff = (Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es)
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es)
eigvalsSpecial Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toC Cl3 es
cliff  -- eigvalsC bpv
      | Bool
otherwise =                           -- transform it so it will be colinear
          let BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 = Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toBPV Cl3 es
cliff
              boost :: Cl3 es
boost = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositF es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
boost2colinear Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12
          in (Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es)
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es)
eigvalsSpecial Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toC (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
bar Cl3 es
boost Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* Cl3 es
cliff Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* Cl3 es
boost) -- eigvalsC d
--


dup :: PositC es => Cl3 es -> (Cl3 es,Cl3 es)
dup :: forall (es :: ES). PositC es => Cl3 es -> (Cl3 es, Cl3 es)
dup Cl3 es
cliff = (Cl3 es
cliff, Cl3 es
cliff)

-- | 'eigvalsSpecial' helper function to calculate Eigenvalues
eigvalsSpecial :: PositF es => (Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es,Cl3 es)
eigvalsSpecial :: forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es)
eigvalsSpecial Cl3 es -> Cl3 es
toSpecial Cl3 es
cliffor =
  let (Cl3 es
_,Cl3 es
_,Cl3 es
eig1,Cl3 es
eig2) = (Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es, Cl3 es, Cl3 es)
forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es, Cl3 es, Cl3 es)
projEigs Cl3 es -> Cl3 es
toSpecial Cl3 es
cliffor
  in (Cl3 es
eig1,Cl3 es
eig2)


-- | 'project' makes a projector based off of the vector content of the Cliffor.
project :: PositF es => Cl3 es -> Cl3 es  -- PV<:Cl3
project :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
project R{} = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
0.5 Posit es
0 Posit es
0 Posit es
0.5   -- default to e3 direction
project I{} = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
0.5 Posit es
0 Posit es
0 Posit es
0.5   -- default to e3 direction
project C{} = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
0.5 Posit es
0 Posit es
0 Posit es
0.5   -- default to e3 direction
project (V3 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Cl3 es
triDProj Posit es
a1 Posit es
a2 Posit es
a3   -- proj v@V3{} = 0.5 + 0.5*signum v
project (PV Posit es
_ Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Cl3 es
triDProj Posit es
a1 Posit es
a2 Posit es
a3   -- proj pv@PV{} = 0.5 + 0.5*(signum.toV3 $ pv)
project (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
_) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Cl3 es
triDProj Posit es
a1 Posit es
a2 Posit es
a3   -- od@ODD{} = 0.5 + 0.5*(signum.toV3 $ od)
project (BV Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Cl3 es
triDProj Posit es
a23 Posit es
a31 Posit es
a12   -- bv@BV{} = 0.5 + 0.5*(mIx.signum $ bv)
project (H Posit es
_ Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Cl3 es
triDProj Posit es
a23 Posit es
a31 Posit es
a12   -- h@H{} = 0.5 + 0.5*(mIx.signum.toBV $ h)
project (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
_) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Cl3 es
triDProj Posit es
a23 Posit es
a31 Posit es
a12   -- tpv@TPV{} = 0.5 + 0.5*(mIx.signum.toBV $ tpv)
project (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositF es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
biTriDProj Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12
project (APS Posit es
_ Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
_) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositF es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
biTriDProj Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12



-- If Dot product is negative or zero we have a problem, if it is zero
-- it either the vector or bivector par is zero or they are orthognal
-- if the dot product is negative the vectors could be antiparallel
biTriDProj :: PositF es => Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es  -- PV<:Cl3
biTriDProj :: forall (es :: ES).
PositF es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
biTriDProj Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 =
  let v3Mag :: Posit es
v3Mag = Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a1Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      v3MagltTol :: Bool
v3MagltTol = Posit es
v3Mag Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
< Posit es
forall (es :: ES). PositF es => Posit es
tol'
      halfInvV3Mag :: Posit es
halfInvV3Mag = Posit es -> Posit es
forall a. Fractional a => a -> a
recip Posit es
v3Mag Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/ Posit es
2
      bvMag :: Posit es
bvMag = Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a23Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      bvMagltTol :: Bool
bvMagltTol = Posit es
bvMag Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
< Posit es
forall (es :: ES). PositF es => Posit es
tol'
      halfInvBVMag :: Posit es
halfInvBVMag = Posit es -> Posit es
forall a. Fractional a => a -> a
recip Posit es
bvMag Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/ Posit es
2
      dotPos :: Bool
dotPos = (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a23) Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a31) Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a12) Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
>= Posit es
0
      b1 :: Posit es
b1 = Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23
      b2 :: Posit es
b2 = Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31
      b3 :: Posit es
b3 = Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12
      bHalfInvMag :: Posit es
bHalfInvMag = (Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Fractional a => a -> a
recip(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
b1Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      c1 :: Posit es
c1 = Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a23
      c2 :: Posit es
c2 = Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a31
      c3 :: Posit es
c3 = Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a12
      cHalfInvMag :: Posit es
cHalfInvMag = (Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
2)(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Fractional a => a -> a
recip(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
c1Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
c2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
c3Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
  in if | Bool
v3MagltTol Bool -> Bool -> Bool
&& Bool
bvMagltTol -> Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
0.5 Posit es
0 Posit es
0 Posit es
0.5
        | Bool
bvMagltTol -> Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
0.5 (Posit es
halfInvV3Mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a1) (Posit es
halfInvV3Mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a2) (Posit es
halfInvV3Mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a3)
        | Bool
v3MagltTol -> Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
0.5 (Posit es
halfInvBVMag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a23) (Posit es
halfInvBVMag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a31) (Posit es
halfInvBVMag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a12)
        | Bool
dotPos -> Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
0.5 (Posit es
bHalfInvMag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
b1) (Posit es
bHalfInvMag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
b2) (Posit es
bHalfInvMag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
b3)
        | Bool
otherwise -> Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
0.5 (Posit es
cHalfInvMag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
c1) (Posit es
cHalfInvMag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
c2) (Posit es
cHalfInvMag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
c3)


-- | 'triDProj' a single 3 dimensional vector grade to a projector
triDProj :: PositF es => Posit es -> Posit es -> Posit es -> Cl3 es  -- PV<:Cl3
triDProj :: forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Cl3 es
triDProj Posit es
v1 Posit es
v2 Posit es
v3 =
  let mag :: Posit es
mag = Posit es -> Posit es -> Posit es -> Posit es
forall p. AltFloating p => p -> p -> p -> p
hypot3 Posit es
v1 Posit es
v2 Posit es
v3
  in if Posit es
mag Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
     then Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
0.5 Posit es
0 Posit es
0 Posit es
0.5
     else Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
0.5 (Posit es
0.5 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* (Posit es
v1 Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/ Posit es
mag)) (Posit es
0.5 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* (Posit es
v2 Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/ Posit es
mag)) (Posit es
0.5 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* (Posit es
v3 Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/ Posit es
mag))


-- | 'boost2colinear' calculates a boost that is perpendicular to both the vector and bivector
-- components of the cliffor, that will mix the vector and bivector parts such that the vector and bivector
-- parts become colinear. This function is a simularity transform such that:
--
-- > cliffor = boost * colinear * bar boost
--
-- and returns the boost given the inputs.  First the boost must be calculated
-- and then
--
-- > colinear = bar boost * cliffor * boost
--
-- and colinear will have colinear vector and bivector parts of the cliffor.
-- This is somewhat simular to finding the drift frame for a static electromagnetic field.
--
-- > v = toV3 cliffor  -- extract the vector
-- > bv = mIx.toBV $ cliffor  -- extract the bivector and turn it into a vector
-- > invariant = ((2*).mIx.toBV $ v * bv) / (toR (v^2) + toR (bv^2))
-- > boost = spectraldcmpSpecial toR (exp.(/4).atanh) invariant
--
boost2colinear :: PositF es => Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es  -- PV<:Cl3
boost2colinear :: forall (es :: ES).
PositF es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
boost2colinear Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 =
  let scale :: Posit es
scale = Posit es -> Posit es
forall a. Fractional a => a -> a
recip (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a1Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      b1 :: Posit es
b1 = Posit es
scale Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a31)
      b2 :: Posit es
b2 = Posit es
scale Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a12)
      b3 :: Posit es
b3 = Posit es
scale Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a23)
      eig1 :: Posit es
eig1 = (Posit es
2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*)(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
b1Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
b3Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      eig2 :: Posit es
eig2 = Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
eig1
      transEig1 :: Posit es
transEig1 = Posit es -> Posit es
forall a. Floating a => a -> a
exp(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
4)(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
atanh (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
eig1
      transEig2 :: Posit es
transEig2 = Posit es -> Posit es
forall a. Floating a => a -> a
exp(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/Posit es
4)(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
atanh (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
eig2
      sumTransEigs :: Posit es
sumTransEigs = (Posit es
transEig1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
transEig2) Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Fractional a => a -> a
recip Posit es
eig1
  in Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV (Posit es
0.5 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* (Posit es
transEig1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
transEig2)) (Posit es
sumTransEigs Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
b1) (Posit es
sumTransEigs Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
b2) (Posit es
sumTransEigs Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
b3)


-- | 'isColinear' takes a Cliffor and determines if either the vector part or the bivector part are
-- zero or both aligned in the same direction.
isColinear :: PositF es => Cl3 es -> Bool
isColinear :: forall (es :: ES). PositF es => Cl3 es -> Bool
isColinear R{} = Bool
True
isColinear V3{} = Bool
True
isColinear BV{} = Bool
True
isColinear I{} = Bool
True
isColinear PV{} = Bool
True
isColinear H{} = Bool
True
isColinear C{} = Bool
True
isColinear ODD{} = Bool
True
isColinear TPV{} = Bool
True
isColinear (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es
-> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Bool
forall (es :: ES).
PositF es =>
Posit es
-> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Bool
colinearHelper Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12
isColinear (APS Posit es
_ Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
_) = Posit es
-> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Bool
forall (es :: ES).
PositF es =>
Posit es
-> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Bool
colinearHelper Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12

colinearHelper :: PositF es => Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Bool
colinearHelper :: forall (es :: ES).
PositF es =>
Posit es
-> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Bool
colinearHelper Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 =
  let magV3 :: Posit es
magV3 = Posit es -> Posit es -> Posit es -> Posit es
forall p. AltFloating p => p -> p -> p -> p
hypot3 Posit es
a1 Posit es
a2 Posit es
a3
      invMagV3 :: Posit es
invMagV3 = Posit es -> Posit es
forall a. Fractional a => a -> a
recip Posit es
magV3
      magBV :: Posit es
magBV = Posit es -> Posit es -> Posit es -> Posit es
forall p. AltFloating p => p -> p -> p -> p
hypot3 Posit es
a23 Posit es
a31 Posit es
a12
      invMagBV :: Posit es
invMagBV = Posit es -> Posit es
forall a. Fractional a => a -> a
recip Posit es
magBV
      crss :: Posit es
crss = Posit es -> Posit es -> Posit es -> Posit es
forall p. AltFloating p => p -> p -> p -> p
hypot3 (Posit es -> Posit es -> Posit es -> Posit es -> Posit es
forall a. FusedOps a => a -> a -> a -> a -> a
fmms (Posit es
invMagV3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a2) (Posit es
invMagBV Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a12) (Posit es
invMagV3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a3) (Posit es
invMagBV Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a31))
                    (Posit es -> Posit es -> Posit es -> Posit es -> Posit es
forall a. FusedOps a => a -> a -> a -> a -> a
fmms (Posit es
invMagV3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a3) (Posit es
invMagBV Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a23) (Posit es
invMagV3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a1) (Posit es
invMagBV Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a12))
                    (Posit es -> Posit es -> Posit es -> Posit es -> Posit es
forall a. FusedOps a => a -> a -> a -> a -> a
fmms (Posit es
invMagV3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a1) (Posit es
invMagBV Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a31) (Posit es
invMagV3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a2) (Posit es
invMagBV Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a23))
  in Posit es
magV3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
||     -- Zero Vector
     Posit es
magBV Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0 Bool -> Bool -> Bool
||     -- Zero Bivector
     Posit es
crss Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
<= Posit es
forall (es :: ES). PositF es => Posit es
tol'      -- Orthoganl part is zero-ish


-- | 'hasNilpotent' takes a Cliffor and determines if the vector part and the bivector part are
-- orthoganl and equal in magnitude, i.e. that it is simular to a nilpotent BPV.
hasNilpotent :: PositF es => Cl3 es -> Bool
hasNilpotent :: forall (es :: ES). PositF es => Cl3 es -> Bool
hasNilpotent R{} = Bool
False
hasNilpotent V3{} = Bool
False
hasNilpotent BV{} = Bool
False
hasNilpotent I{} = Bool
False
hasNilpotent PV{} = Bool
False
hasNilpotent H{} = Bool
False
hasNilpotent C{} = Bool
False
hasNilpotent ODD{} = Bool
False
hasNilpotent TPV{} = Bool
False
hasNilpotent (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es
-> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Bool
forall (es :: ES).
PositF es =>
Posit es
-> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Bool
nilpotentHelper Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12
hasNilpotent (APS Posit es
_ Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
_) = Posit es
-> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Bool
forall (es :: ES).
PositF es =>
Posit es
-> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Bool
nilpotentHelper Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12

nilpotentHelper :: (PositF es) => Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Bool
nilpotentHelper :: forall (es :: ES).
PositF es =>
Posit es
-> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Bool
nilpotentHelper Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 =
  let magV3 :: Posit es
magV3 = Posit es -> Posit es -> Posit es -> Posit es
forall p. AltFloating p => p -> p -> p -> p
hypot3 Posit es
a1 Posit es
a2 Posit es
a3
      magBV :: Posit es
magBV = Posit es -> Posit es -> Posit es -> Posit es
forall p. AltFloating p => p -> p -> p -> p
hypot3 Posit es
a23 Posit es
a31 Posit es
a12
      -- magDiff = abs (magV3 - magBV)
      v3DotBV :: Posit es
v3DotBV = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
forall a. FusedOps a => a -> a -> a -> a -> a -> a -> a
fdot3 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12
      -- dotv3bv = toR $ (toV3 (V3 a1 a2 a3)) * (toBV (BV a23 a31 a12))
      {-
      invMagV3 = recip magV3
      invMagBV = recip magV3
      b1 = invMagV3 * a1
      b2 = invMagV3 * a2
      b3 = invMagV3 * a3
      b23 = invMagBV * a23
      b31 = invMagBV * a31
      b12 = invMagBV * a12
      c0 = b1*b1 + b2*b2 + b3*b3 - b23*b23 - b31*b31 - b12*b12
      c1 = b12*b2 - b2*b12 + b3*b31 - b31*b3
      c2 = b1*b12 - b12*b1 - b3*b23 + b23*b3
      c3 = b31*b1 - b1*b31 + b2*b23 - b23*b2
      c23 = b2*b3 - b3*b2 - b31*b12 + b12*b31
      c31 = b3*b1 - b1*b3 + b23*b12 - b12*b23
      c12 = b1*b2 - b2*b1 - b23*b31 + b31*b23
      c123 = b1*b23 + b23*b1 + b2*b31 + b31*b2 + b3*b12 + b12*b3
      x = sqrt ((c0*c1 + c123*c23)^2 + (c0*c2 + c123*c31)^2 + (c0*c3 + c123*c12)^2 +
                (c2*c12 - c3*c31)^2 + (c3*c23 - c1*c12)^2 + (c1*c31 - c2*c23)^2)
      sqMag = sqrt (c0^2 + c1^2 + c2^2 + c3^2 + c23^2 + c31^2 + c12^2 + c123^2 + 2 * x)
      -}
  in Posit es
magV3 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
/= Posit es
0 Bool -> Bool -> Bool
&&          -- Non-Zero Vector Part
     Posit es
magBV Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
/= Posit es
0 Bool -> Bool -> Bool
&&          -- Non-Zero Bivector Part
     Posit es
magV3 Posit es -> Posit es -> Bool
forall p. AltFloating p => p -> p -> Bool
`approxEq` Posit es
magBV Bool -> Bool -> Bool
&&
     -- magDiff <= tol' &&     -- Vector and Bivector are Equal Magnitude
     -- sqMag <= tol'          -- It's non-zero but squares to zero
     Posit es
v3DotBV Posit es -> Posit es -> Bool
forall a. Ord a => a -> a -> Bool
<= Posit es
forall (es :: ES). PositF es => Posit es
tol'   -- Orthoganal

{-
approx_Eq :: PositF es => Posit es -> Posit es -> Bool
approx_Eq a b =
  let a' = convert a :: Posit (Prev es)
      b' = convert b :: Posit (Prev es)
  in a' == b'
-}

-- | 'projEigs' function returns complementary projectors and eigenvalues for a Cliffor with specialization.
-- The Cliffor at this point is allready colinear and the Eigenvalue is known to be real, imaginary, or complex.
projEigs :: PositF es => (Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es,Cl3 es,Cl3 es,Cl3 es)
projEigs :: forall (es :: ES).
PositF es =>
(Cl3 es -> Cl3 es) -> Cl3 es -> (Cl3 es, Cl3 es, Cl3 es, Cl3 es)
projEigs Cl3 es -> Cl3 es
toSpecial Cl3 es
cliffor =
  let p :: Cl3 es
p = Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
project Cl3 es
cliffor
      p_bar :: Cl3 es
p_bar = Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
bar Cl3 es
p
      eig1 :: Cl3 es
eig1 = Cl3 es
2 Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* Cl3 es -> Cl3 es
toSpecial (Cl3 es
p Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* Cl3 es
cliffor Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* Cl3 es
p)
      eig2 :: Cl3 es
eig2 = Cl3 es
2 Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* Cl3 es -> Cl3 es
toSpecial (Cl3 es
p_bar Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* Cl3 es
cliffor Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* Cl3 es
p_bar)
  in (Cl3 es
p,Cl3 es
p_bar,Cl3 es
eig1,Cl3 es
eig2)

-- | 'reduce' function reduces the number of grades in a specialized Cliffor if they
-- are zero-ish
reduce :: PositF es => Cl3 es -> Cl3 es
reduce :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
reduce Cl3 es
cliff
  | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs Cl3 es
cliff Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0
  | Bool
otherwise = Cl3 es -> Cl3 es
forall {es :: ES}.
(PositC es, PositC (Next es), PositC (Prev es)) =>
Cl3 es -> Cl3 es
go_reduce Cl3 es
cliff
    where
      go_reduce :: Cl3 es -> Cl3 es
go_reduce r :: Cl3 es
r@R{} = Cl3 es
r
      go_reduce v :: Cl3 es
v@V3{} = Cl3 es
v
      go_reduce bv :: Cl3 es
bv@BV{} = Cl3 es
bv
      go_reduce i :: Cl3 es
i@I{} = Cl3 es
i
      go_reduce pv :: Cl3 es
pv@PV{}
        | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toV3 Cl3 es
pv) Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toR Cl3 es
pv
        | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toR Cl3 es
pv) Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toV3 Cl3 es
pv
        | Bool
otherwise = Cl3 es
pv
      go_reduce h :: Cl3 es
h@H{}
        | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toBV Cl3 es
h) Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toR Cl3 es
h
        | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toR Cl3 es
h) Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toBV Cl3 es
h
        | Bool
otherwise = Cl3 es
h
      go_reduce c :: Cl3 es
c@C{}
        | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toI Cl3 es
c) Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toR Cl3 es
c
        | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toR Cl3 es
c) Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toI Cl3 es
c
        | Bool
otherwise = Cl3 es
c
      go_reduce bpv :: Cl3 es
bpv@BPV{}
        | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toBV Cl3 es
bpv) Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toV3 Cl3 es
bpv
        | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toV3 Cl3 es
bpv) Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toBV Cl3 es
bpv
        | Bool
otherwise = Cl3 es
bpv
      go_reduce od :: Cl3 es
od@ODD{}
        | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toI Cl3 es
od) Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toV3 Cl3 es
od
        | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toV3 Cl3 es
od) Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toI Cl3 es
od
        | Bool
otherwise = Cl3 es
od
      go_reduce tpv :: Cl3 es
tpv@TPV{}
        | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toBV Cl3 es
tpv) Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toI Cl3 es
tpv
        | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toI Cl3 es
tpv) Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toBV Cl3 es
tpv
        | Bool
otherwise = Cl3 es
tpv
      go_reduce aps :: Cl3 es
aps@APS{}
        | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toBPV Cl3 es
aps) Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Cl3 es -> Cl3 es
go_reduce (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toC Cl3 es
aps)
        | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toODD Cl3 es
aps) Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Cl3 es -> Cl3 es
go_reduce (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toH Cl3 es
aps)
        | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toTPV Cl3 es
aps) Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Cl3 es -> Cl3 es
go_reduce (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toPV Cl3 es
aps)
        | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toC Cl3 es
aps) Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Cl3 es -> Cl3 es
go_reduce (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toBPV Cl3 es
aps)
        | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toH Cl3 es
aps) Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Cl3 es -> Cl3 es
go_reduce (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toODD Cl3 es
aps)
        | Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toPV Cl3 es
aps) Cl3 es -> Cl3 es -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3 es
forall (es :: ES). PositF es => Cl3 es
tol = Cl3 es -> Cl3 es
go_reduce (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toTPV Cl3 es
aps)
        | Bool
otherwise = Cl3 es
aps


-- | 'mIx' a more effecient '\x -> I (-1) * x' typically useful for converting a
-- Bivector to a Vector in the same direction. Related to Hodge Dual and/or
-- Inverse Hodge Star.
mIx :: PositC es => Cl3 es -> Cl3 es
mIx :: forall (es :: ES). PositC es => Cl3 es -> Cl3 es
mIx (R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a0)
mIx (V3 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a1) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a2) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a3)
mIx (BV Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 Posit es
a23 Posit es
a31 Posit es
a12
mIx (I Posit es
a123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a123
mIx (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a1) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a2) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a3) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a0)
mIx (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
a23 Posit es
a31 Posit es
a12 (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a0)
mIx (C Posit es
a0 Posit es
a123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
a123 (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a0)
mIx (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
a23 Posit es
a31 Posit es
a12 (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a1) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a2) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a3)
mIx (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
a123 (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a1) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a2) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a3)
mIx (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
a123 Posit es
a23 Posit es
a31 Posit es
a12
mIx (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a123 Posit es
a23 Posit es
a31 Posit es
a12 (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a1) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a2) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a3) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a0)

-- | 'timesI' is a more effecient '\x -> I 1 * x'
timesI :: PositC es => Cl3 es -> Cl3 es
timesI :: forall (es :: ES). PositC es => Cl3 es -> Cl3 es
timesI (R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a0
timesI (V3 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV Posit es
a1 Posit es
a2 Posit es
a3
timesI (BV Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12)
timesI (I Posit es
a123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a123)
timesI (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a0
timesI (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12) Posit es
a0
timesI (C Posit es
a0 Posit es
a123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a123) Posit es
a0
timesI (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12) Posit es
a1 Posit es
a2 Posit es
a3
timesI (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a123) Posit es
a1 Posit es
a2 Posit es
a3
timesI (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a123) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12)
timesI (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a123) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12) Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a0

-- | 'abssignum' is a more effecient '\cl3 -> (abs cl3, signum cl3)'
-- So 'abs' is always R and 'signum' is the same type of constructor as the input
-- 'signum' is the element divided by its largest singular value 'abs'
abssignum :: (PositF es) => Cl3 es -> (Cl3 es,Cl3 es)
abssignum :: forall (es :: ES). PositF es => Cl3 es -> (Cl3 es, Cl3 es)
abssignum Cl3 es
cl3 =
  let R Posit es
m0 = Cl3 es -> Cl3 es
forall (es :: ES). PositF es => Cl3 es -> Cl3 es
absolute Cl3 es
cl3
  in if Posit es
m0 Posit es -> Posit es -> Bool
forall a. Eq a => a -> a -> Bool
== Posit es
0
     then (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0, Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0) -- (abs 0 == 0, signum 0 == 0)
     else (Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
m0, Cl3 es
cl3 Cl3 es -> Cl3 es -> Cl3 es
forall a. Fractional a => a -> a -> a
/ Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
m0)

absolute :: (PositF es) => Cl3 es -> Cl3 es
absolute :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
absolute (R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Num a => a -> a
abs Posit es
a0)
absolute (V3 Posit es
a1 Posit es
a2 Posit es
a3) = let m :: Posit es
m = Posit es -> Posit es -> Posit es -> Posit es
forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Posit es
rss3 Posit es
a1 Posit es
a2 Posit es
a3 in Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
m
absolute (BV Posit es
a23 Posit es
a31 Posit es
a12) = let m :: Posit es
m = Posit es -> Posit es -> Posit es -> Posit es
forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Posit es
rss3 Posit es
a23 Posit es
a31 Posit es
a12 in Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
m
absolute (I Posit es
a123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es -> Posit es
forall a. Num a => a -> a
abs Posit es
a123)
absolute (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) = let m :: Posit es
m = Posit es -> Posit es -> Posit es -> Posit es -> Posit es
forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Posit es -> Posit es
reimMag Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 in Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
m
absolute (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) = let m :: Posit es
m = Posit es -> Posit es -> Posit es -> Posit es -> Posit es
forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Posit es -> Posit es
rss4 Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12 in Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
m
absolute (C Posit es
a0 Posit es
a123) = let m :: Posit es
m = Posit es -> Posit es -> Posit es
forall (es :: ES). PositF es => Posit es -> Posit es -> Posit es
rss2 Posit es
a0 Posit es
a123 in Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
m
absolute (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) = let mag0 :: Posit es
mag0 = Posit es -> Posit es -> Posit es -> Posit es
forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Posit es
rss3 (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a23) (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a23) (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a31)
                                          m :: Posit es
m = Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a1Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
mag0 in Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
m
absolute (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) = let m :: Posit es
m = Posit es -> Posit es -> Posit es -> Posit es -> Posit es
forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Posit es -> Posit es
rss4 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123 in Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
m
absolute (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = let m :: Posit es
m = Posit es -> Posit es -> Posit es -> Posit es -> Posit es
forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Posit es -> Posit es
reimMag Posit es
a123 Posit es
a23 Posit es
a31 Posit es
a12 in Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
m
absolute (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = let mag0 :: Posit es
mag0 = Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a23)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a31)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a12)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a31)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a12)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a23)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
                                                  m :: Posit es
m = Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
mag0 in Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
m

rss2 :: (PositF es) => Posit es -> Posit es -> Posit es
rss2 :: forall (es :: ES). PositF es => Posit es -> Posit es -> Posit es
rss2 Posit es
a0 Posit es
a123 = Posit es -> Posit es -> Posit es
forall p. AltFloating p => p -> p -> p
hypot2 Posit es
a0 Posit es
a123  -- sqrt $ a0^2 + a123^2

rss3 :: (PositF es) => Posit es -> Posit es -> Posit es -> Posit es
rss3 :: forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Posit es
rss3 Posit es
x Posit es
y Posit es
z = Posit es -> Posit es -> Posit es -> Posit es
forall p. AltFloating p => p -> p -> p -> p
hypot3 Posit es
x Posit es
y Posit es
z  -- sqrt $ x^2 + y^2 + z^2

rss4 :: (PositF es) => Posit es -> Posit es -> Posit es -> Posit es -> Posit es
rss4 :: forall (es :: ES).
PositF es =>
Posit es -> Posit es -> Posit es -> Posit es -> Posit es
rss4 Posit es
t Posit es
x Posit es
y Posit es
z = Posit es -> Posit es -> Posit es -> Posit es -> Posit es
forall p. AltFloating p => p -> p -> p -> p -> p
hypot4 Posit es
t Posit es
x Posit es
y Posit es
z  -- sqrt $ t^2 + x^2 + y^2 + z^2



#ifdef O_LIQUID
tol :: PositC es => Cl3 es
tol = R tol'

tol' :: Posit es
tol' = 0
#else
-- | 'tol' currently 128*eps
tol :: PositF es => Cl3 es
{-# INLINE tol #-}
tol :: forall (es :: ES). PositF es => Cl3 es
tol = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
forall (es :: ES). PositF es => Posit es
tol'

tol' :: PositF es => Posit es
{-# INLINE tol' #-}
tol' :: forall (es :: ES). PositF es => Posit es
tol' = Posit es
128 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
forall p. AltFloating p => p
machEps
#endif

-- | 'bar' is a Clifford Conjugate, the vector grades are negated
bar :: PositC es => Cl3 es -> Cl3 es
bar :: forall (es :: ES). PositC es => Cl3 es -> Cl3 es
bar (R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0
bar (V3 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a1) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a2) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a3)
bar (BV Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12)
bar (I Posit es
a123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123
bar (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
a0 (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a1) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a2) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a3)
bar (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
a0 (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12)
bar (C Posit es
a0 Posit es
a123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
a0 Posit es
a123
bar (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a1) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a2) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a3) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12)
bar (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a1) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a2) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a3) Posit es
a123
bar (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12) Posit es
a123
bar (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a1) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a2) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a3) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12) Posit es
a123

-- | 'dag' is the Complex Conjugate, the imaginary grades are negated
dag :: PositC es => Cl3 es -> Cl3 es
dag :: forall (es :: ES). PositC es => Cl3 es -> Cl3 es
dag (R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0
dag (V3 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 Posit es
a1 Posit es
a2 Posit es
a3
dag (BV Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12)
dag (I Posit es
a123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a123)
dag (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) =  Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3
dag (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
a0 (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12)
dag (C Posit es
a0 Posit es
a123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
a0 (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a123)
dag (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
a1 Posit es
a2 Posit es
a3 (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12)
dag (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
a1 Posit es
a2 Posit es
a3 (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a123)
dag (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a123)
dag (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a23) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a31) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a12) (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
a123)

----------------------------------------------------------------------------------------------------------------
-- the to... functions provide a lossy cast from one Cl3 constructor to another
---------------------------------------------------------------------------------------------------------------
-- | 'toR' takes any Cliffor and returns the R portion
toR :: PositC es => Cl3 es -> Cl3 es
toR :: forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toR (R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0
toR V3{} = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0
toR BV{} = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0
toR I{} = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0
toR (PV Posit es
a0 Posit es
_ Posit es
_ Posit es
_) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0
toR (H Posit es
a0 Posit es
_ Posit es
_ Posit es
_) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0
toR (C Posit es
a0 Posit es
_) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0
toR BPV{} = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0
toR ODD{} = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0
toR TPV{} = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
0
toR (APS Posit es
a0 Posit es
_ Posit es
_ Posit es
_ Posit es
_ Posit es
_ Posit es
_ Posit es
_) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0

-- | 'toV3' takes any Cliffor and returns the V3 portion
toV3 :: PositC es => Cl3 es -> Cl3 es
toV3 :: forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toV3 R{} = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 Posit es
0 Posit es
0 Posit es
0
toV3 (V3 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 Posit es
a1 Posit es
a2 Posit es
a3
toV3 BV{} = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 Posit es
0 Posit es
0 Posit es
0
toV3 I{} = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 Posit es
0 Posit es
0 Posit es
0
toV3 (PV Posit es
_ Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 Posit es
a1 Posit es
a2 Posit es
a3
toV3 H{} = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 Posit es
0 Posit es
0 Posit es
0
toV3 C{} = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 Posit es
0 Posit es
0 Posit es
0
toV3 (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
_ Posit es
_ Posit es
_) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 Posit es
a1 Posit es
a2 Posit es
a3
toV3 (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
_) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 Posit es
a1 Posit es
a2 Posit es
a3
toV3 TPV{} = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 Posit es
0 Posit es
0 Posit es
0
toV3 (APS Posit es
_ Posit es
a1 Posit es
a2 Posit es
a3 Posit es
_ Posit es
_ Posit es
_ Posit es
_) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 Posit es
a1 Posit es
a2 Posit es
a3

-- | 'toBV' takes any Cliffor and returns the BV portion
toBV :: PositC es => Cl3 es -> Cl3 es
toBV :: forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toBV R{} = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV Posit es
0 Posit es
0 Posit es
0
toBV V3{} = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV Posit es
0 Posit es
0 Posit es
0
toBV (BV Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV Posit es
a23 Posit es
a31 Posit es
a12
toBV I{} = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV Posit es
0 Posit es
0 Posit es
0
toBV PV{} = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV Posit es
0 Posit es
0 Posit es
0
toBV (H Posit es
_ Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV Posit es
a23 Posit es
a31 Posit es
a12
toBV C{} = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV Posit es
0 Posit es
0 Posit es
0
toBV (BPV Posit es
_ Posit es
_ Posit es
_ Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV Posit es
a23 Posit es
a31 Posit es
a12
toBV ODD{} = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV Posit es
0 Posit es
0 Posit es
0
toBV (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
_) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV Posit es
a23 Posit es
a31 Posit es
a12
toBV (APS Posit es
_ Posit es
_ Posit es
_ Posit es
_ Posit es
a23 Posit es
a31 Posit es
a12 Posit es
_) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV Posit es
a23 Posit es
a31 Posit es
a12

-- | 'toI' takes any Cliffor and returns the I portion
toI :: PositC es => Cl3 es -> Cl3 es
toI :: forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toI R{} = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
0
toI V3{} = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
0
toI BV{} = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
0
toI (I Posit es
a123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123
toI PV{} = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
0
toI H{} = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
0
toI (C Posit es
_ Posit es
a123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123
toI BPV{} = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
0
toI (ODD Posit es
_ Posit es
_ Posit es
_ Posit es
a123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123
toI (TPV Posit es
_ Posit es
_ Posit es
_ Posit es
a123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123
toI (APS Posit es
_ Posit es
_ Posit es
_ Posit es
_ Posit es
_ Posit es
_ Posit es
_ Posit es
a123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123

-- | 'toPV' takes any Cliffor and returns the PV poriton
toPV :: PositC es => Cl3 es -> Cl3 es
toPV :: forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toPV (R Posit es
a0) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
a0 Posit es
0 Posit es
0 Posit es
0
toPV (V3 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
0 Posit es
a1 Posit es
a2 Posit es
a3
toPV BV{} = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
0 Posit es
0 Posit es
0 Posit es
0
toPV I{} = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
0 Posit es
0 Posit es
0 Posit es
0
toPV (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3
toPV (H Posit es
a0 Posit es
_ Posit es
_ Posit es
_) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
a0 Posit es
0 Posit es
0 Posit es
0
toPV (C Posit es
a0 Posit es
_) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
a0 Posit es
0 Posit es
0 Posit es
0
toPV (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
_ Posit es
_ Posit es
_) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
0 Posit es
a1 Posit es
a2 Posit es
a3
toPV (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
_) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
0
toPV TPV{} = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
0 Posit es
0 Posit es
0 Posit es
0
toPV (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
_ Posit es
_ Posit es
_ Posit es
_) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3

-- | 'toH' takes any Cliffor and returns the H portion
toH :: PositC es => Cl3 es -> Cl3 es
toH :: forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toH (R Posit es
a0) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
a0 Posit es
0 Posit es
0 Posit es
0
toH V3{} = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
0 Posit es
0 Posit es
0 Posit es
0
toH (BV Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
0 Posit es
a23 Posit es
a31 Posit es
a12
toH (I Posit es
_) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
0 Posit es
0 Posit es
0 Posit es
0
toH (PV Posit es
a0 Posit es
_ Posit es
_ Posit es
_) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
a0 Posit es
0 Posit es
0 Posit es
0
toH (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12
toH (C Posit es
a0 Posit es
_) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
a0 Posit es
0 Posit es
0 Posit es
0
toH (BPV Posit es
_ Posit es
_ Posit es
_ Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
0 Posit es
a23 Posit es
a31 Posit es
a12
toH ODD{} = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
0 Posit es
0 Posit es
0 Posit es
0
toH (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
_) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
0 Posit es
a23 Posit es
a31 Posit es
a12
toH (APS Posit es
a0 Posit es
_ Posit es
_ Posit es
_ Posit es
a23 Posit es
a31 Posit es
a12 Posit es
_) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12

-- | 'toC' takes any Cliffor and returns the C portion
toC :: PositC es => Cl3 es -> Cl3 es
toC :: forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toC (R Posit es
a0) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
a0 Posit es
0
toC V3{} = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
0 Posit es
0
toC BV{} = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
0 Posit es
0
toC (I Posit es
a123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
0 Posit es
a123
toC (PV Posit es
a0 Posit es
_ Posit es
_ Posit es
_) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
a0 Posit es
0
toC (H Posit es
a0 Posit es
_ Posit es
_ Posit es
_) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
a0 Posit es
0
toC (C Posit es
a0 Posit es
a123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
a0 Posit es
a123
toC BPV{} = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
0 Posit es
0
toC (ODD Posit es
_ Posit es
_ Posit es
_ Posit es
a123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
0 Posit es
a123
toC (TPV Posit es
_ Posit es
_ Posit es
_ Posit es
a123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
0 Posit es
a123
toC (APS Posit es
a0 Posit es
_ Posit es
_ Posit es
_ Posit es
_ Posit es
_ Posit es
_ Posit es
a123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
a0 Posit es
a123

-- | 'toBPV' takes any Cliffor and returns the BPV portion
toBPV :: PositC es => Cl3 es -> Cl3 es
toBPV :: forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toBPV R{} = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
0 Posit es
0 Posit es
0 Posit es
0 Posit es
0 Posit es
0
toBPV (V3 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
0 Posit es
0 Posit es
0
toBPV (BV Posit es
a23 Posit es
a31 Posit es
a12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
0 Posit es
0 Posit es
0 Posit es
a23 Posit es
a31 Posit es
a12
toBPV I{} = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
0 Posit es
0 Posit es
0 Posit es
0 Posit es
0 Posit es
0
toBPV (PV Posit es
_ Posit es
a1 Posit es
a2 Posit es
a3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
0 Posit es
0 Posit es
0
toBPV (H Posit es
_ Posit es
a23 Posit es
a31 Posit es
a12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
0 Posit es
0 Posit es
0 Posit es
a23 Posit es
a31 Posit es
a12
toBPV C{} = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
0 Posit es
0 Posit es
0 Posit es
0 Posit es
0 Posit es
0
toBPV (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12
toBPV (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
_) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
0 Posit es
0 Posit es
0
toBPV (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
_) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
0 Posit es
0 Posit es
0 Posit es
a23 Posit es
a31 Posit es
a12
toBPV (APS Posit es
_ Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
_) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12

-- | 'toODD' takes any Cliffor and returns the ODD portion
toODD :: PositC es => Cl3 es -> Cl3 es
toODD :: forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toODD R{} = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
0 Posit es
0 Posit es
0 Posit es
0
toODD (V3 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
0
toODD BV{} = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
0 Posit es
0 Posit es
0 Posit es
0
toODD (I Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
0 Posit es
0 Posit es
0 Posit es
a123
toODD (PV Posit es
_ Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
0
toODD H{} = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
0 Posit es
0 Posit es
0 Posit es
0
toODD (C Posit es
_ Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
0 Posit es
0 Posit es
0 Posit es
a123
toODD (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
_ Posit es
_ Posit es
_) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
0
toODD (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123
toODD (TPV Posit es
_ Posit es
_ Posit es
_ Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
0 Posit es
0 Posit es
0 Posit es
a123
toODD (APS Posit es
_ Posit es
a1 Posit es
a2 Posit es
a3 Posit es
_ Posit es
_ Posit es
_ Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123

-- | 'toTPV' takes any Cliffor and returns the TPV portion
toTPV :: PositC es => Cl3 es -> Cl3 es
toTPV :: forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toTPV R{} = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV Posit es
0 Posit es
0 Posit es
0 Posit es
0
toTPV V3{} = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV Posit es
0 Posit es
0 Posit es
0 Posit es
0
toTPV (BV Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
0
toTPV (I Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV Posit es
0 Posit es
0 Posit es
0 Posit es
a123
toTPV PV{} = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV Posit es
0 Posit es
0 Posit es
0 Posit es
0
toTPV (H Posit es
_ Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
0
toTPV (C Posit es
_ Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV Posit es
0 Posit es
0 Posit es
0 Posit es
a123
toTPV (BPV Posit es
_ Posit es
_ Posit es
_ Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
0
toTPV (ODD Posit es
_ Posit es
_ Posit es
_ Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV Posit es
0 Posit es
0 Posit es
0 Posit es
a123
toTPV (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123
toTPV (APS Posit es
_ Posit es
_ Posit es
_ Posit es
_ Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123

-- | 'toAPS' takes any Cliffor and returns the APS portion
toAPS :: PositC es => Cl3 es -> Cl3 es
toAPS :: forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toAPS (R Posit es
a0) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
0 Posit es
0 Posit es
0 Posit es
0 Posit es
0 Posit es
0 Posit es
0
toAPS (V3 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
0 Posit es
0 Posit es
0 Posit es
0
toAPS (BV Posit es
a23 Posit es
a31 Posit es
a12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0 Posit es
0 Posit es
0 Posit es
0 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
0
toAPS (I Posit es
a123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0 Posit es
0 Posit es
0 Posit es
0 Posit es
0 Posit es
0 Posit es
0 Posit es
a123
toAPS (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
0 Posit es
0 Posit es
0 Posit es
0
toAPS (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
0 Posit es
0 Posit es
0 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
0
toAPS (C Posit es
a0 Posit es
a123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
0 Posit es
0 Posit es
0 Posit es
0 Posit es
0 Posit es
0 Posit es
a123
toAPS (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
0
toAPS (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
0 Posit es
0 Posit es
0 Posit es
a123
toAPS (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
0 Posit es
0 Posit es
0 Posit es
0 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123
toAPS (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123

-- derivatives of the functions in the Fractional Class for use in Jordan NF functon implemetnation
recip' :: PositF es => Cl3 es -> Cl3 es
recip' :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
recip' = Cl3 es -> Cl3 es
forall a. Num a => a -> a
negate(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 es -> Cl3 es
forall a. Fractional a => a -> a
recip(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 es -> Integer -> Cl3 es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)   -- pole at 0

exp' :: PositF es => Cl3 es -> Cl3 es
exp' :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
exp' = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
exp

log' :: PositF es => Cl3 es -> Cl3 es
log' :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
log' = Cl3 es -> Cl3 es
forall a. Fractional a => a -> a
recip  -- pole at 0

sqrt' :: PositF es => Cl3 es -> Cl3 es
sqrt' :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
sqrt' = (Cl3 es -> Cl3 es -> Cl3 es
forall a. Fractional a => a -> a -> a
/Cl3 es
2)(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 es -> Cl3 es
forall a. Fractional a => a -> a
recip(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 es -> Cl3 es
forall a. Floating a => a -> a
sqrt   -- pole at 0  -- what about: `recip.(2*).sqrt` ?

sin' :: PositF es => Cl3 es -> Cl3 es
sin' :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
sin' = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
cos

cos' :: PositF es => Cl3 es -> Cl3 es
cos' :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
cos' = Cl3 es -> Cl3 es
forall a. Num a => a -> a
negate(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 es -> Cl3 es
forall a. Floating a => a -> a
sin

tan' :: PositF es => Cl3 es -> Cl3 es
tan' :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
tan' = Cl3 es -> Cl3 es
forall a. Fractional a => a -> a
recip(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 es -> Integer -> Cl3 es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 es -> Cl3 es
forall a. Floating a => a -> a
cos  -- pole at pi/2*n for all integers

asin' :: PositF es => Cl3 es -> Cl3 es
asin' :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
asin' = Cl3 es -> Cl3 es
forall a. Fractional a => a -> a
recip(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 es -> Cl3 es
forall a. Floating a => a -> a
sqrt(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 es
1Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
-)(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 es -> Integer -> Cl3 es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)  -- pole at +/-1

acos' :: PositF es => Cl3 es -> Cl3 es
acos' :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
acos' = Cl3 es -> Cl3 es
forall a. Num a => a -> a
negate(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 es -> Cl3 es
forall a. Fractional a => a -> a
recip(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 es -> Cl3 es
forall a. Floating a => a -> a
sqrt(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 es
1Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
-)(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 es -> Integer -> Cl3 es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)  -- pole at +/-1

atan' :: PositF es => Cl3 es -> Cl3 es
atan' :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
atan' = Cl3 es -> Cl3 es
forall a. Fractional a => a -> a
recip(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 es
1Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
+)(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 es -> Integer -> Cl3 es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)  -- pole at +/-i

sinh' :: PositF es => Cl3 es -> Cl3 es
sinh' :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
sinh' = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
cosh

cosh' :: PositF es => Cl3 es -> Cl3 es
cosh' :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
cosh' = Cl3 es -> Cl3 es
forall a. Floating a => a -> a
sinh

tanh' :: PositF es => Cl3 es -> Cl3 es
tanh' :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
tanh' = Cl3 es -> Cl3 es
forall a. Fractional a => a -> a
recip(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 es -> Integer -> Cl3 es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 es -> Cl3 es
forall a. Floating a => a -> a
cosh

asinh' :: PositF es => Cl3 es -> Cl3 es
asinh' :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
asinh' = Cl3 es -> Cl3 es
forall a. Fractional a => a -> a
recip(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 es -> Cl3 es
forall a. Floating a => a -> a
sqrt(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 es
1Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
+)(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 es -> Integer -> Cl3 es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)  -- pole at +/-i

acosh' :: PositF es => Cl3 es -> Cl3 es
acosh' :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
acosh' Cl3 es
x = Cl3 es -> Cl3 es
forall a. Fractional a => a -> a
recip (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall a b. (a -> b) -> a -> b
$ Cl3 es -> Cl3 es
forall a. Floating a => a -> a
sqrt (Cl3 es
x Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
- Cl3 es
1) Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
* Cl3 es -> Cl3 es
forall a. Floating a => a -> a
sqrt (Cl3 es
x Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
+ Cl3 es
1)  -- pole at +/-1

atanh' :: PositF es => Cl3 es -> Cl3 es
atanh' :: forall (es :: ES). PositF es => Cl3 es -> Cl3 es
atanh' = Cl3 es -> Cl3 es
forall a. Fractional a => a -> a
recip(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 es
1Cl3 es -> Cl3 es -> Cl3 es
forall a. Num a => a -> a -> a
-)(Cl3 es -> Cl3 es) -> (Cl3 es -> Cl3 es) -> Cl3 es -> Cl3 es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 es -> Integer -> Cl3 es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)  -- pole at +/-1

instance (PositC es1, PositC es2) => Convertible (Cl3 es1) (Cl3 es2) where
  convert :: Cl3 es1 -> Cl3 es2
convert (R Posit es1
a0) = Posit es2 -> Cl3 es2
forall (es :: ES). PositC es => Posit es -> Cl3 es
R (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a0)
  convert (V3 Posit es1
a1 Posit es1
a2 Posit es1
a3) = Posit es2 -> Posit es2 -> Posit es2 -> Cl3 es2
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a1) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a2) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a3)
  convert (BV Posit es1
a23 Posit es1
a31 Posit es1
a12) = Posit es2 -> Posit es2 -> Posit es2 -> Cl3 es2
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a23) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a31) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a12)
  convert (I Posit es1
a123) = Posit es2 -> Cl3 es2
forall (es :: ES). PositC es => Posit es -> Cl3 es
I (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a123)
  convert (PV Posit es1
a0 Posit es1
a1 Posit es1
a2 Posit es1
a3) = Posit es2 -> Posit es2 -> Posit es2 -> Posit es2 -> Cl3 es2
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a0) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a1) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a2) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a3)
  convert (H Posit es1
a0 Posit es1
a23 Posit es1
a31 Posit es1
a12) = Posit es2 -> Posit es2 -> Posit es2 -> Posit es2 -> Cl3 es2
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a0) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a23) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a31) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a12)
  convert (C Posit es1
a0 Posit es1
a123) = Posit es2 -> Posit es2 -> Cl3 es2
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a0) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a123)
  convert (BPV Posit es1
a1 Posit es1
a2 Posit es1
a3 Posit es1
a23 Posit es1
a31 Posit es1
a12) = Posit es2
-> Posit es2
-> Posit es2
-> Posit es2
-> Posit es2
-> Posit es2
-> Cl3 es2
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a1) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a2) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a3) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a23) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a31) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a12)
  convert (ODD Posit es1
a1 Posit es1
a2 Posit es1
a3 Posit es1
a123) = Posit es2 -> Posit es2 -> Posit es2 -> Posit es2 -> Cl3 es2
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a1) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a2) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a3) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a123)
  convert (TPV Posit es1
a23 Posit es1
a31 Posit es1
a12 Posit es1
a123) = Posit es2 -> Posit es2 -> Posit es2 -> Posit es2 -> Cl3 es2
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a23) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a31) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a12) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a123)
  convert (APS Posit es1
a0 Posit es1
a1 Posit es1
a2 Posit es1
a3 Posit es1
a23 Posit es1
a31 Posit es1
a12 Posit es1
a123) = Posit es2
-> Posit es2
-> Posit es2
-> Posit es2
-> Posit es2
-> Posit es2
-> Posit es2
-> Posit es2
-> Cl3 es2
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a0) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a1) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a2) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a3) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a23) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a31) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a12) (Posit es1 -> Posit es2
forall a b. Convertible a b => a -> b
convert Posit es1
a123)



#ifndef O_NO_STORABLE
-------------------------------------------------------------------
-- 
-- Instance of Cl3 types with the "Foreign.Storable" library.
--  
-- For use with high performance data structures like Data.Vector.Storable
-- or Data.Array.Storable
-- 
-------------------------------------------------------------------

-- | Cl3 instance of Storable uses the APS constructor as its standard interface.
-- "peek" returns a cliffor constructed with APS. "poke" converts a cliffor to APS.
-- For a more compact storing of constructors other than APS use the storable
-- subtypes Cl3_R, Cl3_V3, Cl3_BV, Cl3_I, Cl3_PV, Cl3_H, Cl3_C, Cl3_BPV,
-- Cl3_ODD, Cl3_TPV.
instance PositC es => Storable (Cl3 es) where
  sizeOf :: Cl3 es -> Int
sizeOf Cl3 es
_ = Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  alignment :: Cl3 es -> Int
alignment Cl3 es
_ = Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  peek :: Ptr (Cl3 es) -> IO (Cl3 es)
peek Ptr (Cl3 es)
ptr = do
    Posit es
a0 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
0)
    Posit es
a1 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
1)
    Posit es
a2 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
2)
    Posit es
a3 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
3)
    Posit es
a23 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
4)
    Posit es
a31 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
5)
    Posit es
a12 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
6)
    Posit es
a123 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
7)
    Cl3 es -> IO (Cl3 es)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3 es -> IO (Cl3 es)) -> Cl3 es -> IO (Cl3 es)
forall a b. (a -> b) -> a -> b
$ Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3 es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3 es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))
  
  poke :: Ptr (Cl3 es) -> Cl3 es -> IO ()
poke Ptr (Cl3 es)
ptr (Cl3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3 es -> Cl3 es
toAPS -> APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = do
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
0) Posit es
a0
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
1) Posit es
a1
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
2) Posit es
a2
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
3) Posit es
a3
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
4) Posit es
a23
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
5) Posit es
a31
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
6) Posit es
a12
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
7) Posit es
a123
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3 es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3 es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))
  poke Ptr (Cl3 es)
_ Cl3 es
_ = String -> IO ()
forall a. HasCallStack => String -> a
error String
"Serious Issues with poke in Cl3.Storable"


-- | 'Cl3_R' a compact storable data type for R.
data Cl3_R es where
  Cl3_R :: (PositC es) => !(Posit es) -> Cl3_R es

-- | 'toCl3_R' converts a Cl3 value constructed with R to its compact form.
toCl3_R :: PositC es => Cl3 es -> Cl3_R es
toCl3_R :: forall (es :: ES). PositC es => Cl3 es -> Cl3_R es
toCl3_R (R Posit es
a0) = Posit es -> Cl3_R es
forall (es :: ES). PositC es => Posit es -> Cl3_R es
Cl3_R Posit es
a0
toCl3_R Cl3 es
err = String -> Cl3_R es
forall a. HasCallStack => String -> a
error (String -> Cl3_R es) -> String -> Cl3_R es
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not R to Cl3_R, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 es -> String
forall a. Show a => a -> String
show Cl3 es
err

-- | 'fromCl3_R' converts the compact Cl3_R type back to a Cl3 type.
fromCl3_R :: PositC es => Cl3_R es -> Cl3 es
fromCl3_R :: forall (es :: ES). PositC es => Cl3_R es -> Cl3 es
fromCl3_R (Cl3_R Posit es
a0) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R Posit es
a0

instance PositC es => Show (Cl3_R es) where
  show :: Cl3_R es -> String
show = Cl3 es -> String
forall a. Show a => a -> String
show(Cl3 es -> String) -> (Cl3_R es -> Cl3 es) -> Cl3_R es -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_R es -> Cl3 es
forall (es :: ES). PositC es => Cl3_R es -> Cl3 es
fromCl3_R

#ifndef O_NO_DERIVED
instance PositC es => Read (Cl3_R es) where
  readPrec = toCl3_R <$> readPrec
#endif

instance PositC es => Storable (Cl3_R es) where
  sizeOf :: Cl3_R es -> Int
sizeOf Cl3_R es
_ = Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  alignment :: Cl3_R es -> Int
alignment Cl3_R es
_ = Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  peek :: Ptr (Cl3_R es) -> IO (Cl3_R es)
peek Ptr (Cl3_R es)
ptr = do
    Posit es
a0 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Posit es)
offset
    Cl3_R es -> IO (Cl3_R es)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_R es -> IO (Cl3_R es)) -> Cl3_R es -> IO (Cl3_R es)
forall a b. (a -> b) -> a -> b
$ Posit es -> Cl3_R es
forall (es :: ES). PositC es => Posit es -> Cl3_R es
Cl3_R Posit es
a0
      where
        offset :: Ptr (Posit es)
offset = Ptr (Cl3_R es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_R es)
ptr :: Ptr (Posit es)

  poke :: Ptr (Cl3_R es) -> Cl3_R es -> IO ()
poke Ptr (Cl3_R es)
ptr (Cl3_R Posit es
a0) = do
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke Ptr (Posit es)
offset Posit es
a0
      where
        offset :: Ptr (Posit es)
offset = Ptr (Cl3_R es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_R es)
ptr :: Ptr (Posit es)


-- | 'Cl3_V3' a compact storable data type for V3.
data Cl3_V3 es where
  Cl3_V3 :: (PositC es) => !(Posit es) -> !(Posit es) -> !(Posit es) -> Cl3_V3 es

-- | 'toCl3_V3' converts a Cl3 value constructed with V3 to its compact form.
toCl3_V3 :: PositC es => Cl3 es -> Cl3_V3 es
toCl3_V3 :: forall (es :: ES). PositC es => Cl3 es -> Cl3_V3 es
toCl3_V3 (V3 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Cl3_V3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3_V3 es
Cl3_V3 Posit es
a1 Posit es
a2 Posit es
a3
toCl3_V3 Cl3 es
err = String -> Cl3_V3 es
forall a. HasCallStack => String -> a
error (String -> Cl3_V3 es) -> String -> Cl3_V3 es
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not V3 to Cl3_V3, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 es -> String
forall a. Show a => a -> String
show Cl3 es
err

-- | 'fromCl3_V3' converts the compact Cl3_V3 type back to a Cl3 type.
fromCl3_V3 :: PositC es => Cl3_V3 es -> Cl3 es
fromCl3_V3 :: forall (es :: ES). PositC es => Cl3_V3 es -> Cl3 es
fromCl3_V3 (Cl3_V3 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 Posit es
a1 Posit es
a2 Posit es
a3

instance PositC es => Show (Cl3_V3 es) where
  show :: Cl3_V3 es -> String
show = Cl3 es -> String
forall a. Show a => a -> String
show(Cl3 es -> String) -> (Cl3_V3 es -> Cl3 es) -> Cl3_V3 es -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_V3 es -> Cl3 es
forall (es :: ES). PositC es => Cl3_V3 es -> Cl3 es
fromCl3_V3

#ifndef O_NO_DERIVED
instance PositC es => Read (Cl3_V3 es) where
  readPrec = toCl3_V3 <$> readPrec
#endif

instance PositC es => Storable (Cl3_V3 es) where
  sizeOf :: Cl3_V3 es -> Int
sizeOf Cl3_V3 es
_ = Int
3 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  alignment :: Cl3_V3 es -> Int
alignment Cl3_V3 es
_ = Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  peek :: Ptr (Cl3_V3 es) -> IO (Cl3_V3 es)
peek Ptr (Cl3_V3 es)
ptr = do
    Posit es
a1 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
0)
    Posit es
a2 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
1)
    Posit es
a3 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
2)
    Cl3_V3 es -> IO (Cl3_V3 es)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_V3 es -> IO (Cl3_V3 es)) -> Cl3_V3 es -> IO (Cl3_V3 es)
forall a b. (a -> b) -> a -> b
$ Posit es -> Posit es -> Posit es -> Cl3_V3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3_V3 es
Cl3_V3 Posit es
a1 Posit es
a2 Posit es
a3
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3_V3 es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_V3 es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))

  poke :: Ptr (Cl3_V3 es) -> Cl3_V3 es -> IO ()
poke Ptr (Cl3_V3 es)
ptr (Cl3_V3 Posit es
a1 Posit es
a2 Posit es
a3) = do
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
0) Posit es
a1
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
1) Posit es
a2
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
2) Posit es
a3
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3_V3 es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_V3 es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))


-- | 'Cl3_BV' a compact storable data type for BV.
data Cl3_BV es where
  Cl3_BV :: (PositC es) => !(Posit es) -> !(Posit es) -> !(Posit es) -> Cl3_BV es

-- | 'toCl3_BV' converts a Cl3 value constructed with BV to its compact form.
toCl3_BV :: PositC es => Cl3 es -> Cl3_BV es
toCl3_BV :: forall (es :: ES). PositC es => Cl3 es -> Cl3_BV es
toCl3_BV (BV Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Cl3_BV es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3_BV es
Cl3_BV Posit es
a23 Posit es
a31 Posit es
a12
toCl3_BV Cl3 es
err = String -> Cl3_BV es
forall a. HasCallStack => String -> a
error (String -> Cl3_BV es) -> String -> Cl3_BV es
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not BV to Cl3_BV, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 es -> String
forall a. Show a => a -> String
show Cl3 es
err

-- | 'fromCl3_BV' converts the compact Cl3_BV type back to a Cl3 type.
fromCl3_BV :: PositC es => Cl3_BV es -> Cl3 es
fromCl3_BV :: forall (es :: ES). PositC es => Cl3_BV es -> Cl3 es
fromCl3_BV (Cl3_BV Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV Posit es
a23 Posit es
a31 Posit es
a12

instance PositC es => Show (Cl3_BV es) where
  show :: Cl3_BV es -> String
show = Cl3 es -> String
forall a. Show a => a -> String
show(Cl3 es -> String) -> (Cl3_BV es -> Cl3 es) -> Cl3_BV es -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_BV es -> Cl3 es
forall (es :: ES). PositC es => Cl3_BV es -> Cl3 es
fromCl3_BV

#ifndef O_NO_DERIVED
instance PositC es => Read (Cl3_BV es) where
  readPrec = toCl3_BV <$> readPrec
#endif

instance PositC es => Storable (Cl3_BV es) where
  sizeOf :: Cl3_BV es -> Int
sizeOf Cl3_BV es
_ = Int
3 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  alignment :: Cl3_BV es -> Int
alignment Cl3_BV es
_ = Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  peek :: Ptr (Cl3_BV es) -> IO (Cl3_BV es)
peek Ptr (Cl3_BV es)
ptr = do
    Posit es
a23 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
0)
    Posit es
a31 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
1)
    Posit es
a12 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
2)
    Cl3_BV es -> IO (Cl3_BV es)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_BV es -> IO (Cl3_BV es)) -> Cl3_BV es -> IO (Cl3_BV es)
forall a b. (a -> b) -> a -> b
$ Posit es -> Posit es -> Posit es -> Cl3_BV es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3_BV es
Cl3_BV Posit es
a23 Posit es
a31 Posit es
a12
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3_BV es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_BV es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))

  poke :: Ptr (Cl3_BV es) -> Cl3_BV es -> IO ()
poke Ptr (Cl3_BV es)
ptr (Cl3_BV Posit es
a23 Posit es
a31 Posit es
a12) = do
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
0) Posit es
a23
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
1) Posit es
a31
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
2) Posit es
a12
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3_BV es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_BV es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))


-- | 'Cl3_I' a compact storable data type for I.
data Cl3_I es where
  Cl3_I :: PositC es => !(Posit es) -> Cl3_I es

-- | 'toCl3_I' converts a Cl3 value constructed with I to its compact form.
toCl3_I :: PositC es => Cl3 es -> Cl3_I es
toCl3_I :: forall (es :: ES). PositC es => Cl3 es -> Cl3_I es
toCl3_I (I Posit es
a123) = Posit es -> Cl3_I es
forall (es :: ES). PositC es => Posit es -> Cl3_I es
Cl3_I Posit es
a123
toCl3_I Cl3 es
err = String -> Cl3_I es
forall a. HasCallStack => String -> a
error (String -> Cl3_I es) -> String -> Cl3_I es
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not R to Cl3_R, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 es -> String
forall a. Show a => a -> String
show Cl3 es
err

-- | 'fromCl3_I' converts the compact Cl3_I type back to a Cl3 type.
fromCl3_I :: PositC es => Cl3_I es -> Cl3 es
fromCl3_I :: forall (es :: ES). PositC es => Cl3_I es -> Cl3 es
fromCl3_I (Cl3_I Posit es
a123) = Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I Posit es
a123

instance PositC es => Show (Cl3_I es) where
  show :: Cl3_I es -> String
show = Cl3 es -> String
forall a. Show a => a -> String
show(Cl3 es -> String) -> (Cl3_I es -> Cl3 es) -> Cl3_I es -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_I es -> Cl3 es
forall (es :: ES). PositC es => Cl3_I es -> Cl3 es
fromCl3_I

#ifndef O_NO_DERIVED
instance PositC es => Read (Cl3_I es) where
  readPrec = toCl3_I <$> readPrec
#endif

instance PositC es => Storable (Cl3_I es) where
  sizeOf :: Cl3_I es -> Int
sizeOf Cl3_I es
_ = Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  alignment :: Cl3_I es -> Int
alignment Cl3_I es
_ = Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  peek :: Ptr (Cl3_I es) -> IO (Cl3_I es)
peek Ptr (Cl3_I es)
ptr = do
    Posit es
a123 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Posit es)
offset
    Cl3_I es -> IO (Cl3_I es)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_I es -> IO (Cl3_I es)) -> Cl3_I es -> IO (Cl3_I es)
forall a b. (a -> b) -> a -> b
$ Posit es -> Cl3_I es
forall (es :: ES). PositC es => Posit es -> Cl3_I es
Cl3_I Posit es
a123
      where
        offset :: Ptr (Posit es)
offset = Ptr (Cl3_I es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_I es)
ptr :: Ptr (Posit es)

  poke :: Ptr (Cl3_I es) -> Cl3_I es -> IO ()
poke Ptr (Cl3_I es)
ptr (Cl3_I Posit es
a123) = do
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke Ptr (Posit es)
offset Posit es
a123
      where
        offset :: Ptr (Posit es)
offset = Ptr (Cl3_I es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_I es)
ptr :: Ptr (Posit es)


-- | 'Cl3_PV' a compact storable data type for PV.
data Cl3_PV es where
  Cl3_PV :: PositC es => !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> Cl3_PV es

-- | 'toCl3_PV' converts a Cl3 value constructed with PV to its compact form.
toCl3_PV :: PositC es => Cl3 es -> Cl3_PV es
toCl3_PV :: forall (es :: ES). PositC es => Cl3 es -> Cl3_PV es
toCl3_PV (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3_PV es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3_PV es
Cl3_PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3
toCl3_PV Cl3 es
err = String -> Cl3_PV es
forall a. HasCallStack => String -> a
error (String -> Cl3_PV es) -> String -> Cl3_PV es
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not PV to Cl3_PV, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 es -> String
forall a. Show a => a -> String
show Cl3 es
err

-- | 'fromCl3_PV' converts the compact Cl3_PV type back to a Cl3 type.
fromCl3_PV :: PositC es => Cl3_PV es -> Cl3 es
fromCl3_PV :: forall (es :: ES). PositC es => Cl3_PV es -> Cl3 es
fromCl3_PV (Cl3_PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3

instance PositC es => Show (Cl3_PV es) where
  show :: Cl3_PV es -> String
show = Cl3 es -> String
forall a. Show a => a -> String
show(Cl3 es -> String) -> (Cl3_PV es -> Cl3 es) -> Cl3_PV es -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_PV es -> Cl3 es
forall (es :: ES). PositC es => Cl3_PV es -> Cl3 es
fromCl3_PV

#ifndef O_NO_DERIVED
instance PositC es => Read (Cl3_PV es) where
  readPrec = toCl3_PV <$> readPrec
#endif

instance PositC es => Storable (Cl3_PV es) where
  sizeOf :: Cl3_PV es -> Int
sizeOf Cl3_PV es
_ = Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  alignment :: Cl3_PV es -> Int
alignment Cl3_PV es
_ = Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  peek :: Ptr (Cl3_PV es) -> IO (Cl3_PV es)
peek Ptr (Cl3_PV es)
ptr = do
    Posit es
a0 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
0)
    Posit es
a1 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
1)
    Posit es
a2 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
2)
    Posit es
a3 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
4)
    Cl3_PV es -> IO (Cl3_PV es)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_PV es -> IO (Cl3_PV es)) -> Cl3_PV es -> IO (Cl3_PV es)
forall a b. (a -> b) -> a -> b
$ Posit es -> Posit es -> Posit es -> Posit es -> Cl3_PV es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3_PV es
Cl3_PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3_PV es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_PV es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))

  poke :: Ptr (Cl3_PV es) -> Cl3_PV es -> IO ()
poke Ptr (Cl3_PV es)
ptr (Cl3_PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3) = do
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
0) Posit es
a0
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
1) Posit es
a1
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
2) Posit es
a2
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
3) Posit es
a3
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3_PV es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_PV es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))


-- | 'Cl3_H' a compact storable data type for H.
data Cl3_H es where
  Cl3_H :: PositC es => !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> Cl3_H es

-- | 'toCl3_H' converts a Cl3 value constructed with H to its compact form.
toCl3_H :: PositC es => Cl3 es -> Cl3_H es
toCl3_H :: forall (es :: ES). PositC es => Cl3 es -> Cl3_H es
toCl3_H (H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3_H es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3_H es
Cl3_H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12
toCl3_H Cl3 es
err = String -> Cl3_H es
forall a. HasCallStack => String -> a
error (String -> Cl3_H es) -> String -> Cl3_H es
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not H to Cl3_H, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 es -> String
forall a. Show a => a -> String
show Cl3 es
err

-- | 'fromCl3_H' converts the compact Cl3_H type back to a Cl3 type.
fromCl3_H :: PositC es => Cl3_H es -> Cl3 es
fromCl3_H :: forall (es :: ES). PositC es => Cl3_H es -> Cl3 es
fromCl3_H (Cl3_H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12

instance PositC es => Show (Cl3_H es) where
  show :: Cl3_H es -> String
show = Cl3 es -> String
forall a. Show a => a -> String
show(Cl3 es -> String) -> (Cl3_H es -> Cl3 es) -> Cl3_H es -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_H es -> Cl3 es
forall (es :: ES). PositC es => Cl3_H es -> Cl3 es
fromCl3_H

#ifndef O_NO_DERIVED
instance PositC es => Read (Cl3_H es) where
  readPrec = toCl3_H <$> readPrec
#endif

instance PositC es => Storable (Cl3_H es) where
  sizeOf :: Cl3_H es -> Int
sizeOf Cl3_H es
_ = Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  alignment :: Cl3_H es -> Int
alignment Cl3_H es
_ = Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  peek :: Ptr (Cl3_H es) -> IO (Cl3_H es)
peek Ptr (Cl3_H es)
ptr = do
    Posit es
a0 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
0)
    Posit es
a23 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
1)
    Posit es
a31 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
2)
    Posit es
a12 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
3)
    Cl3_H es -> IO (Cl3_H es)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_H es -> IO (Cl3_H es)) -> Cl3_H es -> IO (Cl3_H es)
forall a b. (a -> b) -> a -> b
$ Posit es -> Posit es -> Posit es -> Posit es -> Cl3_H es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3_H es
Cl3_H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3_H es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_H es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))

  poke :: Ptr (Cl3_H es) -> Cl3_H es -> IO ()
poke Ptr (Cl3_H es)
ptr (Cl3_H Posit es
a0 Posit es
a23 Posit es
a31 Posit es
a12) = do
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
0) Posit es
a0
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
1) Posit es
a23
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
2) Posit es
a31
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
3) Posit es
a12
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3_H es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_H es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))


-- | 'Cl3_C' a compact storable data type for C.
data Cl3_C es where
  Cl3_C :: PositC es => !(Posit es) -> !(Posit es) -> Cl3_C es

-- | 'toCl3_C' converts a Cl3 value constructed with C to its compact form.
toCl3_C :: PositC es => Cl3 es -> Cl3_C es
toCl3_C :: forall (es :: ES). PositC es => Cl3 es -> Cl3_C es
toCl3_C (C Posit es
a0 Posit es
a123) = Posit es -> Posit es -> Cl3_C es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3_C es
Cl3_C Posit es
a0 Posit es
a123
toCl3_C Cl3 es
err = String -> Cl3_C es
forall a. HasCallStack => String -> a
error (String -> Cl3_C es) -> String -> Cl3_C es
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not C to Cl3_C, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 es -> String
forall a. Show a => a -> String
show Cl3 es
err

-- | 'fromCl3_C' converts the compact Cl3_C type back to a Cl3 type.
fromCl3_C :: PositC es => Cl3_C es -> Cl3 es
fromCl3_C :: forall (es :: ES). PositC es => Cl3_C es -> Cl3 es
fromCl3_C (Cl3_C Posit es
a0 Posit es
a123) = Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C Posit es
a0 Posit es
a123

instance PositC es => Show (Cl3_C es) where
  show :: Cl3_C es -> String
show = Cl3 es -> String
forall a. Show a => a -> String
show(Cl3 es -> String) -> (Cl3_C es -> Cl3 es) -> Cl3_C es -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_C es -> Cl3 es
forall (es :: ES). PositC es => Cl3_C es -> Cl3 es
fromCl3_C

#ifndef O_NO_DERIVED
instance PositC es => Read (Cl3_C es) where
  readPrec = toCl3_C <$> readPrec
#endif

instance PositC es => Storable (Cl3_C es) where
  sizeOf :: Cl3_C es -> Int
sizeOf Cl3_C es
_ = Int
2 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  alignment :: Cl3_C es -> Int
alignment Cl3_C es
_ = Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  peek :: Ptr (Cl3_C es) -> IO (Cl3_C es)
peek Ptr (Cl3_C es)
ptr = do
    Posit es
a0 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
0)
    Posit es
a123 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
1)
    Cl3_C es -> IO (Cl3_C es)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_C es -> IO (Cl3_C es)) -> Cl3_C es -> IO (Cl3_C es)
forall a b. (a -> b) -> a -> b
$ Posit es -> Posit es -> Cl3_C es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3_C es
Cl3_C Posit es
a0 Posit es
a123
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3_C es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_C es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))

  poke :: Ptr (Cl3_C es) -> Cl3_C es -> IO ()
poke Ptr (Cl3_C es)
ptr (Cl3_C Posit es
a0 Posit es
a123) = do
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
0) Posit es
a0
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
1) Posit es
a123
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3_C es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_C es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))


-- | 'Cl3_BPV' a compact storable data type for BPV.
data Cl3_BPV es where
  Cl3_BPV :: PositC es => !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> Cl3_BPV es

-- | 'toCl3_BPV' converts a Cl3 value constructed with BPV to its compact form.
toCl3_BPV :: PositC es => Cl3 es -> Cl3_BPV es
toCl3_BPV :: forall (es :: ES). PositC es => Cl3 es -> Cl3_BPV es
toCl3_BPV (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3_BPV es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3_BPV es
Cl3_BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12
toCl3_BPV Cl3 es
err = String -> Cl3_BPV es
forall a. HasCallStack => String -> a
error (String -> Cl3_BPV es) -> String -> Cl3_BPV es
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not BPV to Cl3_BPV, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 es -> String
forall a. Show a => a -> String
show Cl3 es
err

-- | 'fromCl3_BPV' converts the compact Cl3_BPV type back to a Cl3 type.
fromCl3_BPV :: PositC es => Cl3_BPV es -> Cl3 es
fromCl3_BPV :: forall (es :: ES). PositC es => Cl3_BPV es -> Cl3 es
fromCl3_BPV (Cl3_BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12

instance PositC es => Show (Cl3_BPV es) where
  show :: Cl3_BPV es -> String
show = Cl3 es -> String
forall a. Show a => a -> String
show(Cl3 es -> String)
-> (Cl3_BPV es -> Cl3 es) -> Cl3_BPV es -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_BPV es -> Cl3 es
forall (es :: ES). PositC es => Cl3_BPV es -> Cl3 es
fromCl3_BPV

#ifndef O_NO_DERIVED
instance PositC es => Read (Cl3_BPV es) where
  readPrec = toCl3_BPV <$> readPrec
#endif

instance PositC es => Storable (Cl3_BPV es) where
  sizeOf :: Cl3_BPV es -> Int
sizeOf Cl3_BPV es
_ = Int
6 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  alignment :: Cl3_BPV es -> Int
alignment Cl3_BPV es
_ = Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  peek :: Ptr (Cl3_BPV es) -> IO (Cl3_BPV es)
peek Ptr (Cl3_BPV es)
ptr = do
    Posit es
a1 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
0)
    Posit es
a2 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
1)
    Posit es
a3 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
2)
    Posit es
a23 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
3)
    Posit es
a31 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
4)
    Posit es
a12 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
5)
    Cl3_BPV es -> IO (Cl3_BPV es)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_BPV es -> IO (Cl3_BPV es)) -> Cl3_BPV es -> IO (Cl3_BPV es)
forall a b. (a -> b) -> a -> b
$ Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3_BPV es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3_BPV es
Cl3_BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3_BPV es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_BPV es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))

  poke :: Ptr (Cl3_BPV es) -> Cl3_BPV es -> IO ()
poke Ptr (Cl3_BPV es)
ptr (Cl3_BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12) = do
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
0) Posit es
a1
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
1) Posit es
a2
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
2) Posit es
a3
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
3) Posit es
a23
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
4) Posit es
a31
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
5) Posit es
a12
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3_BPV es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_BPV es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))


-- | 'Cl3_ODD' a compact storable data type for ODD.
data Cl3_ODD es where
  Cl3_ODD :: PositC es => !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> Cl3_ODD es

-- | 'toCl3_ODD' converts a Cl3 value constructed with ODD to its compact form.
toCl3_ODD :: PositC es => Cl3 es -> Cl3_ODD es
toCl3_ODD :: forall (es :: ES). PositC es => Cl3 es -> Cl3_ODD es
toCl3_ODD (ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3_ODD es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3_ODD es
Cl3_ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123
toCl3_ODD Cl3 es
err = String -> Cl3_ODD es
forall a. HasCallStack => String -> a
error (String -> Cl3_ODD es) -> String -> Cl3_ODD es
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not ODD to Cl3_ODD, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 es -> String
forall a. Show a => a -> String
show Cl3 es
err

-- | 'fromCl3_ODD' converts the compact Cl3_ODD type back to a Cl3 type.
fromCl3_ODD :: PositC es => Cl3_ODD es -> Cl3 es
fromCl3_ODD :: forall (es :: ES). PositC es => Cl3_ODD es -> Cl3 es
fromCl3_ODD (Cl3_ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123

instance PositC es =>Show (Cl3_ODD es) where
  show :: Cl3_ODD es -> String
show = Cl3 es -> String
forall a. Show a => a -> String
show(Cl3 es -> String)
-> (Cl3_ODD es -> Cl3 es) -> Cl3_ODD es -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_ODD es -> Cl3 es
forall (es :: ES). PositC es => Cl3_ODD es -> Cl3 es
fromCl3_ODD

#ifndef O_NO_DERIVED
instance PositC es => Read (Cl3_ODD es) where
  readPrec = toCl3_ODD <$> readPrec
#endif

instance PositC es => Storable (Cl3_ODD es) where
  sizeOf :: Cl3_ODD es -> Int
sizeOf Cl3_ODD es
_ = Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  alignment :: Cl3_ODD es -> Int
alignment Cl3_ODD es
_ = Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  peek :: Ptr (Cl3_ODD es) -> IO (Cl3_ODD es)
peek Ptr (Cl3_ODD es)
ptr = do
    Posit es
a1 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
0)
    Posit es
a2 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
1)
    Posit es
a3 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
2)
    Posit es
a123 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
3)
    Cl3_ODD es -> IO (Cl3_ODD es)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_ODD es -> IO (Cl3_ODD es)) -> Cl3_ODD es -> IO (Cl3_ODD es)
forall a b. (a -> b) -> a -> b
$ Posit es -> Posit es -> Posit es -> Posit es -> Cl3_ODD es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3_ODD es
Cl3_ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3_ODD es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_ODD es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))

  poke :: Ptr (Cl3_ODD es) -> Cl3_ODD es -> IO ()
poke Ptr (Cl3_ODD es)
ptr (Cl3_ODD Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a123) = do
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
0) Posit es
a1
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
1) Posit es
a2
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
2) Posit es
a3
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
3) Posit es
a123
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3_ODD es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_ODD es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))


-- | 'Cl3_TPV' a compact storable data type for TPV.
data Cl3_TPV es where
  Cl3_TPV :: PositC es => !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> Cl3_TPV es

-- | 'toCl3_TPV' converts a Cl3 value constructed with TPV to its compact form.
toCl3_TPV :: PositC es => Cl3 es -> Cl3_TPV es
toCl3_TPV :: forall (es :: ES). PositC es => Cl3 es -> Cl3_TPV es
toCl3_TPV (TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3_TPV es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3_TPV es
Cl3_TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123
toCl3_TPV Cl3 es
err = String -> Cl3_TPV es
forall a. HasCallStack => String -> a
error (String -> Cl3_TPV es) -> String -> Cl3_TPV es
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not TPV to Cl3_TPV, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 es -> String
forall a. Show a => a -> String
show Cl3 es
err

-- | 'fromCl3_TPV' converts the compact Cl3_TPV type back to a Cl3 type.
fromCl3_TPV :: PositC es => Cl3_TPV es -> Cl3 es
fromCl3_TPV :: forall (es :: ES). PositC es => Cl3_TPV es -> Cl3 es
fromCl3_TPV (Cl3_TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123

instance PositC es => Show (Cl3_TPV es) where
  show :: Cl3_TPV es -> String
show = Cl3 es -> String
forall a. Show a => a -> String
show(Cl3 es -> String)
-> (Cl3_TPV es -> Cl3 es) -> Cl3_TPV es -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_TPV es -> Cl3 es
forall (es :: ES). PositC es => Cl3_TPV es -> Cl3 es
fromCl3_TPV

#ifndef O_NO_DERIVED
instance PositC es => Read (Cl3_TPV es) where
  readPrec = toCl3_TPV <$> readPrec
#endif

instance PositC es => Storable (Cl3_TPV es) where
  sizeOf :: Cl3_TPV es -> Int
sizeOf Cl3_TPV es
_ = Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  alignment :: Cl3_TPV es -> Int
alignment Cl3_TPV es
_ = Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  peek :: Ptr (Cl3_TPV es) -> IO (Cl3_TPV es)
peek Ptr (Cl3_TPV es)
ptr = do
    Posit es
a23 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
0)
    Posit es
a31 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
1)
    Posit es
a12 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
2)
    Posit es
a123 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
3)
    Cl3_TPV es -> IO (Cl3_TPV es)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_TPV es -> IO (Cl3_TPV es)) -> Cl3_TPV es -> IO (Cl3_TPV es)
forall a b. (a -> b) -> a -> b
$ Posit es -> Posit es -> Posit es -> Posit es -> Cl3_TPV es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3_TPV es
Cl3_TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3_TPV es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_TPV es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))

  poke :: Ptr (Cl3_TPV es) -> Cl3_TPV es -> IO ()
poke Ptr (Cl3_TPV es)
ptr (Cl3_TPV Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = do
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
0) Posit es
a23
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
1) Posit es
a31
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
2) Posit es
a12
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
3) Posit es
a123
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3_TPV es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_TPV es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))


-- | 'Cl3_APS' a compact storable data type for APS.
data Cl3_APS es where
  Cl3_APS :: PositC es => !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> !(Posit es) -> Cl3_APS es

-- | 'toCl3_APS' converts a Cl3 value constructed with APS to its compact form.
toCl3_APS :: PositC es => Cl3 es -> Cl3_APS es
toCl3_APS :: forall (es :: ES). PositC es => Cl3 es -> Cl3_APS es
toCl3_APS (APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3_APS es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3_APS es
Cl3_APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123
toCl3_APS Cl3 es
err = String -> Cl3_APS es
forall a. HasCallStack => String -> a
error (String -> Cl3_APS es) -> String -> Cl3_APS es
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not APS to Cl3_APS, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 es -> String
forall a. Show a => a -> String
show Cl3 es
err

-- | 'fromCl3_APS' converts the compact Cl3_APS type back to a Cl3 type.
fromCl3_APS :: PositC es => Cl3_APS es -> Cl3 es
fromCl3_APS :: forall (es :: ES). PositC es => Cl3_APS es -> Cl3 es
fromCl3_APS (Cl3_APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123

instance PositC es => Show (Cl3_APS es) where
  show :: Cl3_APS es -> String
show = Cl3 es -> String
forall a. Show a => a -> String
show(Cl3 es -> String)
-> (Cl3_APS es -> Cl3 es) -> Cl3_APS es -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_APS es -> Cl3 es
forall (es :: ES). PositC es => Cl3_APS es -> Cl3 es
fromCl3_APS

#ifndef O_NO_DERIVED
instance PositC es => Read (Cl3_APS es) where
  readPrec = toCl3_APS <$> readPrec
#endif

instance PositC es => Storable (Cl3_APS es) where
  sizeOf :: Cl3_APS es -> Int
sizeOf Cl3_APS es
_ = Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  alignment :: Cl3_APS es -> Int
alignment Cl3_APS es
_ = Posit es -> Int
forall a. Storable a => a -> Int
sizeOf (Posit es
forall a. HasCallStack => a
undefined :: Posit es)
  peek :: Ptr (Cl3_APS es) -> IO (Cl3_APS es)
peek Ptr (Cl3_APS es)
ptr = do
    Posit es
a0 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
0)
    Posit es
a1 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
1)
    Posit es
a2 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
2)
    Posit es
a3 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
3)
    Posit es
a23 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
4)
    Posit es
a31 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
5)
    Posit es
a12 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
6)
    Posit es
a123 <- Ptr (Posit es) -> IO (Posit es)
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr (Posit es)
offset Int
7)
    Cl3_APS es -> IO (Cl3_APS es)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_APS es -> IO (Cl3_APS es)) -> Cl3_APS es -> IO (Cl3_APS es)
forall a b. (a -> b) -> a -> b
$ Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3_APS es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3_APS es
Cl3_APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3_APS es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_APS es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))

  poke :: Ptr (Cl3_APS es) -> Cl3_APS es -> IO ()
poke Ptr (Cl3_APS es)
ptr (Cl3_APS Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12 Posit es
a123) = do
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
0) Posit es
a0
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
1) Posit es
a1
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
2) Posit es
a2
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
3) Posit es
a3
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
4) Posit es
a23
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
5) Posit es
a31
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
6) Posit es
a12
    Ptr (Posit es) -> Posit es -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr (Posit es)
offset Int
7) Posit es
a123
      where
        offset :: Int -> Ptr (Posit es)
offset Int
i = (Ptr (Cl3_APS es) -> Ptr (Posit es)
forall a b. Ptr a -> Ptr b
castPtr Ptr (Cl3_APS es)
ptr :: Ptr (Posit es)) Ptr (Posit es) -> Int -> Ptr (Posit es)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Natural -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (es :: ES). PositC es => Natural
nBytes @es))


#endif



#ifndef O_NO_RANDOM
-------------------------------------------------------------------
-- 
-- Random Instance of Cl3 types with the "System.Random" library.
-- 
--
-- Random helper functions will be based on the "abs x * signum x" decomposition
-- for the single grade elements. The "abs x" will be the random magnitude that
-- is by the default [0,1), and the "signum x" part will be a random direction
-- of a vector or the sign of a scalar. The multi-grade elements will be constructed from
-- a combination of the single grade generators.  Each grade will be evenly
-- distributed across the range.
-- 
-------------------------------------------------------------------

-- | 'Random' instance for the 'System.Random' library
instance PositF es => Random (Cl3 es) where
  randomR :: forall g. RandomGen g => (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
randomR (Cl3 es
minAbs,Cl3 es
maxAbs) g
g =
    case (Int, Int) -> g -> (Int, g)
forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
forall g. RandomGen g => (Int, Int) -> g -> (Int, g)
randomR (ConCl3 -> Int
forall a. Enum a => a -> Int
fromEnum (ConCl3
forall a. Bounded a => a
minBound :: ConCl3), ConCl3 -> Int
forall a. Enum a => a -> Int
fromEnum (ConCl3
forall a. Bounded a => a
maxBound :: ConCl3)) g
g of
      (Int
r, g
g') -> case Int -> ConCl3
forall a. Enum a => Int -> a
toEnum Int
r of
        ConCl3
ConR -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeR (Cl3 es
minAbs,Cl3 es
maxAbs) g
g'
        ConCl3
ConV3 -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeV3 (Cl3 es
minAbs,Cl3 es
maxAbs) g
g'
        ConCl3
ConBV -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeBV (Cl3 es
minAbs,Cl3 es
maxAbs) g
g'
        ConCl3
ConI -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeI (Cl3 es
minAbs,Cl3 es
maxAbs) g
g'
        ConCl3
ConPV -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangePV (Cl3 es
minAbs,Cl3 es
maxAbs) g
g'
        ConCl3
ConH -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeH (Cl3 es
minAbs,Cl3 es
maxAbs) g
g'
        ConCl3
ConC -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeC (Cl3 es
minAbs,Cl3 es
maxAbs) g
g'
        ConCl3
ConBPV -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeBPV (Cl3 es
minAbs,Cl3 es
maxAbs) g
g'
        ConCl3
ConODD -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeODD (Cl3 es
minAbs,Cl3 es
maxAbs) g
g'
        ConCl3
ConTPV -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeTPV (Cl3 es
minAbs,Cl3 es
maxAbs) g
g'
        ConCl3
ConAPS -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeAPS (Cl3 es
minAbs,Cl3 es
maxAbs) g
g'
        ConCl3
ConProj -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeProjector (Cl3 es
minAbs,Cl3 es
maxAbs) g
g'
        ConCl3
ConNilpotent -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeNilpotent (Cl3 es
minAbs,Cl3 es
maxAbs) g
g'
        ConCl3
ConUnitary -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeUnitary (Cl3 es
minAbs,Cl3 es
maxAbs) g
g'

  random :: forall g. RandomGen g => g -> (Cl3 es, g)
random = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
forall g. RandomGen g => (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
randomR (Cl3 es
0,Cl3 es
1)



-- | 'ConCl3' Bounded Enum Algebraic Data Type of constructors of Cl3
data ConCl3 = ConR
            | ConV3
            | ConBV
            | ConI
            | ConPV
            | ConH
            | ConC
            | ConBPV
            | ConODD
            | ConTPV
            | ConAPS
            | ConProj
            | ConNilpotent
            | ConUnitary
  deriving (ConCl3
ConCl3 -> ConCl3 -> Bounded ConCl3
forall a. a -> a -> Bounded a
$cminBound :: ConCl3
minBound :: ConCl3
$cmaxBound :: ConCl3
maxBound :: ConCl3
Bounded, Int -> ConCl3
ConCl3 -> Int
ConCl3 -> [ConCl3]
ConCl3 -> ConCl3
ConCl3 -> ConCl3 -> [ConCl3]
ConCl3 -> ConCl3 -> ConCl3 -> [ConCl3]
(ConCl3 -> ConCl3)
-> (ConCl3 -> ConCl3)
-> (Int -> ConCl3)
-> (ConCl3 -> Int)
-> (ConCl3 -> [ConCl3])
-> (ConCl3 -> ConCl3 -> [ConCl3])
-> (ConCl3 -> ConCl3 -> [ConCl3])
-> (ConCl3 -> ConCl3 -> ConCl3 -> [ConCl3])
-> Enum ConCl3
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: ConCl3 -> ConCl3
succ :: ConCl3 -> ConCl3
$cpred :: ConCl3 -> ConCl3
pred :: ConCl3 -> ConCl3
$ctoEnum :: Int -> ConCl3
toEnum :: Int -> ConCl3
$cfromEnum :: ConCl3 -> Int
fromEnum :: ConCl3 -> Int
$cenumFrom :: ConCl3 -> [ConCl3]
enumFrom :: ConCl3 -> [ConCl3]
$cenumFromThen :: ConCl3 -> ConCl3 -> [ConCl3]
enumFromThen :: ConCl3 -> ConCl3 -> [ConCl3]
$cenumFromTo :: ConCl3 -> ConCl3 -> [ConCl3]
enumFromTo :: ConCl3 -> ConCl3 -> [ConCl3]
$cenumFromThenTo :: ConCl3 -> ConCl3 -> ConCl3 -> [ConCl3]
enumFromThenTo :: ConCl3 -> ConCl3 -> ConCl3 -> [ConCl3]
Enum)




-- | 'randR' random Real Scalar (Grade 0) with random magnitude and random sign
randR :: (PositF es, RandomGen g) => g -> (Cl3 es, g)
randR :: forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randR = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeR (Cl3 es
0,Cl3 es
1)


-- | 'rangeR' random Real Scalar (Grade 0) with random magnitude within a range and a random sign
rangeR :: (PositF es, RandomGen g) => (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeR :: forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeR = (Posit es -> Cl3 es) -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Posit es -> Cl3 es) -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
scalarHelper Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
R


-- | 'randV3' random Vector (Grade 1) with random magnitude and random direction
-- the direction is using spherical coordinates
randV3 :: (PositF es, RandomGen g) => g -> (Cl3 es, g)
randV3 :: forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randV3 = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeV3 (Cl3 es
0,Cl3 es
1)


-- | 'rangeV3' random Vector (Grade 1) with random magnitude within a range and a random direction
rangeV3 :: (PositF es, RandomGen g) => (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeV3 :: forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeV3 = (Posit es -> Posit es -> Posit es -> Cl3 es)
-> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Posit es -> Posit es -> Posit es -> Cl3 es)
-> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
vectorHelper Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3


-- | 'randBV' random Bivector (Grade 2) with random magnitude and random direction
-- the direction is using spherical coordinates
randBV :: (PositF es, RandomGen g) => g -> (Cl3 es, g)
randBV :: forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randBV = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeBV (Cl3 es
0,Cl3 es
1)


-- | 'rangeBV' random Bivector (Grade 2) with random magnitude in a range and a random direction
rangeBV :: (PositF es, RandomGen g) => (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeBV :: forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeBV = (Posit es -> Posit es -> Posit es -> Cl3 es)
-> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Posit es -> Posit es -> Posit es -> Cl3 es)
-> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
vectorHelper Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
BV


-- | 'randI' random Imaginary Scalar (Grade 3) with random magnitude and random sign
randI :: (PositF es, RandomGen g) => g -> (Cl3 es, g)
randI :: forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randI = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeI (Cl3 es
0,Cl3 es
1)


-- | 'rangeI' random Imaginary Scalar (Grade 3) with random magnitude within a range and random sign
rangeI :: (PositF es, RandomGen g) => (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeI :: forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeI = (Posit es -> Cl3 es) -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Posit es -> Cl3 es) -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
scalarHelper Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Cl3 es
I


-- | 'randPV' random Paravector made from random Grade 0 and Grade 1 elements
randPV :: (PositF es, RandomGen g) => g -> (Cl3 es, g)
randPV :: forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randPV = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangePV (Cl3 es
0,Cl3 es
1)


-- | 'rangePV' random Paravector made from random Grade 0 and Grade 1 elements within a range
rangePV :: (PositF es, RandomGen g) => (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangePV :: forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangePV (Cl3 es
lo, Cl3 es
hi) g
g =
  let (R Posit es
scale, g
g') = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeR (Cl3 es
lo, Cl3 es
hi) g
g
      (R Posit es
a0, g
g'') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randR g
g'
      (V3 Posit es
a1 Posit es
a2 Posit es
a3, g
g''') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randV3 g
g''
      sumsqs :: Posit es
sumsqs = Posit es
a1Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      x :: Posit es
x = Posit es -> Posit es
forall a. Num a => a -> a
abs Posit es
a0 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
sqrt Posit es
sumsqs
      invMag :: Posit es
invMag = Posit es -> Posit es
forall a. Fractional a => a -> a
recip(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
sumsqs Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
x Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
x
      mag :: Posit es
mag = Posit es
scale Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
invMag
  in (Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a0) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a1) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a2) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a3), g
g''')


-- | 'randH' random Quaternion made from random Grade 0 and Grade 2 elements
randH :: (PositF es, RandomGen g) => g -> (Cl3 es, g)
randH :: forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randH = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeH (Cl3 es
0,Cl3 es
1)


-- | 'rangeH' random Quaternion made from random Grade 0 and Grade 2 elements within a range
rangeH :: (PositF es, RandomGen g) => (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeH :: forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeH (Cl3 es
lo, Cl3 es
hi) g
g =
  let (R Posit es
scale, g
g') = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeR (Cl3 es
lo, Cl3 es
hi) g
g
      (R Posit es
a0, g
g'') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randR g
g'
      (BV Posit es
a23 Posit es
a31 Posit es
a12, g
g''') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randBV g
g''
      invMag :: Posit es
invMag = Posit es -> Posit es
forall a. Fractional a => a -> a
recip(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      mag :: Posit es
mag = Posit es
scale Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
invMag
  in (Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
H (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a0) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a23) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a31) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a12), g
g''')


-- | 'randC' random combination of Grade 0 and Grade 3
randC :: (PositF es, RandomGen g) => g -> (Cl3 es, g)
randC :: forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randC = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeC (Cl3 es
0,Cl3 es
1)


-- | 'rangeC' random combination of Grade 0 and Grade 3 within a range
rangeC :: (PositF es, RandomGen g) => (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeC :: forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeC (Cl3 es
lo, Cl3 es
hi) g
g =
  let (R Posit es
scale, g
g') = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeR (Cl3 es
lo, Cl3 es
hi) g
g
      (Posit es
phi, g
g'') = (Posit es, Posit es) -> g -> (Posit es, g)
forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
forall g. RandomGen g => (Posit es, Posit es) -> g -> (Posit es, g)
randomR (Posit es
0, Posit es
2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
forall a. Floating a => a
pi) g
g'
  in (Posit es -> Posit es -> Cl3 es
forall (es :: ES). PositC es => Posit es -> Posit es -> Cl3 es
C (Posit es
scale Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
cos Posit es
phi) (Posit es
scale Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
sin Posit es
phi), g
g'')


-- | 'randBPV' random combination of Grade 1 and Grade 2
randBPV :: (PositF es, RandomGen g) => g -> (Cl3 es, g)
randBPV :: forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randBPV = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeBPV (Cl3 es
0,Cl3 es
1)


-- | 'rangeBPV' random combination of Grade 1 and Grade 2 within a range
rangeBPV :: (PositF es, RandomGen g) => (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeBPV :: forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeBPV (Cl3 es
lo, Cl3 es
hi) g
g =
  let (R Posit es
scale, g
g') = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeR (Cl3 es
lo, Cl3 es
hi) g
g
      (V3 Posit es
a1 Posit es
a2 Posit es
a3, g
g'') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randV3 g
g'
      (BV Posit es
a23 Posit es
a31 Posit es
a12, g
g''') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randBV g
g''
      x :: Posit es
x = Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a23)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a23)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a31)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      invMag :: Posit es
invMag = Posit es -> Posit es
forall a. Fractional a => a -> a
recip(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a1Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
x Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
x
      mag :: Posit es
mag = Posit es
scale Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
invMag
  in (Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a1) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a2) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a3) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a23) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a31) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a12), g
g''')


-- | 'randODD' random combination of Grade 1 and Grade 3
randODD :: (PositF es, RandomGen g) => g -> (Cl3 es, g)
randODD :: forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randODD = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeODD (Cl3 es
0,Cl3 es
1)


-- | 'rangeODD' random combination of Grade 1 and Grade 3 within a range
rangeODD :: (PositF es, RandomGen g) => (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeODD :: forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeODD (Cl3 es
lo, Cl3 es
hi) g
g =
  let (R Posit es
scale, g
g') = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeR (Cl3 es
lo, Cl3 es
hi) g
g
      (V3 Posit es
a1 Posit es
a2 Posit es
a3, g
g'') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randV3 g
g'
      (I Posit es
a123, g
g''') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randI g
g''
      invMag :: Posit es
invMag = Posit es -> Posit es
forall a. Fractional a => a -> a
recip(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a1Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      mag :: Posit es
mag = Posit es
scale Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
invMag
  in (Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
ODD (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a1) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a2) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a3) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a123), g
g''')


-- | 'randTPV' random combination of Grade 2 and Grade 3
randTPV :: (PositF es, RandomGen g) => g -> (Cl3 es, g)
randTPV :: forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randTPV = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeTPV (Cl3 es
0,Cl3 es
1)


-- | 'rangeTPV' random combination of Grade 2 and Grade 3 within a range
rangeTPV :: (PositF es, RandomGen g) => (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeTPV :: forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeTPV (Cl3 es
lo, Cl3 es
hi) g
g =
  let (R Posit es
scale, g
g') = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeR (Cl3 es
lo, Cl3 es
hi) g
g
      (BV Posit es
a23 Posit es
a31 Posit es
a12, g
g'') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randBV g
g'
      (I Posit es
a123, g
g''') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randI g
g''
      sumsqs :: Posit es
sumsqs = Posit es
a23Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      x :: Posit es
x = Posit es -> Posit es
forall a. Num a => a -> a
abs Posit es
a123 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
sqrt Posit es
sumsqs
      invMag :: Posit es
invMag = Posit es -> Posit es
forall a. Fractional a => a -> a
recip(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
sumsqs Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
x Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
x
      mag :: Posit es
mag = Posit es
scale Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
invMag
  in (Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
TPV (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a23) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a31) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a12) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a123), g
g''')


-- | 'randAPS' random combination of all 4 grades
randAPS :: (PositF es, RandomGen g) => g -> (Cl3 es, g)
randAPS :: forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randAPS = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeAPS (Cl3 es
0,Cl3 es
1)


-- | 'rangeAPS' random combination of all 4 grades within a range
rangeAPS :: (PositF es, RandomGen g) => (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeAPS :: forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeAPS (Cl3 es
lo, Cl3 es
hi) g
g =
  let (R Posit es
scale, g
g') = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeR (Cl3 es
lo, Cl3 es
hi) g
g
      (C Posit es
a0 Posit es
a123, g
g'') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randC g
g'
      (V3 Posit es
a1 Posit es
a2 Posit es
a3, g
g''') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randV3 g
g''
      (BV Posit es
a23 Posit es
a31 Posit es
a12, g
g'v) = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randBV g
g'''
      x :: Posit es
x = Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a1 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a23)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a31)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
a0Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a3 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a12)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a12 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a31)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
a3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a23 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a12)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ (Posit es
a1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a31 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
- Posit es
a2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a23)Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      invMag :: Posit es
invMag = Posit es -> Posit es
forall a. Fractional a => a -> a
recip(Posit es -> Posit es)
-> (Posit es -> Posit es) -> Posit es -> Posit es
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es -> Posit es) -> Posit es -> Posit es
forall a b. (a -> b) -> a -> b
$ Posit es
a0Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a1Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a2Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a3Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a23Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a31Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a12Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
a123Posit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
x Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
+ Posit es
x
      mag :: Posit es
mag = Posit es
scale Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
invMag
  in (Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
APS (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a0) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a1) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a2) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a3) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a23) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a31) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a12) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a123), g
g'v)


-------------------------------------------------------------------
-- Additional Random generators
-------------------------------------------------------------------
-- | 'randUnitV3' a unit vector with a random direction
randUnitV3 :: (PositF es, RandomGen g) => g -> (Cl3 es, g)
randUnitV3 :: forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randUnitV3 g
g =
  let (Posit es
theta, g
g') = (Posit es, Posit es) -> g -> (Posit es, g)
forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
forall g. RandomGen g => (Posit es, Posit es) -> g -> (Posit es, g)
randomR (Posit es
0,Posit es
2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
forall a. Floating a => a
pi) g
g
      (Posit es
u, g
g'') = (Posit es, Posit es) -> g -> (Posit es, g)
forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
forall g. RandomGen g => (Posit es, Posit es) -> g -> (Posit es, g)
randomR (-Posit es
1,Posit es
1) g
g'
      semicircle :: Posit es
semicircle = Posit es -> Posit es
forall a. Floating a => a -> a
sqrt (Posit es
1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
-Posit es
uPosit es -> Integer -> Posit es
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)
  in (Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Cl3 es
V3 (Posit es
semicircle Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
cos Posit es
theta) (Posit es
semicircle Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es -> Posit es
forall a. Floating a => a -> a
sin Posit es
theta) Posit es
u, g
g'')


-- | 'randProjector' a projector with a random direction
randProjector :: (PositF es, RandomGen g) => g -> (Cl3 es, g)
randProjector :: forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randProjector g
g =
  let (V3 Posit es
a1 Posit es
a2 Posit es
a3, g
g') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randUnitV3 g
g
  in (Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV Posit es
0.5 (Posit es
0.5 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a1) (Posit es
0.5 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a2) (Posit es
0.5 Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a3), g
g')


-- | 'rangeProjector' a projector with a range of random magnitudes and directions
rangeProjector :: (PositF es, RandomGen g) => (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeProjector :: forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeProjector (Cl3 es
lo, Cl3 es
hi) g
g =
  let (R Posit es
mag, g
g') = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeR (Cl3 es
lo, Cl3 es
hi) g
g
      (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3, g
g'') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randProjector g
g'
  in (Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
forall (es :: ES).
PositC es =>
Posit es -> Posit es -> Posit es -> Posit es -> Cl3 es
PV (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a0) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a1) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a2) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a3), g
g'')


-- | 'randNilpotent' a nilpotent element with a random orientation
randNilpotent :: (PositF es, RandomGen g) => g -> (Cl3 es, g)
randNilpotent :: forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randNilpotent g
g =
  let (PV Posit es
a0 Posit es
a1 Posit es
a2 Posit es
a3, g
g') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randProjector g
g
      (V3 Posit es
b1 Posit es
b2 Posit es
b3, g
g'') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randUnitV3 g
g'
      c1 :: Posit es
c1 = Posit es -> Posit es -> Posit es -> Posit es -> Posit es
forall a. FusedOps a => a -> a -> a -> a -> a
fmms Posit es
a2 Posit es
b3 Posit es
a3 Posit es
b2 -- a2*b3 - a3*b2
      c2 :: Posit es
c2 = Posit es -> Posit es -> Posit es -> Posit es -> Posit es
forall a. FusedOps a => a -> a -> a -> a -> a
fmms Posit es
a3 Posit es
b1 Posit es
a1 Posit es
b3 -- a3*b1 - a1*b3
      c3 :: Posit es
c3 = Posit es -> Posit es -> Posit es -> Posit es -> Posit es
forall a. FusedOps a => a -> a -> a -> a -> a
fmms Posit es
a1 Posit es
b2 Posit es
a2 Posit es
b1 -- a1*b2 - a2*b1 -- (V3 c1 c2 c3) vector normal to the projector: mIx.toBV $ toV3 p * v
      mag :: Posit es
mag = Posit es -> Posit es -> Posit es -> Posit es
forall p. AltFloating p => p -> p -> p -> p
hypot3 Posit es
c1 Posit es
c2 Posit es
c3 -- sqrt $ c1^2 + c2^2 + c3^2
      d1 :: Posit es
d1 = Posit es
c1 Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/ Posit es
mag
      d2 :: Posit es
d2 = Posit es
c2 Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/ Posit es
mag
      d3 :: Posit es
d3 = Posit es
c3 Posit es -> Posit es -> Posit es
forall a. Fractional a => a -> a -> a
/ Posit es
mag  -- (V3 d1 d2 d3) unit vector normal to the projector
  in (Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es
d1Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a0) (Posit es
d2Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a0) (Posit es
d3Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
*Posit es
a0) (Posit es -> Posit es -> Posit es -> Posit es -> Posit es
forall a. FusedOps a => a -> a -> a -> a -> a
fmms Posit es
d2 Posit es
a3 Posit es
d3 Posit es
a2) (Posit es -> Posit es -> Posit es -> Posit es -> Posit es
forall a. FusedOps a => a -> a -> a -> a -> a
fmms Posit es
d3 Posit es
a1 Posit es
d1 Posit es
a3) (Posit es -> Posit es -> Posit es -> Posit es -> Posit es
forall a. FusedOps a => a -> a -> a -> a -> a
fmms Posit es
d1 Posit es
a2 Posit es
d2 Posit es
a1), g
g'')  -- (d2*a3 - d3*a2) (d3*a1 - d1*a3) (d1*a2 - d2*a1)


-- | 'rangeNilpotent' a nilpotent with a range of random magnitudes and orientations
rangeNilpotent :: (PositF es, RandomGen g) => (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeNilpotent :: forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeNilpotent (Cl3 es
lo, Cl3 es
hi)  g
g =
  let (R Posit es
mag, g
g') = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeR (Cl3 es
lo, Cl3 es
hi) g
g
      (BPV Posit es
a1 Posit es
a2 Posit es
a3 Posit es
a23 Posit es
a31 Posit es
a12, g
g'') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randNilpotent g
g'
  in (Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
forall (es :: ES).
PositC es =>
Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Posit es
-> Cl3 es
BPV (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a1) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a2) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a3) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a23) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a31) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
a12), g
g'')


-- | 'randUnitary' a unitary element with a random orientation
randUnitary :: (PositF es, RandomGen g) => g -> (Cl3 es, g)
randUnitary :: forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randUnitary g
g =
  let (Cl3 es
tpv,g
g') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randTPV g
g
  in (Cl3 es -> Cl3 es
forall a. Floating a => a -> a
exp Cl3 es
tpv,g
g')


-- | 'rangeUnitary' a unitary element with a range of random magnitudes and orientations, the exponential of a triparavector
rangeUnitary :: (PositF es, RandomGen g) => (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeUnitary :: forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeUnitary (Cl3 es
lo, Cl3 es
hi) g
g =
  let (Cl3 es
tpv, g
g') = (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
rangeTPV (Cl3 es
lo, Cl3 es
hi) g
g
  in (Cl3 es -> Cl3 es
forall a. Floating a => a -> a
exp Cl3 es
tpv, g
g')


-------------------------------------------------------------------
-- helper functions
-------------------------------------------------------------------
--
magHelper :: (PositF es, RandomGen g) => (Cl3 es, Cl3 es) -> g -> (Posit es, g)
magHelper :: forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Posit es, g)
magHelper (Cl3 es
lo, Cl3 es
hi) g
g =
  let R Posit es
lo' = Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs Cl3 es
lo
      R Posit es
hi' = Cl3 es -> Cl3 es
forall a. Num a => a -> a
abs Cl3 es
hi
  in (Posit es, Posit es) -> g -> (Posit es, g)
forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
forall g. RandomGen g => (Posit es, Posit es) -> g -> (Posit es, g)
randomR (Posit es
lo', Posit es
hi') g
g
--
--
scalarHelper :: (PositF es, RandomGen g) => (Posit es -> Cl3 es) -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
scalarHelper :: forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Posit es -> Cl3 es) -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
scalarHelper Posit es -> Cl3 es
con (Cl3 es, Cl3 es)
rng g
g =
  let (Posit es
mag, g
g') = (Cl3 es, Cl3 es) -> g -> (Posit es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Posit es, g)
magHelper (Cl3 es, Cl3 es)
rng g
g
      (Bool
sign, g
g'') = g -> (Bool, g)
forall a g. (Random a, RandomGen g) => g -> (a, g)
forall g. RandomGen g => g -> (Bool, g)
random g
g'
  in if Bool
sign
     then (Posit es -> Cl3 es
con Posit es
mag, g
g'')
     else (Posit es -> Cl3 es
con (Posit es -> Posit es
forall a. Num a => a -> a
negate Posit es
mag), g
g'')
--

vectorHelper :: (PositF es, RandomGen g) => (Posit es -> Posit es -> Posit es -> Cl3 es) -> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
vectorHelper :: forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Posit es -> Posit es -> Posit es -> Cl3 es)
-> (Cl3 es, Cl3 es) -> g -> (Cl3 es, g)
vectorHelper Posit es -> Posit es -> Posit es -> Cl3 es
con (Cl3 es, Cl3 es)
rng g
g =
  let (Posit es
mag, g
g') = (Cl3 es, Cl3 es) -> g -> (Posit es, g)
forall (es :: ES) g.
(PositF es, RandomGen g) =>
(Cl3 es, Cl3 es) -> g -> (Posit es, g)
magHelper (Cl3 es, Cl3 es)
rng g
g
      (V3 Posit es
x Posit es
y Posit es
z, g
g'') = g -> (Cl3 es, g)
forall (es :: ES) g. (PositF es, RandomGen g) => g -> (Cl3 es, g)
randUnitV3 g
g'
  in (Posit es -> Posit es -> Posit es -> Cl3 es
con (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
x) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
y) (Posit es
mag Posit es -> Posit es -> Posit es
forall a. Num a => a -> a -> a
* Posit es
z), g
g'')
--

#endif

-- End of File