(************************************************************************) (* v * The Coq Proof Assistant / The Coq Development Team *) (* Mode_tactic | Some _ -> Mode_proof let get_current_mode () = try mode_of_pftreestate (Pfedit.get_pftreestate ()) with Proof_global.NoCurrentProof -> Mode_none let check_not_proof_mode str = match get_current_mode () with | Mode_proof -> error str | _ -> () let get_info sigma gl= match Store.get (Goal.V82.extra sigma gl) info with | None -> invalid_arg "get_info" | Some pm -> pm let try_get_info sigma gl = Store.get (Goal.V82.extra sigma gl) info let get_goal_stack pts = let { it = goals ; sigma = sigma } = Proof.V82.subgoals pts in let info = get_info sigma (List.hd goals) in info.pm_stack let proof_focus = Proof.new_focus_kind () let proof_cond = Proof.done_cond proof_focus let focus p = let inf = get_goal_stack p in Proof_global.simple_with_current_proof (fun _ -> Proof.focus proof_cond inf 1) let unfocus () = Proof_global.simple_with_current_proof (fun _ p -> Proof.unfocus proof_focus p ()) let get_top_stack pts = try Proof.get_at_focus proof_focus pts with Proof.NoSuchFocus -> let { it = gl ; sigma = sigma } = Proof.V82.top_goal pts in let info = get_info sigma gl in info.pm_stack let get_stack pts = Proof.get_at_focus proof_focus pts let get_last env = match Environ.named_context env with | (id,_,_)::_ -> id | [] -> error "no previous statement to use" let get_end_command pts = match get_top_stack pts with | [] -> "\"end proof\"" | Claim::_ -> "\"end claim\"" | Focus_claim::_-> "\"end focus\"" | Suppose_case :: Per (et,_,_,_) :: _ | Per (et,_,_,_) :: _ -> begin match et with Decl_expr.ET_Case_analysis -> "\"end cases\" or start a new case" | Decl_expr.ET_Induction -> "\"end induction\" or start a new case" end | _ -> anomaly (Pp.str"lonely suppose")