<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:新細明體
}
--></style></head>
<body class='hmmessage'><div dir='ltr'><font size="3" style="font-size:12pt;" color="#000000">Hi &nbsp;Sergei ,&nbsp;</font><div><font size="3" style="font-size:12pt;" color="#000000"><br></font></div><div><font size="3" style="font-size:12pt;" color="#000000">i &nbsp; find this &nbsp;method &nbsp;from book &nbsp;polynomials &nbsp;completion &nbsp;book, mention &nbsp;fst and &nbsp;snd &nbsp;for &nbsp;And &nbsp;and &nbsp;Or</font></div><div><div style="background-color: rgb(255, 255, 255);"><p class="MsoNormal" style="color: rgb(34, 34, 34); font-family: 'Times New Roman', serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;"><br></p><p class="MsoNormal" style="color: rgb(34, 34, 34); font-family: 'Times New Roman', serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;">then edit code of all combinations of tree with &nbsp;fst and snd,&nbsp;</p><p class="MsoNormal" style="color: rgb(34, 34, 34); font-family: 'Times New Roman', serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;">then &nbsp;it can generate all valid relations</p><p class="MsoNormal" style="color: rgb(34, 34, 34); font-family: 'Times New Roman', serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;"><br></p><p class="MsoNormal" style="color: rgb(34, 34, 34); font-family: 'Times New Roman', serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;">for transitive axiom</p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eval (Mode (Mode (Meaf 1.0) And (Meaf 2.0)) Or (Mode (Meaf 2.0) And (Meaf 3.0))) &gt; eval (Mode (Meaf 1.0) And (Meaf 3.0))</font></p><div><font color="#222222" face="Times New Roman, serif"><br></font></div><p class="MsoNormal" style="color: rgb(34, 34, 34); font-family: 'Times New Roman', serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;">then &nbsp;i guess the criteria for valid axiom may be&nbsp;<span style="font-size: 12pt;">eval x &gt; eval y</span></p><p class="MsoNormal" style="color: rgb(34, 34, 34); font-family: 'Times New Roman', serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;"><span style="font-size: 12pt;"><br></span></p><p class="MsoNormal" style="color: rgb(34, 34, 34); font-family: 'Times New Roman', serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;"><span style="font-size: 12pt;">i believe the book so i guess this will work well, if this is wrong, please verify it.</span></p><p class="MsoNormal" style="color: rgb(34, 34, 34); font-family: 'Times New Roman', serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;"><span style="font-size: 12pt;"><br></span></p><p class="MsoNormal" style="color: rgb(34, 34, 34); font-family: 'Times New Roman', serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;"><span style="font-size: 12pt;">now, you know that how i can try all combinations of equivalence relations by replacing transitive with new relation.</span></p><p class="MsoNormal" style="color: rgb(34, 34, 34); font-family: 'Times New Roman', serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;"><br></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">:l trees.hs</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">let allparams = replicateM 3 [1.0, 2.0]</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">let alltrees = [getAllTrees c | x &lt;- allparams, c &lt;- [x]]</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eval(alltrees!!1!!1) == eval(alltrees!!1!!1)</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">let alltrees1 = forM_ [0..(sizeoflist alltrees)] $ \i -&gt; forM_ [0..(sizeoflist (alltrees!!i))] $ \j -&gt; [(alltrees!!i!!j, eval(alltrees!!i!!j)== eval(alltrees!!i!!j))]</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">--let bb = filter (\n -&gt; if n != () then snd n == True) alltrees1</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">allexprs :: [ Mree Double ]</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">let allexprs = concat alltrees &nbsp; -- a list of all the Mrees in alters</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">let alltrees2 = [ ((x,y), eval x &gt; eval y) | x &lt;- allexprs, y &lt;- allexprs]</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">let bb = [ (x,y) | ((x,y), True) &lt;- alltrees2 ]</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eval (Mode (Mode (Meaf 1.0) And (Meaf 2.0)) Or (Mode (Meaf 2.0) And (Meaf 3.0))) &gt; eval (Mode (Meaf 1.0) And (Meaf 3.0))</font></p><p class="MsoNormal" style="color: rgb(34, 34, 34); font-family: 'Times New Roman', serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;"><br></p><p class="MsoNormal" style="color: rgb(34, 34, 34); font-family: 'Times New Roman', serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;"><br></p><p class="MsoNormal" style="color: rgb(34, 34, 34); font-family: 'Times New Roman', serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;">trees.hs</p><p class="MsoNormal" style="color: rgb(34, 34, 34); font-family: 'Times New Roman', serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;"><br></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">import Data.List</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">import Control.Monad</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">import Math.Combinat</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">import System.IO</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">data Operation</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; = And</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; | Or</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; | MA</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; | MB</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; | Impl</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; &nbsp; deriving Show</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">data Mree x</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp;= Meaf x</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp;| Mode (Mree x) Operation (Mree x)</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; &nbsp;deriving Show</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">splits :: [a] -&gt; [([a], [a])]</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">splits xs = zip (inits xs) (tails xs)</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">getAllTrees :: [a] -&gt; [Mree a]</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">getAllTrees [] = []</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">getAllTrees [x] = return $ Meaf x</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">getAllTrees xs = do</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; (left, right) &lt;- splits xs</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; guard $ not (null left) &amp;&amp; not (null right)</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; leftT &lt;- getAllTrees left</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; rightT &lt;- getAllTrees right</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; op &lt;- [And, Or]</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; return $ Mode leftT op rightT</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eval :: Mree Double -&gt; Double</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eval (Meaf x) = x</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eval (Mode l And r) = eval l</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eval (Mode l Or r) = eval r</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">peval :: Mree Double -&gt; String</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">peval (Meaf x) = show x :: String</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">peval (Mode l And r) = "(" ++ peval l ++ "^" ++ peval r ++ ")"</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">peval (Mode l Or r) = "(" ++ peval l ++ "V" ++ peval r ++ ")"</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">sizeoflist :: [a] -&gt; Int</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">sizeoflist = length</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval1 :: Mree Float -&gt; Float</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval1 (Meaf x) = x</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval1 (Mode l And r) = eeval1 l * eeval1 r</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval1 (Mode l Or r) = eeval1 l + eeval1 r</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval1 (Mode l MA r) = eeval1 l + eeval1 r</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval1 (Mode l MB r) = eeval1 l + eeval1 r</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval2 :: Mree Float -&gt; Float</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval2 (Meaf x) = x</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval2 (Mode l And r) = eeval2 l * eeval2 r</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval2 (Mode l Or r) = eeval2 l + eeval2 r</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval2 (Mode l MA r) = eeval2 l + eeval2 r</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval2 (Mode l MB r) = eeval2 l * eeval2 r</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval3 :: Mree Float -&gt; Float</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval3 (Meaf x) = x</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval3 (Mode l And r) = eeval3 l * eeval3 r</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval3 (Mode l Or r) = eeval3 l + eeval3 r</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval3 (Mode l MA r) = eeval3 l * eeval3 r</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval3 (Mode l MB r) = eeval3 l + eeval3 r</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval4 :: Mree Float -&gt; Float</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval4 (Meaf x) = x</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval4 (Mode l And r) = eeval4 l * eeval4 r</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval4 (Mode l Or r) = eeval4 l + eeval4 r</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval4 (Mode l MA r) = eeval4 l * eeval4 r</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">eeval4 (Mode l MB r) = eeval4 l * eeval4 r</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">mulVV :: Num a =&gt; [a] -&gt; [a] -&gt; a</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">mulVV u v = sum $ zipWith (*) u v</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">mulMV :: Num a =&gt; [[a]] -&gt; [a] -&gt; [a]</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">mulMV m v = map (mulVV v) m</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">mulMM :: Num a =&gt; [[a]] -&gt; [[a]] -&gt; [[a]]</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">mulMM m n = transpose $ map (mulMV m) $ transpose $ n</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">msize :: [[Float]] -&gt; Int</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">msize = length</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">mapMatrix :: (Float -&gt; Float) -&gt; [[Float]] -&gt; [[Float]]</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">mapMatrix f = map (map f)</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">coords :: [[Float]] -&gt; [[(Int, Int)]]</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">coords = zipWith (map . (,)) [0..] . map (zipWith const [0..])</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">delmatrix :: Int -&gt; Int -&gt; [[Float]] -&gt; [[Float]]</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">delmatrix i j = dellist i . map (dellist j)</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; where</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; &nbsp; dellist i xs = take i xs ++ drop (i + 1) xs</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">determinant :: [[Float]] -&gt; Float</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">determinant m</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; &nbsp; | msize m == 1 = head (head m)</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; &nbsp; | otherwise &nbsp; &nbsp;= sum $ zipWith addition [0..] m</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; where</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; &nbsp; addition i (x:_) = &nbsp;x * cofactor i 0 m</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">cofactor :: Int -&gt; Int -&gt; [[Float]] -&gt; Float</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">cofactor i j m = ((-1.0) ** fromIntegral (i + j)) * determinant (delmatrix i j m)</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">cofactorM :: [[Float]] -&gt; [[Float]]</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">cofactorM m = map (map (\(i,j) -&gt; cofactor j i m)) $ coords m</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif"><br></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">inversem :: [[Float]] -&gt; [[Float]]</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">inversem m = mapMatrix (* recip det) $ cofactorM m</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; where</font></p><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><font color="#222222" face="Times New Roman, serif">&nbsp; &nbsp; det = determinant m</font></p><p class="MsoNormal" style="color: rgb(34, 34, 34); font-family: 'Times New Roman', serif; font-size: 12pt; margin: 0cm 0cm 0.0001pt;"><br></p></div></div><div><br><br><div>Regards,</div><div><br></div><div>Martin&nbsp;</div><br><br><div>&gt; Subject: Re: [Agda] how to use monoid solver and how to derive a concept monoid if assume we do not know monoid<br>&gt; From: mechvel@botik.ru<br>&gt; To: tesleft@hotmail.com<br>&gt; CC: agda@lists.chalmers.se<br>&gt; Date: Tue, 15 Dec 2015 00:29:32 +0400<br>&gt; <br>&gt; On Mon, 2015-12-14 at 19:21 +0800, Mandy Martino wrote:<br>&gt; <br>&gt; &gt; Hi ,<br>&gt; &gt; i find many places  define  identity, symmetric and  transitive,   how<br>&gt; &gt; to  use  monoid  solve and  which  can  it  solve?<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; i would like  to define a new  set  of  equivalence relations,  is  <br>&gt; &gt; there  a  light  weight  version of  monoid?<br>&gt; <br>&gt; See in Wikipedia what is a monoid.<br>&gt; Monoid  in Standard library is adequate, it cannot be any more<br>&gt; "light weight".<br>&gt; <br>&gt; Monid has the axioms of<br>&gt; (1) associativity for _∙_,   (2) identity (ε).<br>&gt; <br>&gt; <br>&gt; &gt; how to use  monoid  solve and  which  can  it  solve?<br>&gt; <br>&gt; Earlier I tried  SemiringSolver  for  Nat.<br>&gt; And I guess that  MonoidSolver  uses a similar principle of reduction to<br>&gt; a normal form<br>&gt; (let people correct me, if I mistake).<br>&gt; <br>&gt; For monoid:<br>&gt; having expressions        e1  and  e2,<br>&gt; a proof for the equality<br>&gt;                           e1 ≈ e2    (E)<br>&gt; <br>&gt; can be searched by applying the  `solve'  function.<br>&gt; `solve' brings  e1  and  e2  to their certain normal forms  e1' and e2'.<br>&gt; This is done by moving parentheses (by using the associativity law),<br>&gt; and canceling  ε  by using the identity law.<br>&gt; Then, if  e1'  and  e2'  coincide<br>&gt; (are equal by  Equivalence.refl  contained in the setoid),<br>&gt; then the result of `solve'  is a proof for  (E).<br>&gt; Otherwise, some other proof may exist or not.<br>&gt; <br>&gt; In various instances of Monoid there may exist many equations or<br>&gt; statements which can be proved but are not proved by  MonoidSolver.<br>&gt; <br>&gt; Example of a proof:<br>&gt; I expect that `solve' will bring  e1 =  (x ∙ (e ∙ x)) ∙ (y ∙ e)<br>&gt; and                               e2 =  (e ∙ (x ∙ x)) ∙ y<br>&gt; <br>&gt; by using the laws of  associativity and identity to the same expression<br>&gt; <br>&gt;                              x ∙ (x ∙ y).<br>&gt; And this proves the equality<br>&gt; <br>&gt;                 (x ∙ (e ∙ x)) ∙ (y ∙ e)  ≈  (e ∙ (x ∙ x)) ∙ y<br>&gt; <br>&gt; for any Monoid.<br>&gt; <br>&gt; I do not know how precisely MonoidSolver is used.<br>&gt; But I have an example of using  SemiringSolver,  and I expect that<br>&gt; MonoidSolver has a similar usage.<br>&gt; <br>&gt; For  Nat (n : Nat) :<br>&gt; <br>&gt;   open import Data.Nat.Properties using (module SemiringSolver)<br>&gt; <br>&gt;   open SemiringSolver using (solve; _:=_; con; _:+_; _:*_)<br>&gt; <br>&gt;   e :  suc (suc (n + n)) ≡ 2 * suc n<br>&gt;   e =  solve 1 (\n →  con 1 :+ (con 1 :+ (n :+ n))  :=<br>&gt;                       (con 2) :* (con 1 :+ n)<br>&gt;                )<br>&gt;                PE.refl n<br>&gt; <br>&gt; I guess that `solve' does the following. It has<br>&gt; <br>&gt;   e1 =  1 + (1 + (n + n))<br>&gt;   e2 =  (1 + (1 + 0)) * (1 + n),<br>&gt; <br>&gt; and it brings both terms to this normal form:<br>&gt;                                               1 + (1 + (n + n)).<br>&gt; <br>&gt; It is done only by using the axioms of an arbitrary (commutative) ring.<br>&gt; <br>&gt; I have arranged this by looking into the source of Standard library,<br>&gt; where it uses SemiringSolver, I just mimic the usage.<br>&gt; <br>&gt; I guess that under this `solve',<br>&gt; `con' is a tag for a constant,  `:' is a tag for an operator,<br>&gt; all other items (in this case it is `n') are variables in a term.<br>&gt; <br>&gt; I expect that  MonoidSolver  has a similar usage.<br>&gt; <br>&gt; <br>&gt; &gt; assume we do not know monoid,  how to build  a concept such as  <br>&gt; &gt; monoid  based  on  custom  equivalence  relations?<br>&gt; <br>&gt; I do not know what is a  custom equivalence relation.<br>&gt; So I cannot tell.<br>&gt; <br>&gt; Regards,<br>&gt; <br>&gt; ------<br>&gt; Sergei<br>&gt; <br>&gt; <br>&gt; <br>&gt; <br>&gt; <br></div></div>                                               </div></body>
</html>