]> matita.cs.unibo.it Git - helm.git/commitdiff
Huge commit with several changes:
authorClaudio Sacerdoti Coen <claudio.sacerdoticoen@unibo.it>
Wed, 3 Jun 2009 08:56:58 +0000 (08:56 +0000)
committerClaudio Sacerdoti Coen <claudio.sacerdoticoen@unibo.it>
Wed, 3 Jun 2009 08:56:58 +0000 (08:56 +0000)
1) CicNotationPres.render: type changed to make it more general (no
   dependency on the Hashtbl) and URI/REFERENCE agnostic.
   A compatibility function CicNotationPres.lookup_uri is provided to
   easily map the (old) Hashtbl to the (new) lookup function.
2) user interface partially changed to render NG objects in the CicBrowser
   and to follow NG hyperlinks
3) New CicNotationPt entries NRef (similar to Uri) and NRefPattern
   (similar to UriPattern) to avoid hijacking the old Uris (actually,
   uris + xpointers) to also hold new references.
   This allows to properly implement notation (for NG) and to properly
   handle hyperlinks.
4) all remaining Warnings for unused variables fixed (in some way or
   another, hopefully the correct one)
5) GrafiteEngine, NQed: the height of an object is now recomputed just
   before putting it in the environment. This fixes all the bugs related
   to reduction.
6) GrafiteParser/LexiconEngine: both old URIs and new references are now
   allowed in NG terms and in notations
7) ng_cic_content: rendering functions now return an "id |-> reference" table
   to correctly implement MathML hrefs
8) NReference: new compare function
9) NCicUntrusted: new height_of_obj_kind function (to be used in GrafiteEngine)
10) OCic2NCic: new reference_of_oxuri function to map old uris + xpointers
   into new references
11) bug fixed: after the commit by Enrico that starts using the extensible
   PTS, the old-to-new objects translations used to map Type into "Type" which
   was not declared. Type is now mapped into Type[0] and Type (as a "notation")
   is now a synonim of Type[0] (only during parsing for now)
12) bug fixed: after the commit by Enrico that cleans up terms for
    alpha-conversion and dummy products, the test in NCicTypeChecker that
    verifies the consistency of left parameters in constructor --- that used
    to do that NOT up to alpha-conversion --- used to fail when dummy products
    were found. The test is now relaxed to include alpha-conversion.
13) bug fixed: NCicTypeChecker did not verify that a .dec reference pointed to
    an axiom and that a .def reference did not point to an axiom. Fixed.

50 files changed:
helm/software/components/METAS/meta.helm-acic_content.src
helm/software/components/Makefile
helm/software/components/acic_content/acic2astMatcher.ml
helm/software/components/acic_content/cicNotationPp.ml
helm/software/components/acic_content/cicNotationPt.ml
helm/software/components/acic_content/cicNotationUtil.ml
helm/software/components/acic_content/cicNotationUtil.mli
helm/software/components/acic_content/termAcicContent.ml
helm/software/components/binaries/transcript/.depend
helm/software/components/binaries/transcript/.depend.opt
helm/software/components/cic_disambiguation/cicDisambiguate.ml
helm/software/components/cic_proof_checking/cicPp.ml
helm/software/components/content_pres/cicNotationLexer.ml
helm/software/components/content_pres/cicNotationParser.ml
helm/software/components/content_pres/cicNotationPres.ml
helm/software/components/content_pres/cicNotationPres.mli
helm/software/components/content_pres/content2pres.ml
helm/software/components/content_pres/sequent2pres.ml
helm/software/components/content_pres/sequent2pres.mli
helm/software/components/disambiguation/disambiguate.ml
helm/software/components/grafite/grafiteAstPp.ml
helm/software/components/grafite_engine/grafiteEngine.ml
helm/software/components/grafite_parser/grafiteParser.ml
helm/software/components/grafite_parser/test_parser.ml
helm/software/components/lexicon/lexiconEngine.ml
helm/software/components/lexicon/lexiconMarshal.ml
helm/software/components/ng_cic_content/nTermCicContent.ml
helm/software/components/ng_cic_content/nTermCicContent.mli
helm/software/components/ng_cic_content/ncic2astMatcher.ml
helm/software/components/ng_disambiguation/nCicDisambiguate.ml
helm/software/components/ng_kernel/nCicTypeChecker.ml
helm/software/components/ng_kernel/nCicUntrusted.ml
helm/software/components/ng_kernel/nCicUntrusted.mli
helm/software/components/ng_kernel/nReference.ml
helm/software/components/ng_kernel/nReference.mli
helm/software/components/ng_kernel/oCic2NCic.ml
helm/software/components/ng_kernel/oCic2NCic.mli
helm/software/components/ng_tactics/nCicElim.ml
helm/software/components/syntax_extensions/.depend
helm/software/components/tactics/setoids.ml
helm/software/components/tptp_grafite/tptp2grafite.ml
helm/software/components/urimanager/uriManager.ml
helm/software/matita/applyTransformation.ml
helm/software/matita/applyTransformation.mli
helm/software/matita/matita.ml
helm/software/matita/matitaGuiTypes.mli
helm/software/matita/matitaMathView.ml
helm/software/matita/matitaScript.ml
helm/software/matita/matitaTypes.ml
helm/software/matita/matitaTypes.mli

index 8e10b789ec32f0582b35c5ae4f7c3b078f526b6f..0013afa4145c60d4ee9ee14c433c9b8cfe7cd06c 100644 (file)
@@ -1,4 +1,4 @@
-requires="helm-library"
+requires="helm-library helm-ng_kernel"
 version="0.0.1"
 archive(byte)="acic_content.cma"
 archive(native)="acic_content.cmxa"
index f9897ec7943587aacc079e6206ac25a5801521b9..3303e7a5996d0d57e642dd32fc0c7eaa30ce124a 100644 (file)
@@ -23,8 +23,8 @@ MODULES =                     \
        cic_exportation         \
        metadata                \
        library                 \
-       acic_content            \
        ng_kernel               \
+       acic_content            \
        grafite                 \
        ng_cic_content          \
        content_pres            \
index 908aa942f8b34d7569e417a3fadc0d11e97d7282..2062b6c0651800235dd089d326e71b966f762b8e 100644 (file)
@@ -35,6 +35,7 @@ struct
     type cic_mask_t =
       Blob
     | Uri of UriManager.uri
+    | NRef of NReference.reference
     | Appl of cic_mask_t list
 
     let uri_of_term t = CicUtil.uri_of_term (Deannotate.deannotate_term t)
@@ -52,6 +53,7 @@ struct
       Hashtbl.hash mask, tl
 
     let mask_of_appl_pattern = function
+      | Ast.NRefPattern nref -> NRef nref, []
       | Ast.UriPattern uri -> Uri uri, []
       | Ast.ImplicitPattern
       | Ast.VarPattern _ -> Blob, []
@@ -71,6 +73,7 @@ struct
       | Ast.ImplicitPattern
       | Ast.VarPattern _ -> PatternMatcher.Variable
       | Ast.UriPattern _
+      | Ast.NRefPattern _
       | Ast.ApplPattern _ -> PatternMatcher.Constructor
   end
 
index b2cb12f9280120e595e6c90948b5e47b28f75ac3..0d868c0027e1f0e7a53a8755086f213f5ba747ed 100644 (file)
@@ -138,8 +138,8 @@ let rec pp_term ?(pp_parens = true) t =
           (String.concat " and " (List.map map definitions))
           (pp_term term)
     | Ast.Ident (name, Some []) | Ast.Ident (name, None)
