Exemplo n.º 1
0
        public DafnyModel(Model m, ViewOptions opts)
            : base(m, opts)
        {
            f_heap_select       = m.MkFunc("[3]", 3);
            f_set_select        = m.MkFunc("[2]", 2);
            f_seq_length        = m.MkFunc("Seq#Length", 1);
            f_seq_index         = m.MkFunc("Seq#Index", 2);
            f_box               = m.MkFunc("$Box", 1);
            f_dim               = m.MkFunc("FDim", 1);
            f_index_field       = m.MkFunc("IndexField", 1);
            f_multi_index_field = m.MkFunc("MultiIndexField", 2);
            f_dtype             = m.MkFunc("dtype", 1);
            f_null              = m.MkFunc("null", 0);

            // collect the array dimensions from the various array.Length functions, and
            // collect all known datatype values
            foreach (var fn in m.Functions)
            {
                if (Regex.IsMatch(fn.Name, "^_System.array[0-9]*.Length[0-9]*$"))
                {
                    int j    = fn.Name.IndexOf('.', 13);
                    int dims = j == 13 ? 1 : int.Parse(fn.Name.Substring(13, j - 13));
                    int idx  = j == 13 ? 0 : int.Parse(fn.Name.Substring(j + 7));
                    foreach (var tpl in fn.Apps)
                    {
                        var             elt = tpl.Args[0];
                        var             len = tpl.Result;
                        Model.Element[] ar;
                        if (!ArrayLengths.TryGetValue(elt, out ar))
                        {
                            ar = new Model.Element[dims];
                            ArrayLengths.Add(elt, ar);
                        }
                        Contract.Assert(ar[idx] == null);
                        ar[idx] = len;
                    }
                }
                else if (fn.Name.StartsWith("#") && fn.Name.IndexOf('.') != -1 && fn.Name[1] != '#')
                {
                    foreach (var tpl in fn.Apps)
                    {
                        var elt = tpl.Result;
                        DatatypeValues.Add(elt, tpl);
                    }
                }
            }
        }
Exemplo n.º 2
0
    public BCTModel(Model m, ViewOptions opts)
      : base(m, opts) {
      f_heap_select = m.MkFunc("[3]", 3);

      foreach (Model.Func fn in m.Functions) {

      }
    }
Exemplo n.º 3
0
        public BCTModel(Model m, ViewOptions opts)
            : base(m, opts)
        {
            f_heap_select = m.MkFunc("[3]", 3);

            foreach (Model.Func fn in m.Functions)
            {
            }
        }
Exemplo n.º 4
0
    public DafnyModel(Model m, ViewOptions opts)
      : base(m, opts)
    {
      f_heap_select = m.MkFunc("[3]", 3);
      f_set_select = m.MkFunc("[2]", 2);
      f_seq_length = m.MkFunc("Seq#Length", 1);
      f_seq_index = m.MkFunc("Seq#Index", 2);
      f_box = m.MkFunc("$Box", 1);
      f_dim = m.MkFunc("FDim", 1);
      f_index_field = m.MkFunc("IndexField", 1);
      f_multi_index_field = m.MkFunc("MultiIndexField", 2);
      f_dtype = m.MkFunc("dtype", 1);
      f_null = m.MkFunc("null", 0);

      // collect the array dimensions from the various array.Length functions, and
      // collect all known datatype values
      foreach (var fn in m.Functions) {
        if (Regex.IsMatch(fn.Name, "^_System.array[0-9]*.Length[0-9]*$")) {
          int j = fn.Name.IndexOf('.', 13);
          int dims = j == 13 ? 1 : int.Parse(fn.Name.Substring(13, j - 13));
          int idx = j == 13 ? 0 : int.Parse(fn.Name.Substring(j + 7));
          foreach (var tpl in fn.Apps) {
            var elt = tpl.Args[0];
            var len = tpl.Result;
            Model.Element[] ar;
            if (!ArrayLengths.TryGetValue(elt, out ar)) {
              ar = new Model.Element[dims];
              ArrayLengths.Add(elt, ar);
            }
            Contract.Assert(ar[idx] == null);
            ar[idx] = len;
          }
        } else if (fn.Name.StartsWith("#") && fn.Name.IndexOf('.') != -1 && fn.Name[1] != '#') {
          foreach (var tpl in fn.Apps) {
            var elt = tpl.Result;
            DatatypeValues.Add(elt, tpl);
          }
        }
      }
    }