private static Tuple <Ast.section, Tuple <List <Tuple <string, Ast.expr> >, List <Tuple <string, Ast.expr> > > > ClockAssigns(List <Tuple <string, Tuple <Int64, Int64> > > variables)
        {
            List <Tuple <string, Ast.expr> > stringexprlstinit = new List <Tuple <string, Ast.expr> >();
            List <Tuple <string, Ast.expr> > stringexprlstnext = new List <Tuple <string, Ast.expr> >();

            Ast.expr clockindent = Ast.expr.NewInt(_clockbound);

            Ast.expr timerident    = Ast.expr.NewIdent("time");
            Ast.expr inctimerident = Ast.expr.NewAdd(timerident, Ast.expr.NewInt(1));
            Ast.expr truident      = Ast.expr.NewIdent("TRUE");
            Ast.expr zeroident     = Ast.expr.NewInt(0);
            Ast.expr guard         = Ast.expr.NewLt(timerident, Ast.expr.NewInt(_clockbound));
            // init
            Ast.assign initident = Ast.assign.NewInitAssign("time", zeroident);
            // next
            List <Tuple <Ast.expr, Ast.expr> > caseslst = new List <Tuple <Ast.expr, Ast.expr> >();
            Tuple <Ast.expr, Ast.expr>         guardcs  = new Tuple <Ast.expr, Ast.expr>(guard, inctimerident);

            caseslst.Add(guardcs);
            stringexprlstinit.Add(new Tuple <string, Ast.expr>("time", zeroident));

            Tuple <Ast.expr, Ast.expr> trucs = new Tuple <Ast.expr, Ast.expr>(truident, timerident);

            caseslst.Add(trucs);
            Ast.expr   caseident = Ast.expr.NewCases(FSharpInteropExtensions.ToFSharplist <Tuple <Ast.expr, Ast.expr> >(caseslst));
            Ast.assign nextident = Ast.assign.NewNextAssign("time", caseident);
            stringexprlstnext.Add(new Tuple <string, Ast.expr>("time", caseident));

            List <Ast.assign> assignlst = new List <Ast.assign>();

            assignlst.Add(initident);
            assignlst.Add(nextident);
            Ast.section assignsec = Ast.section.NewAssigns(FSharpInteropExtensions.ToFSharplist <Ast.assign>(assignlst));

            Tuple <Ast.section, Tuple <List <Tuple <string, Ast.expr> >, List <Tuple <string, Ast.expr> > > > sectionwithmemoryvalues =
                new Tuple <Ast.section, Tuple <List <Tuple <string, Ast.expr> >, List <Tuple <string, Ast.expr> > > >
                    (assignsec, new Tuple <List <Tuple <string, Ast.expr> >, List <Tuple <string, Ast.expr> > >(stringexprlstinit, stringexprlstnext));

            return(sectionwithmemoryvalues);
        }
        private static List <Ast.smv_module> GenSmvModlsFromMem()
        {
            List <Ast.smv_module> astmodules = new List <Ast.smv_module>();

            foreach (var modl in _modules)
            {
                List <Ast.section> sections           = new List <Ast.section>();
                List <Tuple <string, Ast.types> > vrs = new List <Tuple <string, Ast.types> >();
                //svars
                List <Tuple <string, Ast.types> > svars = ConvertSetTupleToTypes(_svars[modl]);
                foreach (var v in svars)
                {
                    vrs.Add(v);
                }
                // Ast.section svarsec = Ast.section.NewVar(FSharpInteropExtensions.ToFSharplist<Tuple<string, Ast.types>> (svars));
                //rvars
                List <Tuple <string, Ast.types> > rvars = ConvertRngTupleToTypes(_rvars[modl]);
                foreach (var v in rvars)
                {
                    vrs.Add(v);
                }
                //mvars
                List <Tuple <string, Ast.types> > mvars = ConvertModlTupleToTypes(_mvars[modl]);
                foreach (var v in mvars)
                {
                    vrs.Add(v);
                }
                Ast.section varsec = Ast.section.NewVar(FSharpInteropExtensions.ToFSharplist <Tuple <string, Ast.types> >(vrs));
                sections.Add(varsec);
                //init
                foreach (var init in _init[modl])
                {
                    sections.Add(Ast.section.NewInit(init));
                }
                //trans
                foreach (var trans in _trans[modl])
                {
                    sections.Add(Ast.section.NewTrans(trans));
                }

                List <Ast.assign> assigns = new List <Ast.assign>();
                using (var e1 = _iassigns[modl].GetEnumerator())
                {
                    while (e1.MoveNext())
                    {
                        var        iassign = e1.Current;
                        Ast.assign iasgn   = Ast.assign.NewInitAssign(iassign.Item1, iassign.Item2);
                        assigns.Add(iasgn);
                    }
                }

                //assigns Bug is here
                using (var e2 = _nassigns[modl].GetEnumerator())
                {
                    while (e2.MoveNext())
                    {
                        var        nassign = e2.Current;
                        Ast.assign nasgn   = Ast.assign.NewNextAssign(nassign.Item1, nassign.Item2);
                        assigns.Add(nasgn);
                    }
                }

                /*
                 * foreach (var iassign in _iassigns[modl])
                 * {
                 *  Ast.assign asgn = Ast.assign.NewInitAssign(iassign.Item1, iassign.Item2);
                 *  assigns.Add(asgn);
                 * }
                 * foreach (var nassign in _nassigns[modl])
                 * {
                 *  Ast.assign asgn = Ast.assign.NewNextAssign(nassign.Item1, nassign.Item2);
                 *  assigns.Add(asgn);
                 * }*/
                if (assigns.Count > 0)
                {
                    sections.Add(Ast.section.NewAssigns(FSharpInteropExtensions.ToFSharplist <Ast.assign>(assigns)));
                }
                Ast.smv_module asyncboundedmodl = new Ast.smv_module(modl.name, FSharpInteropExtensions.ToFSharplist <string>(_params[modl]) /*modl.parameters*/, FSharpInteropExtensions.ToFSharplist <Ast.section>(sections));
                astmodules.Add(asyncboundedmodl);
            }
            return(astmodules);
        }