-    | Ast.Uri (name, Some []) | Ast.Uri (name, None) ->
-        name
+    | Ast.Uri (name, Some []) | Ast.Uri (name, None) -> name
+    | Ast.NRef nref -> NReference.string_of_reference nref
     | Ast.Ident (name, Some substs)
     | Ast.Uri (name, Some substs) ->
         sprintf "%s \\subst [%s]" name (pp_substs substs)
@@ -357,6 +357,7 @@ let pp_env env =
 
 let rec pp_cic_appl_pattern = function
   | Ast.UriPattern uri -> UriManager.string_of_uri uri
+  | Ast.NRefPattern nref -> NReference.string_of_reference nref
   | Ast.VarPattern name -> name
   | Ast.ImplicitPattern -> "?"
   | Ast.ApplPattern aps ->
index 46381e4bc505ea6608fc4548af9cf8aec88f1863..8dbfea7992019a4e69a894cda12cec357b55d666 100644 (file)
@@ -92,6 +92,7 @@ type term =
   | UserInput (* place holder for user input, used by MatitaConsole, not to be
               used elsewhere *)
   | Uri of string * subst list option (* as Ident, for long names *)
+  | NRef of NReference.reference
 
   (* Syntax pattern extensions *)
 
@@ -164,6 +165,7 @@ type argument_pattern =
 
 type cic_appl_pattern =
   | UriPattern of UriManager.uri
+  | NRefPattern of NReference.reference
   | VarPattern of string
   | ImplicitPattern
   | ApplPattern of cic_appl_pattern list
index 60fe6357d5f1c4c878187f12e086c6ce49cd3006..b426863cf613e7f77d1123bb89cf747fe4ac18cf 100644 (file)
@@ -62,6 +62,7 @@ let visit_ast ?(special_k = fun _ -> assert false)
       | Ast.Magic _
       | Ast.Variable _) as t -> special_k t
     | (Ast.Ident _
+      | Ast.NRef _
       | Ast.Implicit
       | Ast.Num _
       | Ast.Sort _
@@ -326,13 +327,21 @@ let dressn ~sep:sauces =
 let find_appl_pattern_uris ap =
   let rec aux acc =
     function
-    | Ast.UriPattern uri -> uri :: acc
+    | Ast.UriPattern uri -> `Uri uri :: acc
+    | Ast.NRefPattern nref -> `NRef nref :: acc
     | Ast.ImplicitPattern
     | Ast.VarPattern _ -> acc
     | Ast.ApplPattern apl -> List.fold_left aux acc apl
   in
   let uris = aux [] ap in
-  HExtlib.list_uniq (List.fast_sort UriManager.compare uris)
+  let cmp u1 u2 =
+   match u1,u2 with
+      `Uri u1, `Uri u2 -> UriManager.compare u1 u2
+    | `NRef r1, `NRef r2 -> NReference.compare r1 r2
+    | `Uri _,`NRef _ -> -1
+    | `NRef _, `Uri _ -> 1
+  in
+  HExtlib.list_uniq (List.fast_sort cmp uris)
 
 let rec find_branch =
   function
index 5a4e1c536f4bdb5f82023a0ac362e690019498f2..77350a2ac9ac987f707aae624b0e30d5b3b6fd52 100644 (file)
@@ -76,7 +76,8 @@ val group: CicNotationPt.term list -> CicNotationPt.term
 val ungroup: CicNotationPt.term list -> CicNotationPt.term list
 
 val find_appl_pattern_uris:
-  CicNotationPt.cic_appl_pattern -> UriManager.uri list
+  CicNotationPt.cic_appl_pattern ->
+   [`Uri of UriManager.uri | `NRef of NReference.reference] list
 
 val find_branch:
   CicNotationPt.term -> CicNotationPt.term
index 9176a8b56808af9bb6a3beaee3cc211e0998e603..0c0b0232829ff10619d71bd9985fb535e91e9a71 100644 (file)
@@ -507,6 +507,7 @@ let instantiate_appl_pattern
   in
   let rec aux = function
     | Ast.UriPattern uri -> term_of_uri uri
+    | Ast.NRefPattern _ -> assert false
     | Ast.ImplicitPattern -> mk_implicit false
     | Ast.VarPattern name -> lookup name
     | Ast.ApplPattern terms -> mk_appl (List.map aux terms)
index bb6f22a64b02f88c3881f2c3f490d7f81b186897..87d1ed25c2745435771cee189c10da4a99854448 100644 (file)
@@ -1,6 +1,11 @@
 gallina8Parser.cmi: types.cmo 
 grafiteParser.cmi: types.cmo 
 grafite.cmi: types.cmo 
+engine.cmi: 
+types.cmo: 
+types.cmx: 
+options.cmo: 
+options.cmx: 
 gallina8Parser.cmo: types.cmo options.cmo gallina8Parser.cmi 
 gallina8Parser.cmx: types.cmx options.cmx gallina8Parser.cmi 
 gallina8Lexer.cmo: options.cmo gallina8Parser.cmi 
index efadc681eee16cb3cd170845fdd1c7549fbb89b0..f17459162ce81c0ad9c5352cca5e9d99f43cb81c 100644 (file)
@@ -1,6 +1,11 @@
 gallina8Parser.cmi: types.cmx 
 grafiteParser.cmi: types.cmx 
 grafite.cmi: types.cmx 
+engine.cmi: 
+types.cmo: 
+types.cmx: 
+options.cmo: 
+options.cmx: 
 gallina8Parser.cmo: types.cmx options.cmx gallina8Parser.cmi 
 gallina8Parser.cmx: types.cmx options.cmx gallina8Parser.cmi 
 gallina8Lexer.cmo: options.cmx gallina8Parser.cmi 
index b869536bf495cf5e3046a144be2bb39a1d983cde..749f1434d2f82a34337fdd9d245d2e377672a084 100644 (file)
@@ -392,8 +392,10 @@ let interpretate_term ~mk_choice ?(create_dummy_ids=false) ~context ~env ~uri
                 List.fold_right (build_term inductiveFuns) inductiveFuns
                  cic_body)
     | CicNotationPt.Ident _
