aboutsummaryrefslogtreecommitdiff
path: root/tactics/termdn.ml
diff options
context:
space:
mode:
Diffstat (limited to 'tactics/termdn.ml')
-rw-r--r--tactics/termdn.ml36
1 files changed, 19 insertions, 17 deletions
diff --git a/tactics/termdn.ml b/tactics/termdn.ml
index fda033f268..957543e16d 100644
--- a/tactics/termdn.ml
+++ b/tactics/termdn.ml
@@ -3,18 +3,15 @@
open Util
open Generic
+open Names
open Term
+open Rawterm
(* Discrimination nets of terms.
See the module dn.ml for further explanations.
Eduardo (5/8/97) *)
-type lbl =
- | TERM of constr
- | DOPER of sorts oper
- | DLAMBDA
-
-type 'a t = (lbl,constr,'a) Dn.t
+type 'a t = (constr_label,constr_pattern,'a) Dn.t
(*If we have: f a b c ..., decomp gives: (f,[a;b;c;...])*)
@@ -24,26 +21,31 @@ let decomp =
| DOP2(Cast,c1,_) -> decrec acc c1
| c -> (c,acc)
in
- decrec []
+ decrec []
+let decomp_pat =
+ let rec decrec acc = function
+ | PApp (f,args) -> decrec (Array.to_list args @ acc) f
+ | c -> (c,acc)
+ in
+ decrec []
let constr_pat_discr t =
- if not(occur_meta t) then
+ if not (occur_meta_pattern t) then
None
else
- match decomp t with
- (* | DOPN(Const _,_) as c,l -> Some(TERM c,l) *)
- | DOPN(MutInd _,_) as c,l -> Some(TERM c,l)
- | DOPN(MutConstruct _,_) as c,l -> Some(TERM c,l)
- | VAR _ as c,l -> Some(TERM c,l)
- | c -> None
+ match decomp_pat t with
+ | PRef (RInd (ind_sp,_)), args -> Some(IndNode ind_sp,args)
+ | PRef (RConstruct (cstr_sp,_)), args -> Some(CstrNode cstr_sp,args)
+ | PRef (RVar id), args -> Some(VarNode id,args)
+ | _ -> None
let constr_val_discr t =
match decomp t with
(* DOPN(Const _,_) as c,l -> Some(TERM c,l) *)
- | DOPN(MutInd _,_) as c,l -> Some(TERM c,l)
- | DOPN(MutConstruct _,_) as c,l -> Some(TERM c,l)
- | VAR _ as c,l -> Some(TERM c,l)
+ | DOPN(MutInd ind_sp,_) as c,l -> Some(IndNode ind_sp,l)
+ | DOPN(MutConstruct cstr_sp,_) as c,l -> Some(CstrNode cstr_sp,l)
+ | VAR id as c,l -> Some(VarNode id,l)
| c -> None
(* Les deux fonctions suivantes ecrasaient les precedentes,