let by_term_we_proved ~dbd ~universe t ty id ty' =
let just =
match t with
- None -> Tactics.auto ~dbd ~params:[] ~universe
+ | None -> Tactics.auto ~dbd ~params:([],[]) ~universe
| Some t -> Tactics.apply t
in
match id with
~continuation:just
)
| Some id ->
- let continuation =
+ let ty',continuation =
match ty' with
- None -> Tacticals.id_tac
+ None -> ty,just
| Some ty' ->
- Tactics.change ~pattern:(None,[id,Cic.Implicit (Some `Hole)],None)
- (fun _ metasenv ugraph -> ty',metasenv,ugraph)
+ ty',
+ Tacticals.then_
+ ~start:
+ (Tactics.change
+ ~with_cast:true
+ ~pattern:(None,[id,Cic.Implicit (Some `Hole)],None)
+ (fun _ metasenv ugraph -> ty,metasenv,ugraph))
+ ~continuation:just
in
Tacticals.thens
~start:
- (Tactics.cut ty
+ (Tactics.cut ty'
~mk_fresh_name_callback:(fun _ _ _ ~typ -> Cic.Name id))
- ~continuations:[ continuation ; just ]
+ ~continuations:[ Tacticals.id_tac ; continuation ]
;;
let bydone ~dbd ~universe t =
let just =
match t with
- None -> Tactics.auto ~dbd ~params:[] ~universe
+ | None -> Tactics.auto ~dbd ~params:([],[]) ~universe
| Some t -> Tactics.apply t
in
just
incr i;
if !i = 1 then Cic.Name id1 else Cic.Name id2) ;
(match t with
- None -> Tactics.auto ~dbd ~params:[] ~universe
+ | None -> Tactics.auto ~dbd ~params:([],[]) ~universe
| Some t -> Tactics.apply t)
]) (proof', goal)
in
Cic.MutInd (uri,0,[]), Cic.Const (LibraryObjects.trans_eq_URI ~eq:uri,[])
in
let ty,_ =
- CicTypeChecker.type_of_aux' metasenv context rhs CicUniv.empty_ugraph in
- let just =
+ CicTypeChecker.type_of_aux' metasenv context rhs CicUniv.oblivion_ugraph in
+ let just' =
match just with
- `Auto params ->
+ `Auto (univ, params) ->
let params =
if not (List.exists (fun (k,_) -> k = "timeout") params) then
("timeout","3")::params
else params
in
if params = params' then
- Tactics.auto ~dbd ~params ~universe
+ Tactics.auto ~dbd ~params:(univ, params) ~universe
else
Tacticals.first
- [Tactics.auto ~dbd ~params ~universe ;
- Tactics.auto ~dbd ~params:params' ~universe]
- | `Term just -> Tactics.apply just
+ [Tactics.auto ~dbd ~params:(univ, params) ~universe ;
+ Tactics.auto ~dbd ~params:(univ, params') ~universe]
+ | `Term just -> Tactics.apply just
+ | `SolveWith term ->
+ Tactics.solve_rewrite ~universe ~params:([term],["steps","1"]) ()
+ | `Proof ->
+ Tacticals.id_tac
in
let plhs,prhs,prepare =
match lhs with
~continuations:[Tacticals.id_tac ; continuation]) (proof,goal)
in
let goals =
- match goals with
- [g1;g2] -> [g2;newmeta;g1]
- | _ -> assert false
+ match just,goals with
+ `Proof, [g1;g2;g3] -> [g2;g3;newmeta;g1]
+ | _, [g1;g2] -> [g2;newmeta;g1]
+ | _, l ->
+ prerr_endline (String.concat "," (List.map string_of_int l));
+ prerr_endline (CicMetaSubst.ppmetasenv [] metasenv);
+ assert false
in
proof,goals)
in
let continuation =
if last_step then
(*CSC:manca controllo sul fatto che rhs sia convertibile con prhs*)
- just
+ just'
else
Tacticals.thens
~start:(Tactics.apply ~term:(Cic.Appl [trans;ty;plhs;rhs;prhs]))
- ~continuations:[just ; Tacticals.id_tac]
+ ~continuations:[just' ; Tacticals.id_tac]
in
prepare continuation
in