-    | CicNotationPt.Uri _ when is_path -> raise Disambiguate.PathNotWellFormed
-    | CicNotationPt.Ident (name, subst)
+    | CicNotationPt.Uri _
+    | CicNotationPt.NRef _ when is_path -> raise Disambiguate.PathNotWellFormed
+    | CicNotationPt.NRef _ -> assert false
+    | CicNotationPt.Ident (name,subst)
     | CicNotationPt.Uri (name, subst) as ast ->
         let is_uri = function CicNotationPt.Uri _ -> true | _ -> false in
         (try
index 58f319f4a8fae7f5a91d0e4c2f9e68370d930b8e..97213404e7244a0b8c082b68b44f1d12bf14d53c 100644 (file)
@@ -412,7 +412,7 @@ let rec check_rec ctx string_name =
     | Cic.Cast (te,ty) -> check_rec ctx string_name te
     | Cic.Prod (name,so,dest) -> 
        let l_string_name = check_rec ctx string_name so in
-       check_rec (name::ctx) string_name dest
+       check_rec (name::ctx) l_string_name dest
     | Cic.Lambda (name,so,dest) -> 
         let string_name =
           match name with
index 17a5bd5bbdebc7f3a5d61876ece74478d9a34474..21031d002fc10fba43eb915623f054d45743ecd0 100644 (file)
@@ -149,6 +149,17 @@ let regexp uri =
   ('.' ident)+                        (* ext *)
   ("#xpointer(" number ('/' number)+ ")")?  (* xpointer *)
 
+let regexp nreference =
+  "cic:/"                             (* schema *)
+  uri_step ('/' uri_step)*            (* path *)
+  '.'
+  ( "dec"
+  | "def" "(" number ")"
+  | "fix" "(" number "," number "," number ")"
+  | "cfx" "(" number ")"
+  | "ind" "(" number "," number "," number ")"
+  | "con" "(" number "," number "," number ")") (* ext + reference *)
+
 let error lexbuf msg =
   let begin_cnum, end_cnum = Ulexing.loc lexbuf in
   raise (Error (begin_cnum, end_cnum, msg))
@@ -311,6 +322,7 @@ and level2_ast_token =
   | pident -> handle_keywords lexbuf (Hashtbl.mem !level2_ast_keywords) "PIDENT"
   | number -> return lexbuf ("NUMBER", Ulexing.utf8_lexeme lexbuf)
   | tex_token -> return lexbuf (expand_macro lexbuf)
+  | nreference -> return lexbuf ("NREF", Ulexing.utf8_lexeme lexbuf)
   | uri -> return lexbuf ("URI", Ulexing.utf8_lexeme lexbuf)
   | qstring ->
       return lexbuf ("QSTRING", remove_quotes (Ulexing.utf8_lexeme lexbuf))
index bb3d29f069d336544546c1a22e86fbdfc9a71f4c..117f0926e68a1913be2b75410af406f8ae007ccd 100644 (file)
@@ -748,6 +748,7 @@ EXTEND
           return_term loc (Ast.Ident (id, Some s))
       | s = CSYMBOL -> return_term loc (Ast.Symbol (s, 0))
       | u = URI -> return_term loc (Ast.Uri (u, None))
+      | r = NREF -> return_term loc (Ast.NRef (NReference.reference_of_string r))
       | n = NUMBER -> return_term loc (Ast.Num (n, 0))
       | IMPLICIT -> return_term loc (Ast.Implicit)
       | PLACEHOLDER -> return_term loc Ast.UserInput
index 1a092909e113cdafcd00343281d5b9192c2056b8..35f128a05b524078b117a394cb51b87a8554f6d1 100644 (file)
@@ -200,16 +200,17 @@ let add_parens child_prec curr_prec t =
       BoxPp.render_to_string (function x::_->x|_->assert false)
         ~map_unicode_to_tex:false 80 t);*)t)
 
-let render ids_to_uris ?(prec=(-1)) =
+let lookup_uri ids_to_uris id =
+ try
+   let uri = Hashtbl.find ids_to_uris id in
+   Some (UriManager.string_of_uri uri)
+ with Not_found -> None
+;;
+
+let render ~lookup_uri ?(prec=(-1)) =
   let module A = Ast in
   let module P = Mpresentation in
 (*   let use_unicode = true in *)
-  let lookup_uri id =
-    (try
-      let uri = Hashtbl.find ids_to_uris id in
-      Some (UriManager.string_of_uri uri)
-    with Not_found -> None)
-  in
   let make_href xmlattrs xref =
     let xref_uris =
       List.fold_right
index 1d06d19baccbeeace181a2a761bbef4f5a3298e5..6a25e56724723baea4849d47e771d12bc2fe7518 100644 (file)
@@ -35,11 +35,14 @@ val box_of_mpres: mathml_markup -> boxml_markup
 
 (** {2 Rendering} *)
 
+val lookup_uri: (Cic.id,UriManager.uri) Hashtbl.t -> Cic.id -> string option
+
 (** level 1 -> level 0
  * @param ids_to_uris mapping id -> uri for hyperlinking
  * @param prec precedence level *)
 val render:
- (Cic.id, UriManager.uri) Hashtbl.t -> ?prec:int -> CicNotationPt.term -> markup
+ lookup_uri:(Cic.id -> string option) -> ?prec:int -> CicNotationPt.term ->
+  markup
 
 (** level 0 -> xml stream *)
 val print_xml: markup -> Xml.token Stream.t
index fc3a47b5e1c564fb168e1fcba94b09ccd40fa86e..46f53d8860c85a00ac600373c36e63b5f74dbfa9 100644 (file)
@@ -982,5 +982,6 @@ let content2pres
        TermAcicContent.ast_of_acic ~output_type:`Term ids_to_inner_sorts annterm
       in
        CicNotationPres.box_of_mpres
-        (CicNotationPres.render ids_to_uris ~prec
+        (CicNotationPres.render
+          ~lookup_uri:(CicNotationPres.lookup_uri ids_to_uris) ~prec
           (TermContentPres.pp_ast ast)))
index b1bc387581da31add8b68ac7879f3bebb605ce52..549f5c7c58d6437216b9c1d9320d19856938ee62 100644 (file)
@@ -102,12 +102,19 @@ let sequent2pres ~ids_to_inner_sorts =
        TermAcicContent.ast_of_acic ~output_type:`Term ids_to_inner_sorts annterm
       in
       CicNotationPres.box_of_mpres
-        (CicNotationPres.render ids_to_uris
+        (CicNotationPres.render
+          ~lookup_uri:(CicNotationPres.lookup_uri ids_to_uris)
           (TermContentPres.pp_ast ast)))
 
-let nsequent2pres ~subst =
+let nsequent2pres ~ids_to_nrefs ~subst =
+ let lookup_uri id =
+  try
+   let nref = Hashtbl.find ids_to_nrefs id in
+    Some (NReference.string_of_reference nref)
+  with Not_found -> None
+ in
   sequent2pres0
     (fun ast ->
       CicNotationPres.box_of_mpres
-       (CicNotationPres.render (Hashtbl.create 1)
+       (CicNotationPres.render ~lookup_uri
          (TermContentPres.pp_ast ast)))
index 6866cd3ae8032cde056a90e9146dc8ec92b9426c..a19e7b1951c0298fa27663d8b016a0627ce78cf9 100644 (file)
@@ -38,5 +38,6 @@ val sequent2pres :
     CicNotationPres.boxml_markup
 
 val nsequent2pres :
+ ids_to_nrefs:(NTermCicContent.id, NReference.reference) Hashtbl.t ->
  subst:NCic.substitution -> CicNotationPt.term Content.conjecture ->
   CicNotationPres.boxml_markup
index fa63d1f484e6daca79d910587dafd579fcf5ed15..ca6146e5614011db63632dbea398e7a9bca109a4 100644 (file)
@@ -310,6 +310,7 @@ let rec domain_of_term ?(loc = HExtlib.dummy_floc) ~context = function
                 [] subst in
             [ Node ([loc], Id name, terms) ]))
   | Ast.Uri _ -> []
+  | Ast.NRef _ -> []
   | Ast.Implicit -> []
   | Ast.Num (num, i) -> [ Node ([loc], Num i, []) ]
   | Ast.Meta (index, local_context) ->
index b74677949f5dc309e914f60b5b22317da298abd3..e335c1b63c559d16a93ee7bf047ff8ecdbb59ad2 100644 (file)
@@ -101,6 +101,7 @@ let pp_ntactic ~map_unicode_to_tex = function
   | NId _ -> "nid"
   | NIntro (_,n) -> "#" ^ n
   | NRewrite (_,dir,n,where) -> "nrewrite" ^ assert false
+  | NReduce _ | NGeneralize _ | NLetIn _ | NAssert _ -> assert false
 ;;
 
 let rec pp_tactic ~map_unicode_to_tex ~term_pp ~lazy_term_pp =
@@ -394,6 +395,9 @@ let pp_executable ~map_unicode_to_tex ~term_pp ~lazy_term_pp ~obj_pp =
   | NonPunctuationTactical (_, tac, punct) ->
      pp_non_punctuation_tactical tac
      ^ pp_punctuation_tactical punct
