X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fcomponents%2Fng_refiner%2FnCicMetaSubst.mli;h=398325df41fd08e28422b097b068e935d0e3d1e0;hb=df0dc72bccac82b3dd69108b5996d7008d007601;hp=1c96577a74121d90639bbc6905dd7345bd5d647a;hpb=2e6a92bad35a8f8883c498c6a2f36ea3208d4ddd;p=helm.git diff --git a/matita/components/ng_refiner/nCicMetaSubst.mli b/matita/components/ng_refiner/nCicMetaSubst.mli index 1c96577a7..398325df4 100644 --- a/matita/components/ng_refiner/nCicMetaSubst.mli +++ b/matita/components/ng_refiner/nCicMetaSubst.mli @@ -19,6 +19,10 @@ val debug: bool ref (* the index of the last created meta *) val maxmeta: unit -> int +(* Bad, this should be made functional and put in the status! *) +val pushmaxmeta: unit -> unit +val popmaxmeta: unit -> unit + (* the delift function takes in input a metavariable index, a local_context * and a term t, and substitutes every subterm t' of t with its position * (searched up-to unification) in @@ -28,13 +32,16 @@ val maxmeta: unit -> int * the delift function is a term the implicit variable can be substituted with * to make the term [t] unifiable with the metavariable occurrence. In general, * the problem is undecidable if we consider equivalence in place of alpha - * convertibility. Our implementation, though, is even weaker than alpha + * convertibility. + * The old implementation, though, is even weaker than alpha * convertibility, since it replace the term [tk] if and only if [tk] is a Rel * (missing all the other cases). Does this matter in practice? + * The new experimental implementation, instead, works up to unification. * The metavariable index is the index of the metavariable that must not occur * in the term (for occur check). *) val delift : + #NCic.status -> unify:(NCic.metasenv -> NCic.substitution -> NCic.context -> NCic.term -> NCic.term -> (NCic.metasenv * NCic.substitution) option) -> NCic.metasenv -> NCic.substitution -> NCic.context -> @@ -46,6 +53,7 @@ val delift : additional (i.e. l' does not intersects l) positions whose restriction was forced because of type dependencies *) val restrict: + #NCic.status -> NCic.metasenv -> NCic.substitution -> int -> int list -> @@ -63,6 +71,7 @@ val extend_meta: NCic.metasenv -> int -> NCic.metasenv * NCic.term (* returns the resulting type, the metasenv and the arguments *) val saturate: + #NCic.status -> ?delta:int -> NCic.metasenv -> NCic.substitution -> NCic.context -> NCic.term -> int -> NCic.term * NCic.metasenv * NCic.term list @@ -72,4 +81,5 @@ val pack_lc : int * NCic.lc_kind -> int * NCic.lc_kind val is_out_scope_tag : NCic.meta_attrs -> bool val int_of_out_scope_tag : NCic.meta_attrs -> int -val is_flexible : NCic.context -> subst:NCic.substitution -> NCic.term -> bool +val is_flexible: + #NCic.status -> NCic.context -> subst:NCic.substitution -> NCic.term -> bool