X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fcomponents%2Fcic_disambiguation%2Fdisambiguate.ml;h=d58dc9854bceef447083e2ff628bfe99ef6eee91;hb=89d18c9a7d02ba3a26581a2d1c0f50bb56f231e2;hp=1fea419215f3a0fddf12441585bc753fab6b8794;hpb=87bdd061d096c836a02c77aa26e80d9c36180fad;p=helm.git diff --git a/helm/software/components/cic_disambiguation/disambiguate.ml b/helm/software/components/cic_disambiguation/disambiguate.ml index 1fea41921..d58dc9854 100644 --- a/helm/software/components/cic_disambiguation/disambiguate.ml +++ b/helm/software/components/cic_disambiguation/disambiguate.ml @@ -247,6 +247,14 @@ let interpretate_term ?(create_dummy_ids=false) ~(context: Cic.name list) ~env ~ raise (Invalid_choice (Some loc, lazy "The type of the term to be matched is not (co)inductive!"))) in let branches = + if create_dummy_ids then + List.map + (function + Ast.Wildcard,term -> ("wildcard",None,[]), term + | Ast.Pattern _,_ -> + raise (Invalid_choice (Some loc, lazy "Syntax error: the left hand side of a branch patterns must be \"_\"")) + ) branches + else match fst(CicEnvironment.get_obj CicUniv.empty_ugraph indtype_uri) with Cic.InductiveDefinition (il,_,leftsno,_) -> let _,_,_,cl = @@ -337,13 +345,13 @@ let interpretate_term ?(create_dummy_ids=false) ~(context: Cic.name list) ~env ~ | CicNotationPt.LetIn ((name, typ), def, body) -> let cic_def = aux ~localize loc context def in let cic_name = CicNotationUtil.cic_name_of_name name in - let cic_def = + let cic_typ = match typ with - | None -> cic_def - | Some t -> Cic.Cast (cic_def, aux ~localize loc context t) + | None -> Cic.Implicit (Some `Type) + | Some t -> aux ~localize loc context t in let cic_body = aux ~localize loc (cic_name :: context) body in - Cic.LetIn (cic_name, cic_def, cic_body) + Cic.LetIn (cic_name, cic_def, cic_typ, cic_body) | CicNotationPt.LetRec (kind, defs, body) -> let context' = List.fold_left @@ -423,9 +431,9 @@ let interpretate_term ?(create_dummy_ids=false) ~(context: Cic.name list) ~env ~ Cic.CoFix (n,coinductiveFuns) in let counter = ref ~-1 in - let build_term funs (var,_,_,_) t = + let build_term funs (var,_,ty,_) t = incr counter; - Cic.LetIn (Cic.Name var, fix_or_cofix !counter, t) + Cic.LetIn (Cic.Name var, fix_or_cofix !counter, ty, t) in (match cic_body with `AvoidLetInNoAppl n ->