+  | NNonPunctuationTactical (_, tac, punct) ->
+     pp_non_punctuation_tactical tac
+     ^ pp_punctuation_tactical punct
   | Command (_, cmd) -> pp_command ~term_pp ~obj_pp cmd ^ "."
                       
 let pp_comment ~map_unicode_to_tex ~term_pp ~lazy_term_pp ~obj_pp =
index a0fdb92d7e9f1319c5b5746ddd775e55e09d2855..8101dd667b96572d2581108e806004b28ad8f007 100644 (file)
@@ -760,8 +760,7 @@ let rec eval_command = {ec_go = fun ~disambiguate_command opts status
       let name = UriManager.name_of_uri uri in
       let obj = Cic.Constant (name,Some (Lazy.force bo),ty,[],attrs) in
       let status, lemmas = add_obj uri obj status in
-       {status with 
-         GrafiteTypes.proof_status = GrafiteTypes.No_proof},
+       {status with GrafiteTypes.proof_status = GrafiteTypes.No_proof},
         (*CSC: I throw away the arities *)
         `Old (uri::lemmas)
   | GrafiteAst.NQed loc ->
@@ -769,30 +768,29 @@ let rec eval_command = {ec_go = fun ~disambiguate_command opts status
        | GrafiteTypes.ProofMode
           { NTacStatus.istatus =
              {NTacStatus.pstatus = pstatus; lstatus=lexicon_status} } ->
-            let uri,height,menv,subst,obj = pstatus in
+            let uri,height,menv,subst,obj_kind = pstatus in
              if menv <> [] then
               raise
                (GrafiteTypes.Command_error"You can't Qed an incomplete theorem")
              else
-              let obj =
-prerr_endline "CSC: here we should fix the height!!!";
-               (uri,height,[],[],
-                NCicUntrusted.map_obj_kind 
-                  (NCicUntrusted.apply_subst subst [])
-                 obj) in
-              NCicTypeChecker.typecheck_obj obj;
-              NCicLibrary.add_obj uri obj;
-              let objs = NCicElim.mk_elims obj in
-              let uris =
-               uri::
-                List.map
-                 (fun (uri,_,_,_,_) as obj ->
-                   NCicTypeChecker.typecheck_obj obj;
-                   NCicLibrary.add_obj uri obj;
-                   uri
-                 ) objs
-              in
-               {status with 
+              let obj_kind =
+               NCicUntrusted.map_obj_kind 
+                (NCicUntrusted.apply_subst subst []) obj_kind in
+              let height = NCicUntrusted.height_of_obj_kind uri obj_kind in
+              let obj = uri,height,[],[],obj_kind in
+               NCicTypeChecker.typecheck_obj obj;
+               NCicLibrary.add_obj uri obj;
+               let objs = NCicElim.mk_elims obj in
+               let uris =
+                uri::
+                 List.map
+                  (fun (uri,_,_,_,_) as obj ->
+                    NCicTypeChecker.typecheck_obj obj;
+                    NCicLibrary.add_obj uri obj;
+                    uri
+                  ) objs
+               in
+                {status with 
                  GrafiteTypes.ng_status = 
                   GrafiteTypes.CommandMode lexicon_status },`New uris
        | _ -> raise (GrafiteTypes.Command_error "Not in proof mode"))
