let assume id t = Tacticals.then_ ~start: (Tactics.intros ~howmany:1 ~mk_fresh_name_callback:(fun _ _ _ ~typ -> Cic.Name id) ()) ~continuation: (Tactics.change ~pattern:(None,[id,Cic.Implicit (Some `Hole)],None) (fun _ metasenv ugraph -> t,metasenv,ugraph)) ;; let suppose t id = Tacticals.then_ ~start: (Tactics.intros ~howmany:1 ~mk_fresh_name_callback:(fun _ _ _ ~typ -> Cic.Name id) ()) ~continuation: (Tactics.change ~pattern:(None,[id,Cic.Implicit (Some `Hole)],None) (fun _ metasenv ugraph -> t,metasenv,ugraph)) ;; let by_term_we_proved t ty id = Tacticals.thens ~start: (Tactics.cut ty ~mk_fresh_name_callback:(fun _ _ _ ~typ -> Cic.Name id)) ~continuations: [ Tacticals.id_tac ; Tactics.apply t ] ;; let bydone t = (Tactics.apply ~term:t) ;; let we_need_to_prove t id = let aux status = let proof,goals = ProofEngineTypes.apply_tactic (Tactics.cut t ~mk_fresh_name_callback:(fun _ _ _ ~typ -> Cic.Name id)) status in let goals' = match goals with [fst; snd] -> [snd; fst] | _ -> assert false in proof,goals' in ProofEngineTypes.mk_tactic aux ;;