On 03/08/12 07:48, Bill Richter wrote:
> Back to my earlier question, my miz3 code begins new_type("point",0);;
> new_type_abbrev("point_set",`:point->bool`);;
> new_constant("Line",`:point_set->bool`);; I still don't know what the HOL, or
> HOL4 meaning of this is, but I have a new conjecture: My new_type command
> defines a set called "point",  And later when I write let A B C be point;
> that means that the variables A, B & C refer to elements of the set "point"
> Does that sound right?  In particular, a type is the name of a set?

A non-polymorphic type denotes a non-empty ZFC set.  We can assume that this 
set 
is one of the "non-empty sets in the von Neumann cumulative hierarchy formed 
before stage ω + ω" (Logic Manual, p10)

A polymorphic type is a effectively a function on types; when you instantiate 
the type variables you are applying the function to arguments and getting back 
an actual non-empty set.

When you do a new_type command, the system picks an arbitrary non-empty set and 
identifies your chosen name with that set.  Logically, you know nothing at all 
about that type except that it is non-empty.

> I'm also confused about the HOL Logic manual saying we don't get the empty
> set.  I use the empty set all the time, it's called EMPTY or {}, defined in
> sets.ml.  Maybe there's a technicality which going like this.  In sets.ml,
> sets are "constructed" as boolean functions.  So (assuming that "point" is
> actually a set, as I conjectured above) we can define the empty subset of
> point as the function {}: point -> bool which takes every element of point to
> False.  So is that it, we can get the empty set by confusing sets with
> boolean functions?

Yes, the empty set, {}, that you are referring to is just a predicate (the 
predicate that is everywhere false) over a type.  Alternatively, it is a subset 
of a non-empty set.  If you read something saying that there is no empty set, 
it's meaning that there is no empty type.

It is true that we can't do anything in HOL that you couldn't do in ZFC/FOL, 
but 
things tend to work more smoothly in HOL.  In particular, there is no 
distinction between predicates and 'sets', and no need for axioms restricting 
what you can and can't write with a set comprehension.  This is because all 
such 
predicates, sets and comprehensions are all done with respect to some bounding 
set in the ZFC model.

HOL's handling of functions is also cleaner.  In FOL, you can't quantify over a 
function-symbol, so it's illegal to write

   ∃f. ∀n. f (n + 1) < f (n)

where f is a function symbol of the FOL.  But, of course, mathematicians are 
working in ZFC and sets can be held to represent functions, so you *are* 
allowed to write

  ∃f ∈ N × N. ∀n ∈ N. f ` (n + 1) < f ` n

where the "function" f is really just a set, and the function symbols are 
actually ` ("function application"), + and × (in the outer quantification).

The meta-theory of FOL tells us that we can introduce fresh function symbols in 
certain circumstances, so we might be able to create formulas that use f as a 
function symbol, but that f can't be the same as the f which is just a subset 
of 
N × N, even if it's behaviour looks pretty similar.  This is pretty yucky, and 
HOL hides lots of complexity.

Michael

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
hol-info mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to