index d0a97072c0d1c1c2b7a1ee366863e5992d80d93c..ce7f5c6ca3fdd0a495086f5cec96d6d5b09b70f4 100644 (file)
@@ -709,6 +709,7 @@ EXTEND
     ];
     level3_term: [
       [ u = URI -> N.UriPattern (UriManager.uri_of_string u)
+      | r = NREF -> N.NRefPattern (NReference.reference_of_string r)
       | IMPLICIT -> N.ImplicitPattern
       | id = IDENT -> N.VarPattern id
       | LPAREN; terms = LIST1 SELF; RPAREN ->
@@ -748,6 +749,9 @@ EXTEND
     | nflavour = ntheorem_flavour; name = IDENT; SYMBOL ":"; typ = term;
       body = OPT [ SYMBOL <:unicode<def>> (* ≝ *); body = term -> body ] ->
         G.NObj (loc, N.Theorem (nflavour, name, typ, body))
+    | nflavour = ntheorem_flavour; name = IDENT; SYMBOL <:unicode<def>> (* ≝ *);
+      body = term ->
+        G.NObj (loc, N.Theorem (nflavour, name, N.Implicit, Some body))
     | flavour = theorem_flavour; name = IDENT; SYMBOL ":"; typ = term;
       body = OPT [ SYMBOL <:unicode<def>> (* ≝ *); body = term -> body ] ->
         G.Obj (loc, N.Theorem (flavour, name, typ, body))
index 76c402c196c757327525aa96e10b552230f10711..c87d41ed582e69613ea5493004dd37838b585190 100644 (file)
@@ -41,7 +41,8 @@ let dump_xml t id_to_uri fname =
   prerr_endline (sprintf "dumping MathML to %s ..." fname);
   flush stdout;
   let oc = open_out fname in
-  let markup = CicNotationPres.render id_to_uri t in
+  let markup =
+   CicNotationPres.render ~lookup_uri:(CicNotationPres.lookup_uri id_to_uri)t in
   let xml_stream = CicNotationPres.print_xml markup in
   Xml.pp_to_outchan xml_stream oc;
   close_out oc
index c86e161357eb9cd136c6a1a0fd9ef8aa6c37835b..805da25c8e53c18340649fcbd6ead78db3b6fdde 100644 (file)
@@ -120,12 +120,15 @@ let rec eval_command ?(mode=L.WithPreferences) status cmd =
           ->
            let item = DisambiguateTypes.Id id in
             begin try
-              let uri =
-               match DisambiguateTypes.Environment.find item status.aliases with
-                  L.Ident_alias (_, uri)-> UriManager.uri_of_string uri
-                | _ -> assert false
-              in
-               CicNotationPt.UriPattern uri
+              match DisambiguateTypes.Environment.find item status.aliases with
+                 L.Ident_alias (_, uri) ->
+                  (try
+                    CicNotationPt.NRefPattern
+                     (NReference.reference_of_string uri)
+                   with
+                    NReference.IllFormedReference _ ->
+                     CicNotationPt.UriPattern (UriManager.uri_of_string uri))
+               | _ -> assert false
              with Not_found -> 
               prerr_endline ("LexiconEngine.eval_command: domain item not found: " ^ 
                (DisambiguateTypes.string_of_domain_item item));
index 7b9422db577ad66f1daebad802e362976c7cfb4d..ba7e583d555c8eb882b1f994bf8ba5b0d4312052 100644 (file)
@@ -45,6 +45,7 @@ let rehash_cmd_uris =
         function
         | CicNotationPt.UriPattern uri ->
             CicNotationPt.UriPattern (rehash_uri uri)
+        | CicNotationPt.NRefPattern _ -> assert false
         | CicNotationPt.ApplPattern args ->
             CicNotationPt.ApplPattern (List.map aux args)
         | CicNotationPt.VarPattern _
index 2022797a2dea9e251b2d0b47dc5e4a6897956d7a..da8061fde197d56c3d482c071d75276ffa74cae1 100644 (file)
@@ -32,6 +32,8 @@ module Ast = CicNotationPt
 let debug = false
 let debug_print s = if debug then prerr_endline (Lazy.force s) else ()
 
+type id = string
+
 (*
 type interpretation_id = int
 
@@ -47,15 +49,20 @@ let get_types uri =
       | _ -> assert false
 *)
 
-let idref () =
+let idref register_ref =
  let id = ref 0 in
-  function t ->
+  fun ?reference t ->
    incr id;
-   Ast.AttributedTerm (`IdRef ("i" ^ string_of_int !id), t)
+   let id = "i" ^ string_of_int !id in
+    (match reference with None -> () | Some r -> register_ref id r);
+    Ast.AttributedTerm (`IdRef id, t)
 ;;
 
 (* CODICE c&p da NCicPp *)
-let nast_of_cic0 ~idref ~output_type ~subst k ~context =
+let nast_of_cic0
+ ~(idref:
+    ?reference:NReference.reference -> CicNotationPt.term -> CicNotationPt.term)
+ ~output_type ~subst k ~context =
   function
     | NCic.Rel n ->
        (try 
@@ -64,7 +71,7 @@ let nast_of_cic0 ~idref ~output_type ~subst k ~context =
           idref (Ast.Ident (name,None))
         with Failure "nth" | Invalid_argument "List.nth" -> 
          idref (Ast.Ident ("-" ^ string_of_int (n - List.length context),None)))
-    | NCic.Const r -> idref (Ast.Ident (NCicPp.r2s true r, None))
+    | NCic.Const r -> idref ~reference:r (Ast.Ident (NCicPp.r2s true r, None))
     | NCic.Meta (n,lc) when List.mem_assoc n subst -> 
         let _,_,t,_ = List.assoc n subst in
          k ~context (NCicSubstitution.subst_meta lc t)
@@ -236,31 +243,31 @@ let instantiate32 idrefs env symbol args =
   else Ast.Appl (head :: List.map instantiate_arg args)
 
 let rec nast_of_cic1 ~idref ~output_type ~subst ~context term = 
-(*
-  let register_uri id uri = assert false in
-*)
   match (get_compiled32 ()) term with
   | None ->
      nast_of_cic0 ~idref ~output_type ~subst
       (nast_of_cic1 ~idref ~output_type ~subst) ~context term 
   | Some (env, ctors, pid) -> 
       let idrefs =
-(*
-        List.map
-          (fun term ->
-            let idref = idref term in
-            (try
-              register_uri idref
-                (CicUtil.uri_of_term (Deannotate.deannotate_term term))
-            with Invalid_argument _ -> ());
-            idref)
-          ctors
-*) []
+       List.map
+        (fun term ->
+          let attrterm =
+           idref
+            ~reference:
+              (match term with NCic.Const nref -> nref | _ -> assert false)
+           (CicNotationPt.Ident ("dummy",None))
+          in
+           match attrterm with
+              Ast.AttributedTerm (`IdRef id, _) -> id
+            | _ -> assert false
+        ) ctors
       in
       let env =
        List.map
         (fun (name, term) ->
-          name, nast_of_cic1 ~idref ~output_type ~subst ~context term) env
+          name,
+           nast_of_cic1 ~idref ~output_type ~subst ~context term
+        ) env
       in
       let _, symbol, args, _ =
         try
@@ -382,7 +389,11 @@ let instantiate_appl_pattern
 
 let nmap_sequent ~subst (i,(n,context,ty):int * NCic.conjecture) =
  let module K = Content in
- let nast_of_cic = nast_of_cic1 ~idref:(idref ()) ~output_type:`Term ~subst in
+ let ids_to_refs = Hashtbl.create 211 in
+ let register_ref = Hashtbl.add ids_to_refs in
+ let nast_of_cic =
+  nast_of_cic1 ~idref:(idref register_ref) ~output_type:`Term
+   ~subst in
  let context',_ =
   List.fold_right
    (fun item (res,context) ->
@@ -411,6 +422,6 @@ let nmap_sequent ~subst (i,(n,context,ty):int * NCic.conjecture) =
              })::res,item::context
    ) context ([],[])
  in
-  "-1",i,context',nast_of_cic ~context ty
+  ("-1",i,context',nast_of_cic ~context ty), ids_to_refs
 ;;
 
index fb62365530fe9231b46db5e8bcaafb2ecc85a018..5f1388bb22874498fe44380c91076b5455779a19 100644 (file)
@@ -82,4 +82,10 @@ val nast_of_cic :
   subst:NCic.substitution -> context:NCic.context -> NCic.term ->
    CicNotationPt.term
 *)
-val nmap_sequent : subst:NCic.substitution -> int * NCic.conjecture -> CicNotationPt.term Content.conjecture
+
+type id = string
+
+val nmap_sequent:
+ subst:NCic.substitution -> int * NCic.conjecture ->
+  CicNotationPt.term Content.conjecture *
+   (id, NReference.reference) Hashtbl.t    (* id -> reference *)
index 099e0b26a2c8f2d1ffd30415830448b33348a7b8..41d9aa08c7e08c0609d170e9e726c79b59045777 100644 (file)
@@ -34,14 +34,14 @@ struct
   struct
     type cic_mask_t =
       Blob
-    | Uri of UriManager.uri
+    | NRef of NReference.reference
     | Appl of cic_mask_t list
 
     let uri_of_term t = CicUtil.uri_of_term (Deannotate.deannotate_term t)
 
     let mask_of_cic = function
       | NCic.Appl tl -> Appl (List.map (fun _ -> Blob) tl), tl
-      | NCic.Const nref -> Uri (NCic2OCic.ouri_of_reference nref), []
+      | NCic.Const nref -> NRef nref, []
       | _ -> Blob, []
 
     let tag_of_term t =
@@ -49,7 +49,8 @@ struct
       Hashtbl.hash mask, tl
 
     let mask_of_appl_pattern = function
-      | Ast.UriPattern uri -> Uri uri, []
+      | Ast.UriPattern uri -> NRef (OCic2NCic.reference_of_oxuri uri), []
+      | Ast.NRefPattern nref -> NRef nref, []
       | Ast.ImplicitPattern
       | Ast.VarPattern _ -> Blob, []
       | Ast.ApplPattern pl -> Appl (List.map (fun _ -> Blob) pl), pl
@@ -70,6 +71,7 @@ struct
       | Ast.ImplicitPattern
       | Ast.VarPattern _ -> PatternMatcher.Variable
       | Ast.UriPattern _
+      | Ast.NRefPattern _
       | Ast.ApplPattern _ -> PatternMatcher.Constructor
   end
 
index 5ded5b886370c7c9230e9bfd6323e7be8522db3c..6e72042e83c6a34901de94fe5607e6f41ecc9088 100644 (file)
@@ -312,7 +312,8 @@ let interpretate_term_and_interpretate_term_option
         NCic.LetIn (cic_name, cic_typ, cic_def, cic_body)
     | CicNotationPt.LetRec (_kind, _defs, _body) -> NCic.Implicit `Term
     | CicNotationPt.Ident _
-    | CicNotationPt.Uri _ when is_path -> raise Disambiguate.PathNotWellFormed
+    | CicNotationPt.Uri _
+    | CicNotationPt.NRef _ when is_path -> raise Disambiguate.PathNotWellFormed
     | CicNotationPt.Ident (name, subst) ->
        assert (subst = None);
        (try
@@ -321,12 +322,13 @@ let interpretate_term_and_interpretate_term_option
          try NCic.Const (List.assoc name obj_context)
          with Not_found ->
            Disambiguate.resolve ~env ~mk_choice (Id name) (`Args []))
-    | CicNotationPt.Uri (name, subst) ->
+    | CicNotationPt.Uri (uri, subst) ->
        assert (subst = None);
        (try
-         NCic.Const (NRef.reference_of_string name)
+         NCic.Const (OCic2NCic.reference_of_oxuri(UriManager.uri_of_string uri))
         with NRef.IllFormedReference _ ->
          CicNotationPt.fail loc "Ill formed reference")
+    | CicNotationPt.NRef nref -> NCic.Const nref
     | CicNotationPt.Implicit -> NCic.Implicit `Term
     | CicNotationPt.UserInput -> NCic.Implicit `Hole
     | CicNotationPt.Num (num, i) -> 
index 8beca4cf0504285f32355529739aabfa73700e1a..0d3fc07d12458267ef78b7addf98d4a393502047 100644 (file)
@@ -744,13 +744,11 @@ and check_mutual_inductive_defs uri ~metasenv ~subst leftno tyl =
               (fun context item1 item2 ->
                 let convertible =
                  match item1,item2 with
-                   (n1,C.Decl ty1),(n2,C.Decl ty2) ->
-                     n1 = n2 && 
+                   (_,C.Decl ty1),(_,C.Decl ty2) ->
                      R.are_convertible ~metasenv ~subst context ty1 ty2
-                 | (n1,C.Def (bo1,ty1)),(n2,C.Def (bo2,ty2)) ->
-                     n1 = n2
-                     && R.are_convertible ~metasenv ~subst context ty1 ty2
-                     && R.are_convertible ~metasenv ~subst context bo1 bo2
+                 | (_,C.Def (bo1,ty1)),(_,C.Def (bo2,ty2)) ->
+                     R.are_convertible ~metasenv ~subst context ty1 ty2 &&
+                      R.are_convertible ~metasenv ~subst context bo1 bo2
                  | _,_ -> false
                 in
                  if not convertible then
@@ -1079,8 +1077,8 @@ and type_of_constant ((Ref.Ref (uri,_)) as ref) =
       let _,_,recno1,arity,_ = List.nth fl i in
       if h1 <> h2 || recno1 <> recno2 then error ();
       arity
-  | (_,_,_,_,C.Constant (_,_,_,ty,_)), Ref.Ref (_,Ref.Decl) -> ty
-  | (_,h1,_,_,C.Constant (_,_,_,ty,_)), Ref.Ref (_,Ref.Def h2) ->
+  | (_,_,_,_,C.Constant (_,_,None,ty,_)), Ref.Ref (_,Ref.Decl) -> ty
+  | (_,h1,_,_,C.Constant (_,_,Some _,ty,_)), Ref.Ref (_,Ref.Def h2) ->
      if h1 <> h2 then error ();
      ty
   | _ ->
index baae7f9c2f7486e1561b3ad6a47eddaeb7522c5b..dc26794a1a096cb4f9575e93cf9e826cbe83989a 100644 (file)
@@ -209,3 +209,42 @@ let rec apply_subst_metasenv subst = function
       (i,(name,apply_subst_context subst ctx,apply_subst subst ctx ty)) ::
          apply_subst_metasenv subst tl
 ;;
+
+let height_of_term tl =
+ let h = ref 0 in
+ let get_height (NReference.Ref (uri,_)) =
+  let _,height,_,_,_ = NCicEnvironment.get_checked_obj uri in
+   height in
+ let rec aux =
+  function
+     NCic.Meta (_,(_,NCic.Ctx l)) -> List.iter aux l
+   | NCic.Meta _ -> ()
+   | NCic.Rel _
+   | NCic.Sort _ -> ()
+   | NCic.Implicit _ -> assert false
+   | NCic.Const nref -> h := max !h (get_height nref)
+   | NCic.Prod (_,t1,t2)
+   | NCic.Lambda (_,t1,t2) -> aux t1; aux t2
+   | NCic.LetIn (_,s,ty,t) -> aux s; aux ty; aux t
+   | NCic.Appl l -> List.iter aux l
+   | NCic.Match (_,outty,t,pl) -> aux outty; aux t; List.iter aux pl
+ in
+  List.iter aux tl;
+  1 + !h
+;;
+
+let height_of_obj_kind uri =
+ function
+    NCic.Inductive _
+  | NCic.Constant (_,_,None,_,_)
+  | NCic.Fixpoint (false,_,_) -> 0
+  | NCic.Fixpoint (true,ifl,_) ->
+     let iflno = List.length ifl in
+      height_of_term
+       (List.fold_left
+        (fun l (_,_,_,ty,bo) ->
+          let bo = NCicTypeChecker.debruijn uri iflno [] bo in
+           ty::bo::l
+       ) [] ifl)
+  | NCic.Constant (_,_,Some bo,ty,_) -> height_of_term [bo;ty]
+;;
index 1df92163d845c4d55f689978c05cfed6d1e00748..9cde401b04542c5b0dd04eb4d4bfe8bbdcf66c43 100644 (file)
@@ -27,3 +27,5 @@ val mk_appl : NCic.term -> NCic.term list -> NCic.term
 (* the context is needed only to honour Barendregt's naming convention *)
 val apply_subst : NCic.substitution -> NCic.context -> NCic.term -> NCic.term
 val apply_subst_metasenv : NCic.substitution -> NCic.metasenv -> NCic.metasenv
+
+val height_of_obj_kind: NUri.uri -> NCic.obj_kind -> int
index be6760bf19e3702bf7da7d204b3a066b8a6313a1..e209d05bef8e8d3c28b13093addee5f4be070b69 100644 (file)
@@ -25,10 +25,15 @@ type reference = Ref of NUri.uri * spec
 
 let eq = (==);;
 
+let compare (Ref (u1,s1)) (Ref (u2,s2)) =
+ let res = NUri.compare u1 u2 in
+  if res = 0 then compare s1 s2 else res
+;;
+
 module OrderedStrings =
  struct
   type t = string
-  let compare (s1 : t) (s2 : t) = compare s1 s2
+  let compare (s1 : t) (s2 : t) = Pervasives.compare s1 s2
  end
 ;;
 
index d291b621b7140c828e12a5614ffd28a15ea85890..d7f87e57c1712e63cba89dd1ea29d49d00893c14 100644 (file)
@@ -26,6 +26,7 @@ type reference = private Ref of NUri.uri * spec
 val reference_of_spec: NUri.uri -> spec -> reference
 
 val eq: reference -> reference -> bool
+val compare: reference -> reference -> int
 val string_of_reference: reference -> string 
 val reference_of_string: string -> reference
 
index 2738b1c901835183078c7a24b0f3470475f13f02..225269b70fe101eaccf2ed9373c4c1a1634a0e92 100644 (file)
@@ -16,10 +16,7 @@ module Ref = NReference
 let nuri_of_ouri o = NUri.uri_of_string (UriManager.string_of_uri o);;
 
 let mk_type n = 
-  if n = 0 then
-     [false, NUri.uri_of_string ("cic:/matita/pts/Type.univ")]
-  else
-     [false, NUri.uri_of_string ("cic:/matita/pts/Type"^string_of_int n^".univ")]
+ [false, NUri.uri_of_string ("cic:/matita/pts/Type"^string_of_int n^".univ")]
 ;;
 
 let mk_cprop n = 
@@ -871,3 +868,11 @@ let convert_term uri ctx t =
    aux false [] [] 0 uri t
 ;;
 *)
+
+let reference_of_oxuri u =
+ let t = CicUtil.term_of_uri u in
+ let t',l = convert_term (UriManager.uri_of_string "cic:/dummy/dummy.con") t in
+  match t',l with
+     NCic.Const nref, [] -> nref
+   | _,_ -> assert false
+;;
index ddb1baa3d964b4d1a29d9aeb3e015ee36eaf1aea..fa3717ee4e3259e09f7771d2d56b7527adfe28d5 100644 (file)
@@ -15,6 +15,8 @@ val nuri_of_ouri: UriManager.uri -> NUri.uri
 
 val reference_of_ouri: UriManager.uri -> NReference.spec -> NReference.reference
 
+val reference_of_oxuri: UriManager.uri -> NReference.reference
+
 val convert_obj: UriManager.uri -> Cic.obj -> NCic.obj list
 val convert_term: UriManager.uri -> Cic.term -> NCic.term * NCic.obj list
 
index 7dcd6417fc507b92698d92b467bb33053cbc5833..fba21753a53ce6ef8b749839b716020ca7b702e8 100644 (file)
@@ -115,7 +115,7 @@ let mk_elims (uri,_,_,_,obj) =
        (BoxPp.render_to_string
          ~map_unicode_to_tex:false
          (function x::_ -> x | _ -> assert false)
-         80 (CicNotationPres.render (Hashtbl.create 0)
+         80 (CicNotationPres.render (fun _ -> None)
          (TermContentPres.pp_ast res)));
       []
   | _ -> []
index f3c6a8bd17a7351e99ce8e59905fda76a37cbf08..25e67131fca0487c4390d310d8307722b5058067 100644 (file)
@@ -1,2 +1,5 @@
+utf8Macro.cmi: 
+utf8MacroTable.cmo: 
+utf8MacroTable.cmx: 
 utf8Macro.cmo: utf8MacroTable.cmo utf8Macro.cmi 
 utf8Macro.cmx: utf8MacroTable.cmx utf8Macro.cmi 
index d85df1c4b1e2de3b215524257ee15d71b2ec9474..265ef99aa9368e01787b87b771b2012bf331354a 100644 (file)
@@ -958,7 +958,7 @@ let int_add_relation id a aeq refl sym trans =
      rel_X_relation_class = Cic.Sort Cic.Prop; (* dummy value, overwritten below *)
      rel_Xreflexive_relation_class = Cic.Sort Cic.Prop (* dummy value, overwritten below *)
    } in
-  let x_relation_class =
+  let _x_relation_class =
    let subst =
     let len = List.length a_quantifiers_rev in
      list_map_i (fun i _ -> Cic.Rel (len - i + 2)) 0 a_quantifiers_rev in
@@ -979,7 +979,7 @@ let int_add_relation id a aeq refl sym trans =
       IsDefinition Definition) in
 *) () in
   let id_precise = id ^ "_precise_relation_class" in
-  let xreflexive_relation_class =
+  let _xreflexive_relation_class =
    let subst =
     let len = List.length a_quantifiers_rev in
      list_map_i (fun i _ -> Cic.Rel (len - i)) 0 a_quantifiers_rev
index dc58c831c8a4573d0716d764f6f776a7c821c9d1..e2a05e1c79814016d6efa1f4eef9a1412ce0ca39 100644 (file)
@@ -349,8 +349,8 @@ let tptp2grafite ?(timeout=600) ?(def_depth=10) ?raw_preamble ~tptppath ~filenam
     let width = max_int in
     let term_pp content_term =
       let pres_term = TermContentPres.pp_ast content_term in
-      let dummy_tbl = Hashtbl.create 1 in
-      let markup = CicNotationPres.render dummy_tbl pres_term in
+      let lookup_uri = fun _ -> None in
+      let markup = CicNotationPres.render ~lookup_uri pres_term in
       let s = BoxPp.render_to_string List.hd width markup ~map_unicode_to_tex:false in
       Pcre.substitute 
         ~pat:"\\\\forall [Ha-z][a-z0-9_]*" ~subst:(fun x -> "\n" ^ x) s
index 9107994a1d31803bb45b602476225005a3a71bc1..2d099a4e9748bf64cae26ef76bf6361ce9986821 100644 (file)
@@ -193,7 +193,6 @@ let bodyuri_of_uri (uri, _) =
 
 let ind_uri_split ((s, _) as uri) =
     let noxp = strip_xpointer uri in
-    let length = String.length s in
     try 
       (let arg_index = String.rindex s '(' in
        try 
index d572a78d914fd0ef8a2fb1acc2e2de1b7e70e270..da4bccba0adff65b2f54d79d1f9e19fc37f09a77 100644 (file)
@@ -66,9 +66,10 @@ let mml_of_cic_sequent metasenv sequent =
     (ids_to_terms,ids_to_father_ids,ids_to_hypotheses,ids_to_inner_sorts)))
 
 let nmml_of_cic_sequent metasenv subst sequent =
-  let content_sequent = NTermCicContent.nmap_sequent ~subst sequent in 
+  let content_sequent,ids_to_refs =
+   NTermCicContent.nmap_sequent ~subst sequent in 
   let pres_sequent = 
-   Sequent2pres.nsequent2pres subst content_sequent in
+   Sequent2pres.nsequent2pres ids_to_refs subst content_sequent in
   let xmlpres = mpres_document pres_sequent in
    Xml2Gdome.document_of_xml DomMisc.domImpl xmlpres
 
@@ -88,6 +89,11 @@ let mml_of_cic_object obj =
    (ids_to_terms, ids_to_father_ids, ids_to_conjectures, ids_to_hypotheses,
   ids_to_inner_sorts,ids_to_inner_types)))
 
+let nmml_of_cic_object obj =
+ prerr_endline (NCicPp.ppobj obj);
+ assert false
+;;
+
 let txt_of_cic_sequent ~map_unicode_to_tex size metasenv sequent =
   let unsh_sequent,(asequent,ids_to_terms,
     ids_to_father_ids,ids_to_inner_sorts,ids_to_hypotheses)
@@ -111,8 +117,10 @@ let txt_of_cic_sequent_conclusion ~map_unicode_to_tex ~output_type size
   let t, ids_to_uris =
    TermAcicContent.ast_of_acic ~output_type ids_to_inner_sorts t in
   let t = TermContentPres.pp_ast t in
-  let t = CicNotationPres.render ids_to_uris t in
-  BoxPp.render_to_string ~map_unicode_to_tex
+  let t =
+   CicNotationPres.render ~lookup_uri:(CicNotationPres.lookup_uri ids_to_uris) t
+  in
+   BoxPp.render_to_string ~map_unicode_to_tex
     (function x::_ -> x | _ -> assert false) size t
 
 let txt_of_cic_term ~map_unicode_to_tex size metasenv context t = 
@@ -169,9 +177,10 @@ let term2pres ~map_unicode_to_tex n ids_to_inner_sorts annterm =
    let ast, ids_to_uris = 
     TermAcicContent.ast_of_acic ~output_type:`Term ids_to_inner_sorts annterm in
    let bobj =
-      CicNotationPres.box_of_mpres (
-         CicNotationPres.render ~prec:90 ids_to_uris 
-            (TermContentPres.pp_ast ast)) in
+    CicNotationPres.box_of_mpres (
+     CicNotationPres.render ~prec:90
+      ~lookup_uri:(CicNotationPres.lookup_uri ids_to_uris)
+      (TermContentPres.pp_ast ast)) in
    let render = function _::x::_ -> x | _ -> assert false in
    let mpres = CicNotationPres.mpres_of_box bobj in
    let s = BoxPp.render_to_string ~map_unicode_to_tex render n mpres in
index 1297be57f26dd55ed688ebc11745317c70daea5b..f41f0a7a1e27ad38e1fcf5240c954c0823e1f77d 100644 (file)
@@ -60,6 +60,8 @@ val mml_of_cic_object:
        (Cic.id, Cic2acic.sort_kind) Hashtbl.t * (* ids_to_inner_sorts *)
        (Cic.id, Cic2acic.anntypes) Hashtbl.t))  (* ids_to_inner_types *)
 
+val nmml_of_cic_object: NCic.obj -> Gdome.document
+
 val txt_of_cic_term: 
   map_unicode_to_tex:bool -> int -> Cic.metasenv -> Cic.context -> Cic.term ->
    string 
index 392a35ab7ce0e350436f956fad9fcc107caee778..9aa1fb2f1c3db6f04c493434edf6df0760cc1c43 100644 (file)
@@ -81,8 +81,15 @@ let _ =
   let sequents_viewer = MatitaMathView.sequentsViewer_instance () in
   sequents_viewer#load_logo;
   cic_math_view#set_href_callback
-    (Some (fun uri -> (MatitaMathView.cicBrowser ())#load
-      (`Uri (UriManager.uri_of_string uri))));
+    (Some (fun uri ->
+      let uri =
+       try
+        `Uri (UriManager.uri_of_string uri)
+       with
+        UriManager.IllFormedUri _ ->
+         `NRef (NReference.reference_of_string uri)
+      in
+      (MatitaMathView.cicBrowser ())#load uri));
   let browser_observer _ _ = MatitaMathView.refresh_all_browsers () in
   let sequents_observer _ grafite_status =
     sequents_viewer#reset;
index 51c700dc3177067a959c44072013416e5ac7e49b..18515dac57d70031883fa10a0c626110b116c5e4 100644 (file)
@@ -127,6 +127,7 @@ object
   method nload_sequent: NCic.metasenv -> NCic.substitution -> int -> unit
 
   method load_object: Cic.obj -> unit
+  method load_nobject: NCic.obj -> unit
 end
 
 class type sequentsViewer =
index 9c259a1cbdc58297d902974a20b8caa77014e8e5..ade02fb8087cb377f604810c9f805f4d6cb827f5 100644 (file)
@@ -629,6 +629,27 @@ object (self)
         end;
         self#load_root ~root:mathml#get_documentElement;
         current_mathml <- Some mathml);
+
+  method load_nobject obj =
+    let mathml = ApplyTransformation.nmml_of_cic_object obj in
+(*
+    self#set_cic_info
+      (Some (None, ids_to_terms, ids_to_hypotheses, ids_to_father_ids, ids_to_inner_types, Some annobj));
+    (match current_mathml with
+    | Some current_mathml when use_diff ->
+        self#freeze;
+        XmlDiff.update_dom ~from:current_mathml mathml;
+        self#thaw
+    |  _ ->
+*)
+        if BuildTimeConf.debug then begin
+          let name =
+           "/tmp/cic_browser_" ^ string_of_int (Unix.getuid ()) ^ ".xml" in
+          HLog.debug ("cic_browser: dumping MathML to ./" ^ name);
+          ignore (domImpl#saveDocumentToFile ~name ~doc:mathml ())
+        end;
+        self#load_root ~root:mathml#get_documentElement;
+        (*current_mathml <- Some mathml*)(*)*);
 end
 
 let tab_label meta_markup =
@@ -1064,7 +1085,14 @@ class cicBrowser_impl ~(history:MatitaTypes.mathViewer_entry MatitaMisc.history)
           handle_error (fun () -> self#loadInput (self#_getSelectedUri ()))));
       mathView#set_href_callback (Some (fun uri ->
         handle_error (fun () ->
-          self#load (`Uri (UriManager.uri_of_string uri)))));
+         let uri =
+          try
+           `Uri (UriManager.uri_of_string uri)
+          with
+           UriManager.IllFormedUri _ ->
+            `NRef (NReference.reference_of_string uri)
+         in
+          self#load uri)));
       gviz#connect_href (fun button_ev attrs ->
         let time = GdkEvent.Button.time button_ev in
         let uri = List.assoc "href" attrs in
@@ -1214,6 +1242,7 @@ class cicBrowser_impl ~(history:MatitaTypes.mathViewer_entry MatitaMisc.history)
           | `Metadata (`Deps ((`Fwd | `Back) as dir, uri)) ->
               self#dependencies dir uri ()
           | `Uri uri -> self#_loadUriManagerUri uri
+          | `NRef nref -> self#_loadNReference nref
           | `Univs uri -> self#_loadUnivs uri
           | `Whelp (query, results) -> 
               set_whelp_query query;
@@ -1324,6 +1353,10 @@ class cicBrowser_impl ~(history:MatitaTypes.mathViewer_entry MatitaMisc.history)
       let (obj, _) = CicEnvironment.get_obj CicUniv.empty_ugraph uri in
       self#_loadObj obj
 
+    method private _loadNReference (NReference.Ref (uri,_)) =
+      let obj = NCicEnvironment.get_checked_obj uri in
+      self#_loadNObj obj
+
     method private _loadUnivs uri =
       let uri = UriManager.strip_xpointer uri in
       let (_, u) = CicEnvironment.get_obj CicUniv.empty_ugraph uri in
@@ -1364,6 +1397,13 @@ class cicBrowser_impl ~(history:MatitaTypes.mathViewer_entry MatitaMisc.history)
       self#_showMath;
       mathView#load_object obj
 
+    method private _loadNObj obj =
+      (* showMath must be done _before_ loading the document, since if the
+       * widget is not mapped (hidden by the notebook) the document is not
+       * rendered *)
+      self#_showMath;
+      mathView#load_nobject obj
+
     method private _loadTermCic term metasenv =
       let context = self#script#proofContext in
       let dummyno = CicMkImplicit.new_meta metasenv [] in
index fadc551056f350ad8ad01e7f96c1e25041d66cfc..b221919d2e33a38433f3216bcb3498718541c06a 100644 (file)
@@ -346,8 +346,8 @@ let cic2grafite context menv t =
     let width = max_int in
     let term_pp content_term =
       let pres_term = TermContentPres.pp_ast content_term in
-      let dummy_tbl = Hashtbl.create 1 in
-      let markup = CicNotationPres.render dummy_tbl pres_term in
+      let lookup_uri = fun _ -> None in
+      let markup = CicNotationPres.render ~lookup_uri pres_term in
       let s = "(" ^ BoxPp.render_to_string
        ~map_unicode_to_tex:(Helm_registry.get_bool
          "matita.paste_unicode_as_tex")
index adbc7d3b342bc7c335787d4f405215f3ebd93245..2584f61f6131439c394b4721b7eac4c90479a07e 100644 (file)
@@ -49,6 +49,7 @@ type mathViewer_entry =
   | `HBugs of [ `Tutors ] (* list of available HBugs tutors *)
   | `Metadata of [ `Deps of [`Fwd | `Back] * UriManager.uri ]
   | `Uri of UriManager.uri (* cic object uri *)
+  | `NRef of NReference.reference (* cic object uri *)
   | `Whelp of string * UriManager.uri list (* query and results *)
   | `Univs of UriManager.uri
   ]
@@ -76,6 +77,7 @@ let string_of_entry = function
             String.sub suri 4 (len - 4) in (* strip "cic:" prefix *)
           (match dir with | `Fwd -> "forward" | `Back -> "backward") ^ suri)
   | `Uri uri -> UriManager.string_of_uri uri
+  | `NRef nref -> NReference.string_of_reference nref
   | `Whelp (query, _) -> query
   | `Univs uri -> "univs:" ^ UriManager.string_of_uri uri
 
index 4dfb7c790df36908d1f417a4a8a8237581b22ec8..34e98cc1ad112899f5d8452798a3f4832f84490e 100644 (file)
@@ -36,6 +36,7 @@ type mathViewer_entry =
   | `HBugs of [ `Tutors ]
   | `Metadata of [ `Deps of [`Fwd | `Back] * UriManager.uri ]
   | `Uri of UriManager.uri
+  | `NRef of NReference.reference
   | `Whelp of string * UriManager.uri list 
   | `Univs of UriManager.uri
   ]