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); } } } }
public BCTModel(Model m, ViewOptions opts) : base(m, opts) { f_heap_select = m.MkFunc("[3]", 3); foreach (Model.Func fn in m.Functions) { } }