+++ /dev/null
-(* Copyright (C) 2000, HELM Team.
- *
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- *
- * HELM is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * HELM is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA 02111-1307, USA.
- *
- * For details, see the HELM World-Wide-Web page,
- * http://cs.unibo.it/helm/.
- *)
-
-(******************************************************************************)
-(* *)
-(* PROJECT HELM *)
-(* *)
-(* Claudio Sacerdoti Coen <sacerdot@cs.unibo.it> *)
-(* 14/06/2000 *)
-(* *)
-(* *)
-(******************************************************************************)
-
-let get_annotation ids_to_annotations xpath =
- try
- Some (Hashtbl.find ids_to_annotations xpath)
- with
- Not_found -> None
-;;
-
-exception MoreThanOneTargetFor of Cic.id;;
-
-(* creates a hashtable mapping each unique id to a node of the annotated
-object *)
-let get_ids_to_targets annobj =
- let module C = Cic in
- let ids_to_targets = Hashtbl.create 503 in
- let set_target id target =
- try
- ignore (Hashtbl.find ids_to_targets id) ;
- raise (MoreThanOneTargetFor id)
- with
- Not_found -> Hashtbl.add ids_to_targets id target
- in
- let rec add_target_term t =
- match t with
- C.ARel (id,_,_,_)
- | C.AMeta (id,_,_)
- | C.ASort (id,_)
- | C.AImplicit (id, _) ->
- set_target id (C.Term t)
- | C.ACast (id,va,ty) ->
- set_target id (C.Term t) ;
- add_target_term va ;
- add_target_term ty
- | C.AProd (id,_,so,ta)
- | C.ALambda (id,_,so,ta)
- | C.ALetIn (id,_,so,ta) ->
- set_target id (C.Term t) ;
- add_target_term so ;
- add_target_term ta
- | C.AAppl (id,l) ->
- set_target id (C.Term t) ;
- List.iter add_target_term l
- | C.AVar (id,_,exp_named_subst)
- | C.AConst (id,_,exp_named_subst)
- | C.AMutInd (id,_,_,exp_named_subst)
- | C.AMutConstruct (id,_,_,_,exp_named_subst) ->
- set_target id (C.Term t) ;
- List.iter (function (_,t) -> add_target_term t) exp_named_subst
- | C.AMutCase (id,_,_,ot,it,pl) ->
- set_target id (C.Term t) ;
- List.iter add_target_term (ot::it::pl)
- | C.AFix (id,_,ifl) ->
- set_target id (C.Term t) ;
- List.iter
- (function (_,_,_,ty,bo) ->
- add_target_term ty ;
- add_target_term bo
- ) ifl
- | C.ACoFix (id,_,cfl) ->
- set_target id (C.Term t) ;
- List.iter
- (function (_,_,ty,bo) ->
- add_target_term ty ;
- add_target_term bo
- ) cfl
- in
- let add_target_obj annobj =
- match annobj with
- C.AConstant (id,idbody,_,bo,ty,_) ->
- set_target id (C.Object annobj) ;
- (match idbody,bo with
- Some idbody,Some bo ->
- set_target idbody (C.ConstantBody annobj) ;
- add_target_term bo
- | None, None -> ()
- | _,_ -> assert false
- ) ;
- add_target_term ty
- | C.AVariable (id,_,None,ty,_) ->
- set_target id (C.Object annobj) ;
- add_target_term ty
- | C.AVariable (id,_,Some bo,ty,_) ->
- set_target id (C.Object annobj) ;
- add_target_term bo ;
- add_target_term ty
- | C.ACurrentProof (id,idbody,_,cl,bo,ty,_) ->
- set_target id (C.Object annobj) ;
- set_target idbody (C.ConstantBody annobj) ;
- List.iter (function (cid,_,context, t) as annconj ->
- set_target cid (C.Conjecture annconj) ;
- List.iter
- (function ((hid,h) as annhyp) ->
- set_target hid (C.Hypothesis annhyp) ;
- match h with
- Some (_,C.ADecl at) -> add_target_term at
- | Some (_,C.ADef at) -> add_target_term at
- | None -> ()
- ) context;
- add_target_term t) cl ;
- add_target_term bo ;
- add_target_term ty
- | C.AInductiveDefinition (id,itl,_,_) ->
- set_target id (C.Object annobj) ;
- List.iter
- (function (_,_,_,arity,cl) ->
- add_target_term arity ;
- List.iter (function (_,ty) -> add_target_term ty) cl
- ) itl
- in
- add_target_obj annobj ;
- ids_to_targets
-;;