diff options
| author | Matthieu Sozeau | 2017-04-25 21:54:31 +0200 |
|---|---|---|
| committer | Maxime Dénès | 2020-09-07 20:47:42 +0200 |
| commit | b6dabf6aa5b96cfa3c11038316399f0797d734ac (patch) | |
| tree | 0e97b6c66bba554833c47cec50d017820f72afe6 /engine/evd.mli | |
| parent | b972cc5195e941633319c1fa428a9801ac4ef9e2 (diff) | |
Refine test for unresolved evars: not reachable from initial evars
The test is refined to handle aliases: i.e. undefined evars coming from
restrictions and evar-evar unifications with an initial evar are not
considered fresh unresolved evars. To check this, we generalize the
restricted_evars set to an aliased_evars set in the evar map,
registering evars being solved by another evar due to restriction
or evar-evar unifications. This implements the proposal of PR #370
for testing the resolution status of evars independently of the evar-evar
orientation order.
This allows [apply] to refine an evar with a new one if it results from a
[clear] request or an evar-evar solution only, otherwise the new evar is
considered fresh and an error is raised.
Also fixes bugs #4095 and #4413.
Co-authored-by: Maxime Dénès <maxime.denes@inria.fr>
Diffstat (limited to 'engine/evd.mli')
| -rw-r--r-- | engine/evd.mli | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/engine/evd.mli b/engine/evd.mli index 9394f9a9dd..fafaad9a04 100644 --- a/engine/evd.mli +++ b/engine/evd.mli @@ -284,8 +284,11 @@ val restrict : Evar.t-> Filter.t -> ?candidates:econstr list -> possibly limiting the instances to a set of candidates (candidates are filtered according to the filter) *) -val is_restricted_evar : evar_map -> Evar.t -> Evar.t option -(** Tell if an evar comes from restriction of another evar, and if yes, which *) +val get_aliased_evars : evar_map -> Evar.t Evar.Map.t +(** The map of aliased evars *) + +val is_aliased_evar : evar_map -> Evar.t -> Evar.t option +(** Tell if an evar has been aliased to another evar, and if yes, which *) val set_typeclass_evars : evar_map -> Evar.Set.t -> evar_map (** Mark the given set of evars as available for resolution. @@ -388,7 +391,6 @@ val pop_future_goals : evar_map -> FutureGoals.t * evar_map val fold_future_goals : (evar_map -> Evar.t -> evar_map) -> evar_map -> evar_map - val remove_future_goal : evar_map -> Evar.t -> evar_map val pr_future_goals_stack : evar_map -> Pp.t |
