X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matitaB%2Fcomponents%2Fgrafite_engine%2FgrafiteEngine.ml;fp=matitaB%2Fcomponents%2Fgrafite_engine%2FgrafiteEngine.ml;h=bcbaa93ad39db76ec22bfe2411902f6dd8ddf7dc;hb=86b0a224bd9251ed22648de04bc0d00f11dbd0fc;hp=630d6a6e399cdc0c631cf68ae5b3a513743ebc19;hpb=e499c2e36d8a39c4749b8e0e34438b49532d15b8;p=helm.git diff --git a/matitaB/components/grafite_engine/grafiteEngine.ml b/matitaB/components/grafite_engine/grafiteEngine.ml index 630d6a6e3..bcbaa93ad 100644 --- a/matitaB/components/grafite_engine/grafiteEngine.ml +++ b/matitaB/components/grafite_engine/grafiteEngine.ml @@ -34,6 +34,8 @@ type options = { do_heavy_checks: bool ; } +let prerr_endline _ = () + let basic_eval_unification_hint (t,n) status = NCicUnifHint.add_user_provided_hint status t n ;; @@ -639,6 +641,65 @@ let rec eval_ncommand ~include_paths opts status (text,prefix_len,cmd) = (NCicEnvironment.get_universes status)))) status itl | _ -> status in + let status = match nobj with + NCic.Inductive (is_ind,leftno,itl,_) -> + (* first leibniz *) + let status' = List.fold_left + (fun status it -> + let _,ind_name,ty,cl = it in + let status = status#set_ng_mode `ProofMode in + try + prerr_endline ("creazione discriminatore per " ^ ind_name); + (let status,invobj = + NDestructTac.mk_discriminator ~use_jmeq:false + (ind_name ^ "_discr") + it leftno status status#baseuri in + let _,_,menv,_,_ = invobj in + (match menv with + [] -> eval_ncommand ~include_paths opts status + ("",0,GrafiteAst.NQed(Stdpp.dummy_loc,false)) + | _ -> status)) + (* XXX *) + with + | NDestructTac.ConstructorTooBig k -> + prerr_endline (Printf.sprintf + "unable to generate leibniz discrimination principle (constructor %s too big)" + k); + HLog.warn (Printf.sprintf + "unable to generate leibniz discrimination principle (constructor %s too big)" + k); + let status = status#set_ng_mode `CommandMode in status + | _ -> + prerr_endline "error in generating discrimination principle"; + (*HLog.warn "error in generating discrimination principle"; *) + let status = status#set_ng_mode `CommandMode in + status) + status itl + in + (* then JMeq *) + List.fold_left + (fun status it -> + let _,ind_name,ty,cl = it in + let status = status#set_ng_mode `ProofMode in + try + prerr_endline ("creazione discriminatore per " ^ ind_name); + (let status,invobj = + NDestructTac.mk_discriminator ~use_jmeq:true + (ind_name ^ "_jmdiscr") + it leftno status status#baseuri in + let _,_,menv,_,_ = invobj in + (match menv with + [] -> eval_ncommand ~include_paths opts status + ("",0,GrafiteAst.NQed(Stdpp.dummy_loc,false)) + | _ -> status)) + (* XXX *) + with _ -> (*HLog.warn "error in generating discrimination principle"; *) + prerr_endline "error in generating discrimination principle"; + let status = status#set_ng_mode `CommandMode in + status) + status' itl + | _ -> status + in let coercions = match obj with _,_,_,_,NCic.Inductive @@ -832,7 +893,8 @@ let rec eval_executable ~include_paths opts status (text,prefix_len,ex) = match ex with | GrafiteAst.NTactic (_(*loc*), tacl) -> if status#ng_mode <> `ProofMode then - raise (GrafiteTypes.Command_error "Not in proof mode") + (prerr_endline ("not in proof mode 2: " ^ GrafiteAstPp.pp_executable status ~map_unicode_to_tex:false ex); + raise (GrafiteTypes.Command_error "Not in proof mode")) else let status = List.fold_left