X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fcic_notation%2FcicNotationFwd.ml;h=bf4b3e38e7beb17623542f91ed2ec1b2260696c6;hb=97c2d258a5c524eb5c4b85208899d80751a2c82f;hp=2e5121b92c21e4d5ee4a6694e595c90de7f773de;hpb=534bf2e1be68b8404bdd6f502b403aa182d8859a;p=helm.git diff --git a/helm/ocaml/cic_notation/cicNotationFwd.ml b/helm/ocaml/cic_notation/cicNotationFwd.ml index 2e5121b92..bf4b3e38e 100644 --- a/helm/ocaml/cic_notation/cicNotationFwd.ml +++ b/helm/ocaml/cic_notation/cicNotationFwd.ml @@ -35,8 +35,7 @@ let unopt_names names env = | Env.OptType ty, Env.OptValue (Some v) -> aux ((name, (ty, v)) :: acc) tl | _ -> assert false) - | _ :: tl -> aux acc tl - (* some pattern may contain only meta names, thus we trash all others *) + | hd :: tl -> aux (hd :: acc) tl | [] -> acc in aux [] env @@ -77,6 +76,7 @@ let instantiate_level2 env term = new_name in let rec aux env term = +(* prerr_endline ("ENV " ^ CicNotationPp.pp_env env); *) match term with | Ast.AttributedTerm (_, term) -> aux env term | Ast.Appl terms -> Ast.Appl (List.map (aux env) terms) @@ -114,8 +114,8 @@ let instantiate_level2 env term = and aux_capture_var env (name, ty_opt) = (aux env name, aux_opt env ty_opt) and aux_branch env (pattern, term) = (aux_pattern env pattern, aux env term) - and aux_pattern env (head, vars) = - (head, List.map (aux_capture_var env) vars) + and aux_pattern env (head, hrefs, vars) = + (head, hrefs, List.map (aux_capture_var env) vars) and aux_definition env (var, term, i) = (aux_capture_var env var, aux env term, i) and aux_substs env substs = @@ -129,7 +129,14 @@ let instantiate_level2 env term = | Ast.Ascription (term, name) -> assert false and aux_magic env = function | Ast.Default (some_pattern, none_pattern) -> - (match CicNotationUtil.names_of_term some_pattern with + let some_pattern_names = CicNotationUtil.names_of_term some_pattern in + let none_pattern_names = CicNotationUtil.names_of_term none_pattern in + let opt_names = + List.filter + (fun name -> not (List.mem name none_pattern_names)) + some_pattern_names + in + (match opt_names with | [] -> assert false (* some pattern must contain at least 1 name *) | (name :: _) as names -> (match Env.lookup_value env name with @@ -139,7 +146,11 @@ let instantiate_level2 env term = *) aux (unopt_names names env) some_pattern | Env.OptValue None -> aux env none_pattern - | _ -> assert false)) + | _ -> + prerr_endline (sprintf + "lookup of %s in env %s did not return an optional value" + name (CicNotationPp.pp_env env)); + assert false)) | Ast.Fold (`Left, base_pattern, names, rec_pattern) -> let acc_name = List.hd names in (* names can't be empty, cfr. parser *) let meta_names =