Merge branch 'master' of https://github.com/dopefishh/tt2015
[tt2015.git] / a3 / code / Gast / ESMSpec.icl
diff --git a/a3/code/Gast/ESMSpec.icl b/a3/code/Gast/ESMSpec.icl
deleted file mode 100644 (file)
index 3e1b618..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-implementation module ESMSpec\r
-\r
-import StdBool, StdFunc, StdList, StdListExtensions, StdMaybe, StdMisc, StdString, StdTuple\r
-import GenPrint, GenEq\r
-import gast\r
-\r
-tupToSpec :: (state input -> [([output],state)]) -> Spec state input output // conversion for old specificaions\r
-tupToSpec fun = \s i = [Pt o t \\ (o,t) <- fun s i]\r
-\r
-enumerate :: [a] | ggen{|*|} a\r
-enumerate = generateAll aStream\r
-\r
-possibleInputs :: (ESM s i o) [s] -> [i] | gEq{|*|} s & ggen{|*|}, gEq{|*|} i\r
-possibleInputs esm states = gremoveDup (take 100 [i \\ s<-states, i<-enumerate | not (isEmpty (esm.d_F s i))])\r
-\r
-nextStates :: (ESM s i o) i ![s] -> [s] | gEq{|*|} s\r
-nextStates esm i states\r
-       = gremoveDup    [ t\r
-                               \\      s <- states\r
-                               ,       target <- esm.d_F s i\r
-                               ,       t <- case target of\r
-                                                       Pt outs u = [u];\r
-                                                       Ft f = [u \\ o<-esm.out s i, u<-f o]\r
-                               ]\r
-\r
-narrowTraces :: (Traces s i o) [s] -> Traces s i o | gEq{|*|} s\r
-narrowTraces trace states = fst (pruneTraces trace states)\r
-\r
-pruneTraces :: (Traces s i o) [s] -> (Traces s i o,[s]) | gEq{|*|} s\r
-pruneTraces [] states = ([],states)\r
-pruneTraces [trans:rest] states\r
-       # (rest ,states) = pruneTraces rest states\r
-       # trans = [tr\\tr=:(s,i,o,t)<-trans|gisMember t states]\r
-       = ([trans:rest],startStates trans)\r
-\r
-addStep :: (ESM s i o) [s] i !(Traces s i o) -> Traces s i o | gEq{|*|} s\r
-addStep esm states i trace\r
-       =       narrowTraces trace states ++\r
-               [[      (s,i,o,t)\r
-                \\ s <- states\r
-                ,      target <- esm.d_F s i\r
-                , (o,t) <- case target of\r
-                                               Pt outs u = [(outs,u)];\r
-                                               Ft f = [ (o,u) \\ o<-esm.out s i, u<-f o]\r
-               ]]\r
-\r
-nodesOf :: !(KnownAutomaton s i o) -> [s] | gEq{|*|} s\r
-//nodesOf automaton                            = gremoveDup (flatten [[startnode,endnode] \\ (startnode,_,_,endnode) <- automaton.trans])\r
-nodesOf automaton                              = gremoveDup ([s \\ (s,_,_,t) <- automaton.trans]++[t \\ (s,_,_,t) <- automaton.trans])\r
-\r
-edgesFrom :: s !(KnownAutomaton s i o) -> [SeenTrans s i o] | gEq{|*|} s\r
-edgesFrom startnode automaton  = [edge \\ edge=:(s,i,o,t) <- automaton.trans | s===startnode]\r
-\r
-edgesTo :: s !(KnownAutomaton s i o) -> [SeenTrans s i o] | gEq{|*|} s\r
-edgesTo endnode automaton              = [edge \\ edge=:(s,i,o,t) <- automaton.trans | t===endnode]\r
-\r
-startStates :: ![SeenTrans s i o] -> [s] | gEq{|*|} s\r
-startStates transitions                        = gremoveDup [ s \\ (s,i,o,t) <- transitions ]\r
-\r
-targetStates :: ![SeenTrans s i o] -> [s] | gEq{|*|} s\r
-targetStates transitions               = gremoveDup [ t \\ (s,i,o,t) <- transitions ]\r
-\r
-addTransitions :: !Int (ESM s i o) [s] [i] !(KnownAutomaton s i o) -> KnownAutomaton s i o | gEq{|*|}, render s & render, ggen{|*|}, gEq{|*|} i & gEq{|*|} o\r
-addTransitions n esm startstates is automaton\r
-       | n>0 && not (isEmpty startstates)\r
-               # newSeenTrans\r
-                       =       [       (s,i,o,t)\r
-                               \\      s <- startstates\r
-                               ,       i <- map snd (sortBy (\(a,_) (b,_).a<b) (map (\i.(render i,i)) is)) // is // sort inputs\r
-                               ,       target <- esm.d_F s i\r
-                               ,       (o,t) <- case target of\r
-                                                               Pt outs u = [(outs,u)];\r
-                                                               Ft f = [ (o,u) \\ o<-esm.out s i, u<-f o]\r
-                               ]\r
-               # newStates     = targetStates newSeenTrans\r
-               # newTrans      = [t \\ t <- newSeenTrans | not (gisMember t automaton.trans)]\r
-               # newIssues     = [(t,e) \\ t<-newTrans, e <- esm.pred t | not (isEmpty e)]\r
-               = addTransitions (n-1) esm newStates (possibleInputs esm newStates) {trans=mix automaton.trans newTrans, issues=newIssues++automaton.issues}\r
-       | otherwise             = automaton\r
-\r
-mix :: [SeenTrans s i o] [SeenTrans s i o] -> [SeenTrans s i o] | render s & render i\r
-mix known new = foldl (insertBy less) known new\r
-\r
-insertBy :: (a a->Bool) [a] a -> [a]\r
-insertBy le [] e = [e]\r
-insertBy le l=:[a:x] e\r
-       | le e a\r
-               = [e:l]\r
-               = [a:insertBy le x e]\r
-\r
-less :: (SeenTrans s i o) (SeenTrans s i o) -> Bool | render s & render i\r
-less (s1,i1,o1,t1) (s2,i2,o2,t2)\r
-       # rs1 = render s1\r
-       # rs2 = render s2\r
-       # ro1 = render i1\r
-       # ro2 = render i2\r
-       # rt1 = render t1\r
-       # rt2 = render t2\r
-       = rs1<rs2 || (rs1==rs2 && (ro1<ro2 || (ro1==ro2 && rt1<=rt2)))\r
-\r
-nrOf :: !(KnownAutomaton s i o) s -> Int | gEq{|*|}, render s\r
-nrOf automaton s\r
-       = case gelemIndex s (nodesOf automaton) of\r
-               Just i                                  = i\r
-               nothing                                 = abort ("nrOf applied to unknown state: "+++render s+++"\n")\r
-\r
-gisMember :: a ![a] -> Bool | gEq{|*|} a\r
-gisMember x [hd:tl] = hd===x || gisMember x tl\r
-gisMember _ _       = False\r
-\r
-gremoveDup :: !.[a] -> .[a] | gEq{|*|} a\r
-gremoveDup [x:xs] = [x:gremoveDup (filter ((=!=) x) xs)]\r
-gremoveDup _      = []\r
-\r
-gelemIndex :: a ![a] -> Maybe Int | gEq{|*|} a\r
-gelemIndex x l = scan 0 x l\r
-where\r
-       scan i x [a:r]\r
-               | x===a = Just i\r
-                               = scan (i+1) x r\r
-       scan i x _ = Nothing\r
-\r