select0_tac ~where ~job:(`ChangeWith change)
;;
-let letin_tac ~where:(_,_,(m,hyp,gp)) ~what:(_,_,w) name =
- assert(m = None);
- let where = Some w, [],
- match gp with
- | None -> Some Ast.Implicit
- | Some where ->
- Some
- (List.fold_left
- (fun t _ ->
- Ast.Binder(`Pi,(Ast.Ident("_",None),Some Ast.UserInput),t))
- where hyp)
- in
- block_tac [
- generalize0_tac (List.map (fun (name,_) -> Ast.Ident (name,None)) hyp);
- exact_tac ("",0,Ast.LetIn((Ast.Ident (name,None),None),w,Ast.Implicit));
- change_tac ~where:("",0,where) ~with_what:("",0,Ast.Ident (name,None))
- ]
+let letin_tac ~where ~what:(_,_,w) name =
+ block_tac [
+ select_tac ~where ~job:(`Substexpand 1) true;
+ exact_tac ("",0,Ast.LetIn((Ast.Ident (name,None),None),w,Ast.Implicit));
+ ]
;;
let apply_tac = exact_tac;;
let status,_ =
List.fold_right2
(fun (id1,e1) ((id2,e2) as item) (status,ctx) ->
- assert (id1=id2);
+ assert (id1=id2 || (prerr_endline (id1 ^ " vs " ^ id2); false));
match e1,e2 with
`Decl t1, NCic.Decl t2 ->
let status = eq status ctx t1 t2 in