X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fcomponents%2Facic_content%2Facic2astMatcher.ml;h=908aa942f8b34d7569e417a3fadc0d11e97d7282;hb=4e98c439731c6e110430a6c5217274215bf403b6;hp=d62786cc7a77316e65d11d4c8a6709bc31a42882;hpb=55b82bd235d82ff7f0a40d980effe1efde1f5073;p=helm.git diff --git a/helm/software/components/acic_content/acic2astMatcher.ml b/helm/software/components/acic_content/acic2astMatcher.ml index d62786cc7..908aa942f 100644 --- a/helm/software/components/acic_content/acic2astMatcher.ml +++ b/helm/software/components/acic_content/acic2astMatcher.ml @@ -77,9 +77,9 @@ struct module M = PatternMatcher.Matcher (Pattern32) let compiler rows = - let match_cb rows = - let pl, pid = try List.hd rows with Not_found -> assert false in - (fun matched_terms constructors -> + let match_cb rows matched_terms constructors = + HExtlib.list_findopt + (fun (pl,pid) _ -> let env = try List.map2 @@ -89,9 +89,23 @@ struct | Ast.VarPattern name -> name, t | _ -> assert false) pl matched_terms - with Invalid_argument _ -> assert false + with Invalid_argument _ -> assert false in + let rec check_non_linear_patterns = + function + [] -> true + | (name,t)::tl -> + List.for_all + (fun (name',t') -> + name <> name' || + CicUtil.alpha_equivalence + (Deannotate.deannotate_term t) (Deannotate.deannotate_term t') + ) tl && check_non_linear_patterns tl in - Some (env, constructors, pid)) + if check_non_linear_patterns env then + Some (env, constructors, pid) + else + None + ) rows in M.compiler rows match_cb (fun () -> None) end