Thanks for correcting me, Mark! I'll look at your HOL Zero source code, especially corethy.ml. I see my error now. From bool.ml:
let T_DEF = new_basic_definition `T = ((\p:bool. p) = (\p:bool. p))`;; The first = is an Ocaml =, but the 2nd =, the one we care about, is the primitive HOL Light constant =. The above is defining the constant 'T'. The constant '=' does not have a definition in HOL Light, or in any of the HOL axiomatisations. We have to start somewhere with entities that don't have definitions but are just declared. In HOL Light's axiomatisation, the only such entities are the 'bool' and 'fun' type constants and the '=' constant (the other axiomatisations also have the '==>' and '?' constants). In the logic, the meaning of such entities is not captured in definitions, but instead "drops out" from the aggregation of the axioms and primitive inference rules. Thanks, that's a good explaination. BTW where is the constant = defined in HOL Light? I see now that the line in bool.ml override_interface ("<=>",`(=):bool->bool->bool`);; just means that <=> is being defined as a synonym for = in this special case. In general = has type A->A-bool. -- Best, Bill ------------------------------------------------------------------------------ Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. Written by three acclaimed leaders in the field, this first edition is now available. Download your free book today! http://p.sf.net/sfu/13534_NeoTech _______________________________________________ hol-info mailing list hol-info@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hol-info