ATS has predicates which looks like the usual predicates; and has what it
names propositions, which seems not the same as usual propositions and are
more proofs.
So far, is that OK to say ATS proposition are not propositions after the
usual meaning?
http://ece.uprm.edu/~jseguel/ltoc2.pdf
https://www.quora.com/What-is-the-precise-difference-between-propositional-and-predicate-logic
At least, these two pages say, it there are variables and/or quantifiers,
then this is not a proposition, that’s a predicate.
Moreover ATS propositions are never false, they are always true, or can’t
exist at all, which is not a surprise, as ATS propositions are proof in the
form of definitions, with absprop
or in the form of inductive definitions
with dataprop
(which is not exactly the same as an axiomatic proof, an
inductive definition is a safer assertion).
Unlike a boolean expression or a predicate which may evaluates to either
true
or false
, a proof may only evaluates into a kind of true
or not
at all, which may be understood this other way: there is no false of type
prop
, the evaluation of a proof either “returns” a kind of true or fails
(by the way, is it OK to say Prolog clauses evaluation are proofs?… as too,
it never returns a real false
neither, just fails).
stacst True: prop // Makes sense, OK?
stacst False: prop // Does not make sens, isn’t it?
An absprop
and/or a dataprop
, introduce a function-like thing returning
something of sort prop
. May be it’s a function just because there may be
variable in the proven statement.
absprop F(int) // int -> prop
stadef g: prop = F 0 // Check it’s indeed int -> prop
Side note: I don’t understand why I can’s write absprop F int
and the
parentheses are required.
Type definition may be based on predicates, but not proof (or at least, not
directly):
absprop F(int) // int -> prop
// typedef t = [i: int; F i] int(i) ILLEGAL
There are multiple ways of understanding things. One of these way, is to
come to a thing with prior expectations about how things should be. That
may be nice, but may not help when trying to understand something which
does not match at all or not exactly these prior ideas. May be that’s why
I’m progressing so slowly in understanding ATS enough to be at ease with it.
One of my prior expectations when I accosted ATS lands, was the relation
between a type and a proof (also between a type and a function). But in
ATS, a function may function returns a proof of some proposition along to a
value of a type, both distinct (the proof is not part of the type of the
value returned).
I wanted to try to relate both. Based on the above, I first came to this:
stadef h: prop -> bool = (lam p => true) // Assume a prop is a proof
Assuming a proof, either is true or does not exist (because it failed), and
also assuming a prop
is a proof, then the above should be sound. Is it?
typedef t = [i: int; h(F i)] int(i) // Does it mean what I think it means?
If it really means what I think, then I may have progressed a bit in
matching ATS and my mind.
At least, this simple declaration is not rejected:
val a: t = 0
(posting… hope I have not left too much typo errors)