>From: Frank Atanassow <[EMAIL PROTECTED]>
>To: Jan Brosius <[EMAIL PROTECTED]>
>Cc: <[EMAIL PROTECTED]>
>Sent: Thursday, May 18, 2000 2:53 PM
>Subject: Re: more detailed explanation about forall in Haskell
> Jan Brosius writes:
> > I must put this in the good way;
> >
> > [forall x . alpha(x)] => alpha(x) is True
>
> Yes, by instantiation.
I disagree.
>
> > If alpha(x) is TRUE then the following is true : alpha(x) => [forall x.
> > alpha(x)]
>
> No, alpha(x) only asserts that some element named x satisfies alpha. It
does
> not follow that therefore every other element also satisfies alpha.
No the variable x means that it can be substituted by any term. That is the
real meaning of a variable
(at least in classical logic).
Consider e.g. Carl Witty's formula : prime(x) == x is a prime number.
Then prime(2) == (2|x) prime(x) is true , and prime (4) is false
Take something else alpha(x) == prime(x) AND ¬ prime(x) ( ¬ signifies
not)
then alpha(x) is a false formula and you have ¬ [exists x. alpha(x)]
On the contrary beta(x) == ¬ alpha(x) is true for any x
>
> > So if alpha(x) is TRUE then [forall x. alpha(x) ]<=> alpha(x)
>
> This does not follow. It is truth-equivalent to:
Sorry, I disagree
>
> [forall x. alpha(x)] <=> True
( In the above you should at the very least not forget to mention that
[forall x. alpha(x)] must be true )
In principle True is a sloppy expression for saying that [forall x .
alpha(x)] is a theorem of some mathematical theory. I have used True because
discussing mathematical theories would have lead the discussion
out of the scope of the discussion.
For instance let "T=" denote a mathematical theory with equality
then one has "T=" -| x = x
that is the formula x = x is a theorem in "T=" . More sloppy the formula
x=x is TRUE in "T="
>
> which is equivalent to:
>
> forall x. alpha(x)
>
> which is only true when every element satisifies alpha; so it is not a
> tautology.
>
> I repeat: you do not understand the difference between bound and free
variables.
I disagree a free variable is not a constant.
A bound variable is a variable tied to a quantifier. In principle a bound
variable is not visibly.
This is best illustrated by Bourbaki's approach where they first define :
exists x . alpha(x) == (`t x (alpha)| x) alpha
where if e.g. alpha(x) == x = x then
`t x (alpha) == `t ( `sq = `sq ) where `sq denotes a small square and
where here both `sq are tied to `t by a line
In this way I can really say that in [existx x. x = x] the variable x has
disappeared.
Finally Bourbaki defines forall x . alpha(x) == ¬ [exists x . ¬ alpha(x)]
I repeat : there are no domains in propositional calculus , but I am aware
that in some text books about
propositional calculus one speaks about it , I regard this as cheating :
introducing a concept that one is going to define later. I remember my
prof, in logic in 1 cand. math - physics where his first lesson began by
writing
on the blackboard : p V ¬ p and he only said " p or not p " " tertium
non datur" " a third possibility is not given "
His whole course was as formally as possible, and variables were not
supposed to range about a domain.
> A free variable behaves like a constant.
No a constant is always the same constant, it is never substituted by
something else, it is "immutable".
A variable is a placeholder for a Term ( a constant is a special term)
>It is not "implicitly"
> quantified in any way, because it denotes a specific element. The only
> difference between a constant and a free variable is syntactic: a free
> variable can be bound in an outer scope,
No the real role of a variable say x in a formula alpha(x) or a term T(x)
is a PLACEHOLDER ready to be substituted by a Term (e.g. constant or a
parameterized term)
And that's the reason why I should find it weird if In Haskell 98+ one
would distinguish between
a -> a and [forall a. a -> a]
>while a constant cannot.
>
> > > The sentence "alpha(x)" asserts that there is a _distinguished_
element
> > > named
> >
> > NO , saying that there is a distinguished element T that satisfies
alpha
> > implies
> >
> > that exists x. alpha(x) is true
>
> Yes, it also implies this fact, because it can be derived by
extensionality:
>
> alpha(x) => exists y. alpha(y)
>
> However, existential quantification hides the identity of the element in
> question. The fact that we know _which_ element it is that satisifies
alpha
> permits us to say more. This is why:
>
> exists x. alpha(x),
> alpha(x),
>
> and
>
> forall x. alpha(x)
>
> are not truth-equivalent. Rather we have:
>
> forall y. alpha(y) => alpha(x) and alpha (x) => exists z. alpha(z)
AND if alpha(x) is a TRUE formula then alpha(x) => forall x. alpha(x)
A better way to express this is
Rule of genaralization:
alpha(x ) is True (and x is a variable)
********************
forall x . alpha(x ) is true
I repeat that my use of true or false is not really the way it is expressed
in Bourbaki , I used it
in order to be understood by everybody (and in this discussion it doesn'
hurt).
>
> > > "x" in the domain of your model, and that that element, at least,
> > satisfies
> >
> > x is a variable ; no domain ; no model
>
> A model must assign an element in the domain to each free variable. You
need a
> model to determine the truth-value of a first-order proposition which is
not
> tautological. We are trying to establish the truth-value of a proposition
with
> a free variable; therefore we need a model. A model needs a domain of
elements
> to draw from. Therefore we need a domain. OK?
No, you don't need a model for (formal ) logic . If at this stage
(propositional calculus) you would
talk about a domain or set then you are introducing "domain" before you
have discussed what
a domain is. If you are using a model than you are implicitly accepting the
fact that the whole
of mathematical set theory is at your disposition. Since mathematical set
theory is based on propositional calculus a variable x in propositional
calculus is really a variable which is equivalent to saying that it
can be used for substitution no more,no less.
The forall's used with domains, say e.g. N is the set of integers are in
fact bounded forall's and
one has e.g.
forall x in N . prime(x) == forall x. x in N => prime(x)
the left forall above is an example of a bounded forall where x must range
over a constant set , here N.
However more complicated bounded forall's can be considered.
In general let alpha(x) be a formula about a variable x then
[forall alpha(x) . prime(x)] == [forall x. alpha(x) => prime(x)]
>
> --
> Frank Atanassow, Dept. of Computer Science, Utrecht University Padualaan
14,
> PO Box 80.089, 3508 TB Utrecht, Netherlands Tel +31 (030) 253-1012, Fax
+31
> (030) 251-3791
>
>
Friendly
Jan Brosius