• Re: True on the basis of meaning --- Good job Richard ! ---Socratic met

    From Mikko@21:1/5 to olcott on Wed May 29 11:25:30 2024
    XPost: sci.logic

    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

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)