;;
let suppose t id ty =
-(*BUG: ty not used *)
+(*BUG: check on t missing *)
+ let ty = match ty with None -> t | Some ty -> ty in
Tacticals.then_
~start:
- (Tactics.intros ~howmany:1
- ~mk_fresh_name_callback:(fun _ _ _ ~typ -> Cic.Name id) ())
+ (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))
+ (Tactics.change ~pattern:(None,[id,Cic.Implicit (Some `Hole)],None)
+ (fun _ metasenv ugraph -> ty,metasenv,ugraph))
;;
-let by_term_we_proved t ty id ty' =
-(*BUG: ty' not used *)
- match t with
- None -> assert false
- | Some t ->
- Tacticals.thens
- ~start:
- (Tactics.cut ty
- ~mk_fresh_name_callback:(fun _ _ _ ~typ -> Cic.Name id))
- ~continuations:
- [ Tacticals.id_tac ; Tactics.apply t ]
+let by_term_we_proved ~dbd t ty id ty' =
+ let just =
+ match t with
+ None -> Tactics.auto ~dbd ~params:[]
+ | Some t -> Tactics.apply t
+ in
+ let continuation =
+ match ty' with
+ None -> Tacticals.id_tac
+ | Some ty' ->
+ Tactics.change ~pattern:(None,[id,Cic.Implicit (Some `Hole)],None)
+ (fun _ metasenv ugraph -> ty',metasenv,ugraph)
+ in
+ Tacticals.thens
+ ~start:
+ (Tactics.cut ty
+ ~mk_fresh_name_callback:(fun _ _ _ ~typ -> Cic.Name id))
+ ~continuations:[ continuation ; just ]
;;
-let bydone t =
- match t with
- None -> assert false
- | Some t ->
- (Tactics.apply ~term:t)
+let bydone ~dbd t =
+ let just =
+ match t with
+ None -> Tactics.auto ~dbd ~params:[]
+ | Some t -> Tactics.apply t
+ in
+ just
;;
let we_need_to_prove t id ty =
-(*BUG: ty not used *)
let aux status =
+ let cont,cutted =
+ match ty with
+ None -> Tacticals.id_tac,t
+ | Some ty ->
+ Tactics.change ~pattern:(None,[id,Cic.Implicit (Some `Hole)],None)
+ (fun _ metasenv ugraph -> t,metasenv,ugraph), ty in
let proof,goals =
ProofEngineTypes.apply_tactic
- (Tactics.cut t
- ~mk_fresh_name_callback:(fun _ _ _ ~typ -> Cic.Name id))
+ (Tacticals.thens
+ ~start:
+ (Tactics.cut cutted
+ ~mk_fresh_name_callback:(fun _ _ _ ~typ -> Cic.Name id))
+ ~continuations:[cont])
status
in
let goals' =
let andelim = existselim;;
-let rewritingstep lhs rhs just conclude =
+let rewritingstep ~dbd lhs rhs just conclude =
let aux ((proof,goal) as status) =
let (curi,metasenv,proofbo,proofty) = proof in
let _,context,_ = CicUtil.lookup_meta goal metasenv in
let eq,trans =
match LibraryObjects.eq_URI () with
- None -> assert false (*TODO*)
+ None -> raise (ProofEngineTypes.Fail (lazy "You need to register the default equality first. Please use the \"default\" command"))
| Some uri ->
Cic.MutInd (uri,0,[]), Cic.Const (LibraryObjects.trans_eq_URI ~eq:uri,[])
in
CicTypeChecker.type_of_aux' metasenv context rhs CicUniv.empty_ugraph in
let just =
match just with
- None -> assert false (*TOOD*)
- | Some just -> just
+ None ->
+ Tactics.auto ~dbd
+ ~params:["paramodulation","on"; "timeout","3"]
+ | Some just -> Tactics.apply just
in
match lhs with
None ->
~continuations:
[ Tactics.apply prhs ;
Tactics.apply (Cic.Rel 1) ;
- Tactics.apply just]) status
+ just]) status
| Some name ->
let mk_fresh_name_callback =
fun metasenv context _ ~typ ->
~continuations:
[ Tactics.apply prhs ;
Tactics.apply (Cic.Rel 1) ;
- Tactics.apply just]
+ just]
]) status)
| Some lhs ->
match conclude with
- None -> ProofEngineTypes.apply_tactic (Tactics.apply just) status
+ None -> ProofEngineTypes.apply_tactic just status
| Some name ->
let mk_fresh_name_callback =
fun metasenv context _ ~typ ->
~start:
(Tactics.cut ~mk_fresh_name_callback
(Cic.Appl [eq ; ty ; lhs ; rhs]))
- ~continuations:[ Tacticals.id_tac ; Tactics.apply just ]) status
+ ~continuations:[ Tacticals.id_tac ; just ]) status
in
ProofEngineTypes.mk_tactic aux
;;
;;
let thesisbecomes t =
- (*BUG here: nothing done*)
- Tacticals.id_tac
+let ty = None in
+ (*BUG here: missing check on t *)
+ match ty with
+ None -> Tacticals.id_tac
+ | Some ty ->
+ Tactics.change ~pattern:(None,[],Some (Cic.Implicit (Some `Hole)))
+ (fun _ metasenv ugraph -> ty,metasenv,ugraph)
;;
let byinduction t id = suppose t id None;;