Thanks, Ramana!  I created my thmlist_tactics list in the same way that HOL 
Light creates the theorems database in hol_light/database.ml:

needs "help.ml";;
theorems :=
[
"ABSORPTION",ABSORPTION;
"ABS_SIMP",ABS_SIMP;
"ADD",ADD;
[...]
"vector",vector
];;

That doesn't strike me as a painful solution, but I am curious that the only 
place that the association list theorems is referred to is help.ml and 
update_database.ml.

   But the [theorems database] doesn't solve the problem of being able to
   represent and evaluate an OCaml expression within OCaml. [...]
   [The Scheme-style quote] would not at all be an easy extension to HOL4 or 
HOL Light.

Thanks! I'm having a problem with regular expressions.  The Str library was 
quite helpful, and e.g. I implemented a consider function using 
(Str.regexp 
    "[ \t\n]*consider[ \t\n]+\([^][]+[ \t\n]+such[ \t\n]+that[ \t\n]+[^][]+[ 
\t\n]+\)\[\([^][]*\)\][ \t\n]+\[\([^!]*\)\][ \t\n]*")

But Str doesn't seem to do everything I want.  Take a HOL Light proof that has 
only THENs and no THENLs.  Suppose we represent the proof as a string s where 
THENs are written as semicolons (;).  Then 
Str.split (Str.regexp "[ \t\n]*;[ \t\n]*") s
returns a list of the substrings delimited by ; and the surrounding whitespace. 
 In very simple cases, these substrings will represent tactics which should be 
joined by THEN.  But in more general cases, this won't work, as my tactics 
often themselves contain THENs, always contained in a square brace pair []. So 
I really want to break the string s up into substrings delimited by semicolons 
which are not captured by a square brace pair [].  That doesn't sound too 
clear, so let me give an example of such a string s representing a proof: 

  INTRO_TAC ∀A B C A' B', H1, H2 ;
  consider X such that
  move (A,B,C) (A,B,X)  ∧  move (A,B,X) (A',B,X)     [ABX]
  [HYP fol H1 H2 [Basic2move_THM]];
  ¬collinear {A,B,X} ∧ ¬collinear {A',B,X}     []
  [so (HYP fol H1 [moveInvariant, ORIENTED_AREA_COLLINEAR_CONG])]; 
  ¬collinear {B,A',X}     [] 
  [so (fol [collinearSymmetry])];
  consider Y such that move (B,A',X) (B,A',Y)  ∧  move (B,A',Y) (B',A',Y)     
[BA'Y]
  [so (HYP fol H2 [Basic2move_THM])];
  move (A',B,X) (A',B,Y)  ∧  move (A',B,Y) (A',B',Y)     []
  [HYP fol BA'Y [moveSymmetry]] ; 
  so (HYP fol ABX [] );

That's actually too simple, because no proof inside a square brace pair 
contains a semicolon.  Here's an example of such a substring in another proof:

  ∀n. (∃ q. reachableN p q n  ∧ move q p')  ⇒  reachableN p p' (SUC n)     
[Imp2]
  [INTRO_TAC ∀n; REWRITE_TAC[IMP_CONJ, LEFT_IMP_EXISTS_THM];

So I want to delimit my proof string s only using only the semicolons like the 
last one, and not the semicolons like the one in the square brace proof 
[INTRO_TAC ... THM]
I'm sure I could write a recursive function to do this, but it makes sense for 
ocaml to already have functions of this sort.  I figure that I want to break up 
the string s as 
s1 ; s2 ; ... ; sn
where each substring si has the same number of [s as ]s.  Do such regexp issues 
arise in HOL4 and SML? 

-- 
Best,
Bill 

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
_______________________________________________
hol-info mailing list
hol-info@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to