Thanks, Mark!  I see your include Format;; in printer.ml.  By grepping, I see 
occurrences of Format.print_string and Format.print_newline commands in e.g. 
make.ml, but isn't the Format prefix here unnecessary, because they're 
pervasive?  Isn't that explained in section 
20.2 Module Pervasives : The initially opened module.
of the ocaml reference manual, and p 318 for print_string and print_newline? 
Your failwith idea sounds great, but I didn't understand it.  As printer.ml 
begins 
(* Simplistic HOL Light prettyprinter, using the OCaml "Format" library.     *)
I wonder if there's not a simple well-understood way to pretty-print error 
messages. For instance, should all error messages be pretty-printed?  If not, 
do I really want to override the standard printer?  

   The OCaml developers want to keep these modules (by the way, it's
   Obj not Object) low key and don't publish any details about them.
   OCaml is used in the implementation of OCaml (!), and as I
   understand it, they exist for this purpose.  

That's amazing, Mark!  I don't understand "low key" at all.  It seem to me that 
Toploop & Obj.magic recover much of the quote feature in Scheme, and that's a 
very valuable feature.  I grepped through your Tactician sources and I see a 
lot, so I bet you understand this quite well: 

(poisson)Tactician> grep Toploop *; grep Obj.magic *
autopromote.ml:  let env = Obj.magic !Toploop.toplevel_env in
autopromote.ml:  let env = Obj.magic !Toploop.toplevel_env in
mlconcrete.ml:  (ignore o Toploop.execute_phrase false Format.std_formatter o
mlconcrete.ml:   !Toploop.parse_toplevel_phrase o Lexing.from_string) x;;
prooftreefns.ml:let original_prompt_fn = !Toploop.read_interactive_input in
prooftreefns.ml:Toploop.read_interactive_input :=
termparser.ml:  let env = Obj.magic !Toploop.toplevel_env in
autopromote.ml:  let env = Obj.magic !Toploop.toplevel_env in
autopromote.ml:  let env = Obj.magic !Toploop.toplevel_env in
handpromote.ml:    [] -> let (atac',xs') = Obj.magic (atac,xs) in
handpromote.ml:            then let (atac',xs') = Obj.magic (atac,xs) in
handpromote.ml:            then let (atac',xs') = Obj.magic (atac,xs) in
handpromote.ml:            then let (atac',xs') = Obj.magic (atac,xs) in
handpromote.ml:            then let (atac',xs') = Obj.magic (atac,xs) in
handpromote.ml:    [] -> let (atac',xs') = Obj.magic (atac,xs) in
handpromote.ml:            then let (atac',xs') = Obj.magic (atac,xs) in
handpromote.ml:            then let (atac',xs') = Obj.magic (atac,xs) in
handpromote.ml:            then let (atac',xs') = Obj.magic (atac,xs) in
handpromote.ml:            then let (atac',xs') = Obj.magic (atac,xs) in
mltypeguess.ml:    then let (x':'a*'b) = Obj.magic x in
mltypeguess.ml:    then Mint (Obj.magic x)
mltypeguess.ml:    then Mstring (Obj.magic x)
mltypeguess.ml:    then Mterm (Obj.magic x)
mltypeguess.ml:    then Mtype (Obj.magic x)
termparser.ml:  let env = Obj.magic !Toploop.toplevel_env in

Mark, please explain to me what Freek's doing in the code of his I borrowed in 
RichterHilbertAxiomGeometry/readable.ml: 

let exec_phrase s =
  let lexbuf = Lexing.from_string s in
  let ok = Toploop.execute_phrase false Format.std_formatter
    (!Toploop.parse_toplevel_phrase lexbuf) in
  Format.pp_print_flush Format.std_formatter ();
  (ok,
   let i = lexbuf.Lexing.lex_curr_pos in
   String.sub lexbuf.Lexing.lex_buffer
     i (lexbuf.Lexing.lex_buffer_len - i));;

let exec_thm_out = ref TRUTH;;
                         
let is_thm s =
  try
    let (ok, rst) = exec_phrase ("exec_thm_out := (("^s^") : thm);;") in
    if not ok or rst <> "" then raise Noparse
    else true
  with _ -> false;;

I bet you understand Lexing as well: 

(poisson)Tactician> grep Lexing *
mlconcrete.ml:   !Toploop.parse_toplevel_phrase o Lexing.from_string) x;;

So is_thm is a predicate run on a string which tells if that string is the name 
of a theorem.  I get the impression that Freek is running a command somewhere 
that fails if the string isn't a theorem.  So this Toploop and Lexing stuff 
does two things: 
1) it takes a string and turns it into a command and runs it, and 
2) if it fails, it doesn't print an error message.
Can you explain any actual details?

BTW I looked at your HOL Zero page 
http://www.proof-technologies.com/holzero/index.html, and remind me of 
something I should know: Does your HOL Zero do type quantification? 

-- 
Best,
Bill 

------------------------------------------------------------------------------
Get your SQL database under version control now!
Version control is standard for application code, but databases havent 
caught up. So what steps can you take to put your SQL databases under 
version control? Why should you start doing it? Read more to find out.
http://pubads.g.doubleclick.net/gampad/clk?id=49501711&iu=/4140/ostg.clktrk
_______________________________________________
hol-info mailing list
hol-info@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to