Hi Bill, (sorry for the late answer)
Le 08.04.13 23:59, Bill Richter a écrit : > Vince, you recommended replacing the lines > > (...) > I couldn't get this to work. I think you have an old version of HOL Light. > In the current subversion (159), or I think any subversion since Wed 2nd Jan > 2013, system.ml reads > > let quotexpander s = > if s = "" then failwith "Empty quotation" else > let c = String.sub s 0 1 in > if c = ":" then > "parse_type \""^ > (String.escaped (String.sub s 1 (String.length s - 1)))^"\"" > else if c = ";" then "parse_qproof \""^(String.escaped s)^"\"" > else "parse_term \""^(String.escaped s)^"\"";; Indeed, use instead: let quotexpander s = if s = "" then failwith "Empty quotation" else let c = String.sub s 0 1 in if c = ":" then "parse_type \""^ (String.escaped (String.sub s 1 (String.length s - 1)))^"\"" else if c = ";" then "parse_qproof \""^(String.escaped s)^"\"" else if c = "'" then "(fst o parse_preterm o lex o explode) \"" ^ String.escaped (String.sub s 1 (String.length s - 1)) ^ "\"" else "parse_term \""^(String.escaped s)^"\"";; I changed again the trigger character for the quotation, it is now " ' ". So for instance: # `'&1+1`;; val it : preterm = Combp (Combp (Combp (Varp ("&", Ptycon ("", [])), Varp ("1", Ptycon ("", []))), Varp ("+", Ptycon ("", []))), Varp ("1", Ptycon ("", []))) > And that means, I think, that as long as we're not using miz3, we can just > redefine parse_qproof, which is defined in hol_light/miz3/miz3.ml. Indeed, however in my opinion, it is a better long-term solution to modify system.ml since others might benefit from having quotations dedicated to preterms (as it is the case for instance in HOL4). > So according to my understanding of quotexpander, I should get the same > answer like this, but I don't: > > # `;&1 + 1`;; > Exception: Noparse. > > What am I missing? If you have a careful look at quotexpander, you will see that, contrary to both other parsers, the string is passed to parse_qproof without removing the ";". The problem is solved if you thus define parse_qproof as follows: # let parse_qproof s = (fst o parse_preterm o lex o explode) (String.sub s 1 (String.length s - 1));; > In parser.ml, we have the definition > > let parse_term s = > let ptm,l = (parse_preterm o lex o explode) s in > if l = [] then > (term_of_preterm o (retypecheck [])) ptm > else failwith "Unparsed input following term";; > > That means that for a good string s, > > parse_term s = (term_of_preterm o (retypecheck []) o fst o parse_preterm o > lex o explode) s > > and I think that's what you wrote. Indeed. > Here's a question about retypecheck, about which the manual says > > This is the main HOL Light typechecking function. Given an > environment env of pretype assignments for variables, it assigns a > pretype to all variables and constants, including performing > resolution of overloaded constants based on what type information > there is. Normally, this happens implicitly when a term is entered > in the quotation parser. > > I believe that other than Freek's miz3.ml etc, retypecheck is only used once, > in parse_term, and the environment is the empty list. In miz3.ml, Freek is > clearly using a nonempty environment, called env'. Why don't we learn how to > do that ourselves? > I don't get what you mean, here... -- Vincent ARAVANTINOS - PostDoctoral Fellow - Concordia University, Hardware Verification Group http://users.encs.concordia.ca/~vincent/ ------------------------------------------------------------------------------ Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis & visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter _______________________________________________ hol-info mailing list hol-info@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hol-info