(************************************************************************) (* v * The Coq Proof Assistant / The Coq Development Team *) (* [] | h::tl -> pathrec tl h and pathrec deferred t = match dna t with | None -> None :: (path_of_deferred deferred) | Some (lbl,[]) -> (Some (lbl,0))::(path_of_deferred deferred) | Some (lbl,(h::def_subl as v)) -> (Some (lbl,List.length v))::(pathrec (def_subl@deferred) h) in pathrec [] let tm_of tm lbl = try [Tlm.map tm lbl] with Not_found -> [] let lookup tm dna t = let rec lookrec t tm = (tm_of tm None)@ (match dna t with | None -> [] | Some(lbl,v) -> List.fold_left (fun l c -> List.flatten(List.map (lookrec c) l)) (tm_of tm (Some(lbl,List.length v))) v) in List.flatten(List.map Tlm.xtract (lookrec t tm)) let add tm dna (pat,inf) = let p = path_of dna pat in Tlm.add tm (p,(pat,inf)) let rmv tm dna (pat,inf) = let p = path_of dna pat in Tlm.rmv tm (p,(pat,inf)) let app f tm = Tlm.app (fun (_,p) -> f p) tm