Re: True on the basis of meaning --- Good job Richard ! ---Socratic method MTT

Liste des GroupesRevenir à cl prolog 
Sujet : Re: True on the basis of meaning --- Good job Richard ! ---Socratic method MTT
De : mikko.levanto (at) *nospam* iki.fi (Mikko)
Groupes : sci.logic  comp.lang.prolog
Date : 29. May 2024, 10:25:30
Autres entêtes
Organisation : -
Message-ID : <v36opq$12i6f$1@dont-email.me>
References : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
User-Agent : Unison/2.2
On 2024-05-28 14:59:30 +0000, olcott said:

On 5/28/2024 1:59 AM, Mikko wrote:
On 2024-05-27 14:34:14 +0000, olcott said:
 
?- LP = not(true(LP)).
LP = not(true(LP)).
 ?- unify_with_occurs_check(LP, not(true(LP))).
false.
 In other words Prolog has detected a cycle in the directed graph of the
evaluation sequence of the structure of the Liar Paradox. Experts seem
to think that Prolog is taking "not" and "true" as meaningless and is
only evaluating the structure of the expression.
 The words "not" and "true" of Prolog are meaningful in some contexts
but not above. The word "true" is meaningful only when it has no arguments.
 
 That Prolog construes any expression having the same structure as the
Liar Paradox as having a cycle in the directed graph of its evaluation
sequence already completely proves my point. In other words Prolog
is saying that there is something wrong with the expression and it must
be rejected.
 
You could try
?- LP = not(true(LP), true(LP).
 or
?- LP = not(true(LP), not(true(LP)).
 The predicate unify_with_occurs_check checks whether the resulting
sructure is acyclic because that is its purpose. Whether a simple
 Yes exactly. If I knew that Prolog did this then I would not have
created Minimal Type Theory that does this same thing. That I did
create MTT that does do this same thing makes my understanding much
deeper.
Prolog does not reject LP = not(true(LP)). It can accept it as
syntactically valid. Thaat unify_with_occurs_check(LP, not(true(LP))
fails does not mean anything except when it is used, and then it
does not reject but simplu evaluates to false, just like 1 = 2
is false but not erroneous.

unification like LP = not(true(LP)) does same is implementation
dependent as Prolog rules permit but do not require that. In a
typical implementation a simple unification does not check for
cycles.
 
 ISO Prolog implementations have the built-in predicate
unify_with_occurs_check/2 for sound unification
https://en.wikipedia.org/wiki/Occurs_check#Sound_unification
 Alternatively such expressions crash or remain stuck in infinite loops.
Not necessarily. What happes depends on the implementation and on what
you do with such structures. You already saw that your
?- LP = not(true(LP)).
does not crash and does not remain stuck in infinite loop.

Anyway, none of this is relevant to the topic of this thread or
topics of sci.logic.
If you want to talk nore about Prolog do it in comp.lang.prolog.
--
Mikko

Date Sujet#  Auteur
29 May 24 * Re: True on the basis of meaning --- Good job Richard ! ---Socratic method MTT2Mikko
29 May 24 `- Re: True on the basis of meaning --- Good job Richard ! ---Socratic method MTT1olcott

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal