let progress_tactic ~tactic =
let msg = lazy "Failed to progress" in
- let progress_tactic (((_,metasenv,_subst,_,_,_),_) as istatus) =
- let ((_,metasenv',_subst,_,_,_),_) as ostatus =
+ let progress_tactic (((_,metasenv,_subst,_,_,_),g) as istatus) =
+ let ((_,metasenv',_subst,_,_,_),opened) as ostatus =
PET.apply_tactic tactic istatus
in
- (*CSC: Warning
- If just the index of some metas changes the tactic is recognized
- as a progressing one. This is wrong. *)
- if metasenv' = metasenv then
- raise (PET.Fail msg)
- else
- ostatus
+ match opened with
+ | [g1] ->
+ let _,_,oldty = CicUtil.lookup_meta g metasenv in
+ let _,_,newty = CicUtil.lookup_meta g1 metasenv' in
+ if oldty = newty then
+ raise (PET.Fail msg)
+ else
+ ostatus
+ | _ -> ostatus
in
PET.mk_tactic progress_tactic