From 7ce2a046e9a9bee93fd5f63d3938ceedb85f19f2 Mon Sep 17 00:00:00 2001 From: herbelin Date: Mon, 17 Sep 2007 18:40:21 +0000 Subject: Raffinement de l'algorithme d'inférence de type ----------------------------------------------- - Les fonctions evar_define et real_clean font un travail plus fin : - S'il y a plusieurs manières d'inverser l'instance d'une evar, on retarde le choix au lieu de faire un choix arbitraire. - Si l'instance contient une evar et que cette evar n'est pas inversible, on essaie aussi d'inverser ou de restreindre (un sous-terme) de l'evar qui était initialement à instancier. - Incidemment, real_clean est renommé en invert_instance, un nom qui reflète mieux la diversité du travail fait par ce fameux real_clean. - La fonction solve_refl garde les problèmes qui contiennent encore de l'information. - Changements secondaires : - Délégation de la gestion des variables modifiées et des problèmes à reconsidérer (get_conv_pbs) à Evd (qui s'en charge par effet de bord au moment du define) (incidemment get_conv_pbs devient extract_conv_pbs) - Essai d'un mécanisme différent de restriction des evars : pour éviter des contextes mal formés (comme do_restrict pouvait a priori le faire), on utilise maintenant un contexte bien formé doublé d'un filtre signalant les instances interdites. C'est a priori plus souple (par ex : si une variable du contexte a un type dépendant d'une evar, on peut attendre de connaître cette evar avec de déterminer si cette variable du contexte, qui peut-être dépend via cette evar d'une autre variable interdite, doit être finalement interdite ou pas) - Nettoyages divers. - Ce que evarutil ne fait toujours pas : - Utiliser l'inversion et/ou l'unification d'ordre supérieur (par exemple pour résoudre "?ev[S n]=n"); en particulier, la notion d'inversion unique ne prend pas en compte l'unification d'ordre supérieur et peut donc faire des choix irréversibles vis à vis de l'unif d'ordre supérieur. - Utiliser (systématiquement -- et précautionneusement) les types des solutions trouvées pour résoudre davantage de problèmes. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@10124 85f007b7-540e-0410-9357-904b9bb8a0f7 --- tactics/auto.ml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'tactics') diff --git a/tactics/auto.ml b/tactics/auto.ml index f0e9842fa3..b78291ecde 100644 --- a/tactics/auto.ml +++ b/tactics/auto.ml @@ -191,12 +191,9 @@ let make_exact_entry (c,cty) = (head_of_constr_reference (List.hd (head_constr cty)), { pri=0; pat=None; code=Give_exact c }) -let dummy_goal = - {it={evar_hyps=empty_named_context_val; - evar_concl=mkProp; - evar_body=Evar_empty; - evar_extra=None}; - sigma=Evd.empty} +let dummy_goal = + {it = make_evar empty_named_context_val mkProp; + sigma = empty} let make_apply_entry env sigma (eapply,verbose) (c,cty) = let cty = hnf_constr env sigma cty in -- cgit v1.2.3