• --- OLCOTT BANNED ---

    From Mild Shock@21:1/5 to All on Tue Jul 9 11:04:42 2024
    The full time idiot olcott should be
    put in jail, and the key should be thrown away.
    All he can do is spam other peoples threads
    with his crazy lovebird chirping.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mild Shock@21:1/5 to olcott on Tue Jul 9 18:12:36 2024
    Fuck off asshole. Prolog is irrelevant for
    the minimal logic posts. I only made this
    joke, but it has nothing to do with occurs check:

    Meanwhile I am going back to my tinkering with my
    Prolog system, which even provides a more primitive
    logic than minimal logic, pure Prolog is minimal

    logic without embedded implication.

    You even don't know what the occurs check is,
    and for what it is used.

    If the occurs check is used, then
    olcott schrieb:
    On 7/9/2024 10:14 AM, olcott wrote:
    On 7/9/2024 4:04 AM, Mild Shock wrote:

    The full time idiot olcott should be
    put in jail, and the key should be thrown away.
    All he can do is spam other peoples threads
    with his crazy lovebird chirping.

    I initially thought that you would agree with me
    about Prolog and not dismiss what I said out-of-hand
    without review.



    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mild Shock@21:1/5 to olcott on Tue Jul 9 21:05:23 2024
    In unification with occurs check cycles in a graph
    are prevented before they happen. You are such a moron.
    The "occurs check" does that. It checks V ∈ T, BEFORE
    a variable V gets instantiated to T.

    On the other hand acyclic_term/1 can figure out whether
    a term as variable V instantiated to T, where V ∈ T,
    AFTER a cycle allowing unification has been performed,
    i.e. the ordinary (=)/2.

    You are an idiot, you confuse these predicate:

    - acyclic_term/1

    With this predicate:

    - unify_with_occurs_check/2.

    Usually unify_with_occurs_check/2 is not implemented as:

    /* not how it is done */
    unify_with_occurs_check(X,Y) :-
    X = Y,
    acyclic_term(X).

    The problem is the above wouldn't allow enough fast failure.

    Instead it is usually implemented as follows,
    Just consult Rihcard O'Keefes File METUTL.PL :

    % unify(?X, ?Y)
    % Try to unify X and Y, wih occurs check.
    % Further down in this file is the Occurs Check.

    unify(X, Y) :-
    var(X),
    var(Y),
    !,
    X = Y. % want unify(X,X)
    unify(X, Y) :-
    var(X),
    !,
    occurs_check(Y, X), % X is not in Y
    X = Y.
    unify(X, Y) :-
    var(Y),
    !,
    occurs_check(X, Y), % Y is not in X
    X = Y.
    unify(X, Y) :-
    atomic(X),
    !,
    X = Y.
    unify(X, Y) :-
    functor(X, F, N),
    functor(Y, F, N),
    unify(N, X, Y).

    unify(0, _, _) :- !.
    unify(N, X, Y) :-
    arg(N, X, Xn),
    arg(N, Y, Yn),
    unify(Xn, Yn),
    M is N-1,
    !,
    unify(M, X, Y).

    occurs_check(Term, Var) :-
    var(Term),
    !,
    Term \== Var.
    occurs_check(Term, Var) :-
    functor(Term, _, Arity),
    occurs_check(Arity, Term, Var).
    occurs_check(0, _, _) :- !.
    occurs_check(N, Term, Var) :-
    arg(N, Term, Arg),
    occurs_check(Arg, Var),
    M is N-1,
    !,
    occurs_check(M, Term, Var).

    http://www.picat-lang.org/bprolog/publib/metutl.html

    Bye

    olcott schrieb:
    On 7/9/2024 11:12 AM, Mild Shock wrote:

    Fuck off asshole. Prolog is irrelevant for
    the minimal logic posts. I only made this
    joke, but it has nothing to do with occurs check:

    Meanwhile I am going back to my tinkering with my
    Prolog system, which even provides a more primitive
    logic than minimal logic, pure Prolog is minimal
    ;
    logic without embedded implication.

    You even don't know what the occurs check is,
    and for what it is used.


    It detects cycles in the directed graph of the expression's
    evaluation sequence as a paraphrase of Clocksin & Mellish indicates.

    If the occurs check is used, then
    olcott schrieb:
    On 7/9/2024 10:14 AM, olcott wrote:
    On 7/9/2024 4:04 AM, Mild Shock wrote:

    The full time idiot olcott should be
    put in jail, and the key should be thrown away.
    All he can do is spam other peoples threads
    with his crazy lovebird chirping.

    I initially thought that you would agree with me
    about Prolog and not dismiss what I said out-of-hand
    without review.





    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mild Shock@21:1/5 to Only a complete nut head can on Tue Jul 9 21:21:51 2024
    Only a complete nut head can write nonsense like:

    It detects cycles in the directed graph of the expression's
    evaluation sequence as a paraphrase of Clocksin & Mellish indicates.

    You can try yourself and see that it is a "prevent"
    and not a "detect" of cyclic terms. Just go online,
    and you will find:

    Example 02: Website Sandbox https://www.xlog.ch/runtab/doclet/docs/04_tutor/reference/example02/package.html

    And now you can try unify_with_occurs_check/2,
    it will never allow a cyclic structure in memory,
    if the two arguments are already acyclic,

    so it does a "prevent" and not a "detect":

    /* Import Richard O'Keefes METUTL */
    :- ensure_loaded(library(compat)).

    /* Will not detect something but prevent something */
    ?- unify_with_occurs_check(X, [f|X]).
    fail.

    On the other hand the predicate acyclic_term/1 is made to
    detect something, but and doesn't prevent something.
    You can try in the Website Sandbox:

    /* Will not prevent something but detect something */
    ?- X = [f|X], \+ acyclic_term(X).
    X = <cyclic term> .

    Also to the best of my knowledge its not possible
    to bootstrap detect from prevention. So there is
    no way to define:

    /* not possible derive detect from prevent */
    acyclic_term(X) :-
    ...
    /* make use of unify_with_occurs_check/2 */
    ...

    Mild Shock schrieb:
    In unification with occurs check cycles in a graph
    are prevented before they happen. You are such a moron.
    The "occurs check" does that. It checks V ∈ T, BEFORE
    a variable V gets instantiated to T.

    On the other hand acyclic_term/1 can figure out whether
    a term as variable V instantiated to T, where V ∈ T,
    AFTER a cycle allowing unification has been performed,
    i.e. the ordinary (=)/2.

    You are an idiot, you confuse these predicate:

    - acyclic_term/1

    With this predicate:

    - unify_with_occurs_check/2.

    Usually unify_with_occurs_check/2 is not implemented as:

    /* not how it is done */
    unify_with_occurs_check(X,Y) :-
        X = Y,
        acyclic_term(X).

    The problem is the above wouldn't allow enough fast failure.

    Instead it is usually implemented as follows,
    Just consult Rihcard O'Keefes File METUTL.PL :

    % unify(?X, ?Y)
    % Try to unify X and Y, wih occurs check.
    % Further down in this file is the Occurs Check.

    unify(X, Y) :-
        var(X),
        var(Y),
        !,
        X = Y.                %  want unify(X,X)
    unify(X, Y) :-
        var(X),
        !,
        occurs_check(Y, X),        %  X is not in Y
        X = Y.
    unify(X, Y) :-
        var(Y),
        !,
        occurs_check(X, Y),        %  Y is not in X
        X = Y.
    unify(X, Y) :-
        atomic(X),
        !,
        X = Y.
    unify(X, Y) :-
        functor(X, F, N),
        functor(Y, F, N),
        unify(N, X, Y).

    unify(0, _, _) :- !.
    unify(N, X, Y) :-
        arg(N, X, Xn),
        arg(N, Y, Yn),
        unify(Xn, Yn),
        M is N-1,
        !,
        unify(M, X, Y).

    occurs_check(Term, Var) :-
        var(Term),
        !,
        Term \== Var.
    occurs_check(Term, Var) :-
        functor(Term, _, Arity),
        occurs_check(Arity, Term, Var).
    occurs_check(0, _, _) :- !.
    occurs_check(N, Term, Var) :-
        arg(N, Term, Arg),
        occurs_check(Arg, Var),
        M is N-1,
        !,
        occurs_check(M, Term, Var).

    http://www.picat-lang.org/bprolog/publib/metutl.html

    Bye

    olcott schrieb:
    On 7/9/2024 11:12 AM, Mild Shock wrote:

    Fuck off asshole. Prolog is irrelevant for
    the minimal logic posts. I only made this
    joke, but it has nothing to do with occurs check:

    Meanwhile I am going back to my tinkering with my
    Prolog system, which even provides a more primitive
    logic than minimal logic, pure Prolog is minimal
    ;
    logic without embedded implication.

    You even don't know what the occurs check is,
    and for what it is used.


    It detects cycles in the directed graph of the expression's
    evaluation sequence as a paraphrase of Clocksin & Mellish indicates.

    If the occurs check is used, then
    olcott schrieb:
    On 7/9/2024 10:14 AM, olcott wrote:
    On 7/9/2024 4:04 AM, Mild Shock wrote:

    The full time idiot olcott should be
    put in jail, and the key should be thrown away.
    All he can do is spam other peoples threads
    with his crazy lovebird chirping.

    I initially thought that you would agree with me
    about Prolog and not dismiss what I said out-of-hand
    without review.






    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mild Shock@21:1/5 to Mild Shock on Tue Jul 9 21:30:32 2024
    You can define unify_with_occurs_check/2 in terms
    of MGU Θ it finds. The definition is such that for
    two acyclic terms X and Y, it finds an MGU Θ such that:

    - 1. It equals the two terms X Θ = Y Θ
    - 2. It is most general
    - 3. The new instance X Θ is acyclic

    So in the end never a cyclic graph is created in
    memory. To have a cyclic graph in memory a
    variable V with V ∈ T would need to be instantiated

    to T. This would be the edge in the graph that
    participates in a cycle. But such an edge is never
    created in memory when you use unify_with_occurs_check/2.

    The occurs check "prevents" that, it doesn't detect that.

    Mild Shock schrieb:
    Only a complete nut head can write nonsense like:

    It detects cycles in the directed graph of the expression's
    evaluation sequence as a paraphrase of Clocksin & Mellish indicates.

    You can try yourself and see that it is a "prevent"
    and not a "detect" of cyclic terms. Just go online,
    and you will find:

    Example 02: Website Sandbox https://www.xlog.ch/runtab/doclet/docs/04_tutor/reference/example02/package.html


    And now you can try unify_with_occurs_check/2,
    it will never allow a cyclic structure in memory,
    if the two arguments are already acyclic,

    so it does a "prevent" and not a "detect":

    /* Import Richard O'Keefes METUTL */
    :- ensure_loaded(library(compat)).

    /* Will not detect something but prevent something */
    ?- unify_with_occurs_check(X, [f|X]).
    fail.

    On the other hand the predicate acyclic_term/1 is made to
    detect something, but and doesn't prevent something.
    You can try in the Website Sandbox:

    /* Will not prevent something but detect something */
    ?- X = [f|X], \+ acyclic_term(X).
    X = <cyclic term> .

    Also to the best of my knowledge its not possible
    to bootstrap detect from prevention. So there is
    no way to define:

    /* not possible derive detect from prevent */
    acyclic_term(X) :-
        ...
        /* make use of unify_with_occurs_check/2 */
        ...

    Mild Shock schrieb:
    In unification with occurs check cycles in a graph
    are prevented before they happen. You are such a moron.
    The "occurs check" does that. It checks V ∈ T, BEFORE
    a variable V gets instantiated to T.

    On the other hand acyclic_term/1 can figure out whether
    a term as variable V instantiated to T, where V ∈ T,
    AFTER a cycle allowing unification has been performed,
    i.e. the ordinary (=)/2.

    You are an idiot, you confuse these predicate:

    - acyclic_term/1

    With this predicate:

    - unify_with_occurs_check/2.

    Usually unify_with_occurs_check/2 is not implemented as:

    /* not how it is done */
    unify_with_occurs_check(X,Y) :-
         X = Y,
         acyclic_term(X).

    The problem is the above wouldn't allow enough fast failure.

    Instead it is usually implemented as follows,
    Just consult Rihcard O'Keefes File METUTL.PL :

    % unify(?X, ?Y)
    % Try to unify X and Y, wih occurs check.
    % Further down in this file is the Occurs Check.

    unify(X, Y) :-
         var(X),
         var(Y),
         !,
         X = Y.                %  want unify(X,X)
    unify(X, Y) :-
         var(X),
         !,
         occurs_check(Y, X),        %  X is not in Y
         X = Y.
    unify(X, Y) :-
         var(Y),
         !,
         occurs_check(X, Y),        %  Y is not in X
         X = Y.
    unify(X, Y) :-
         atomic(X),
         !,
         X = Y.
    unify(X, Y) :-
         functor(X, F, N),
         functor(Y, F, N),
         unify(N, X, Y).

    unify(0, _, _) :- !.
    unify(N, X, Y) :-
         arg(N, X, Xn),
         arg(N, Y, Yn),
         unify(Xn, Yn),
         M is N-1,
         !,
         unify(M, X, Y).

    occurs_check(Term, Var) :-
         var(Term),
         !,
         Term \== Var.
    occurs_check(Term, Var) :-
         functor(Term, _, Arity),
         occurs_check(Arity, Term, Var).
    occurs_check(0, _, _) :- !.
    occurs_check(N, Term, Var) :-
         arg(N, Term, Arg),
         occurs_check(Arg, Var),
         M is N-1,
         !,
         occurs_check(M, Term, Var).

    http://www.picat-lang.org/bprolog/publib/metutl.html

    Bye

    olcott schrieb:
    On 7/9/2024 11:12 AM, Mild Shock wrote:

    Fuck off asshole. Prolog is irrelevant for
    the minimal logic posts. I only made this
    joke, but it has nothing to do with occurs check:

    Meanwhile I am going back to my tinkering with my
    Prolog system, which even provides a more primitive
    logic than minimal logic, pure Prolog is minimal
    ;
    logic without embedded implication.

    You even don't know what the occurs check is,
    and for what it is used.


    It detects cycles in the directed graph of the expression's
    evaluation sequence as a paraphrase of Clocksin & Mellish indicates.

    If the occurs check is used, then
    olcott schrieb:
    On 7/9/2024 10:14 AM, olcott wrote:
    On 7/9/2024 4:04 AM, Mild Shock wrote:

    The full time idiot olcott should be
    put in jail, and the key should be thrown away.
    All he can do is spam other peoples threads
    with his crazy lovebird chirping.

    I initially thought that you would agree with me
    about Prolog and not dismiss what I said out-of-hand
    without review.







    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mild Shock@21:1/5 to You on Wed Jul 10 06:13:53 2024
    Hi,

    You wrote:

    Yet C&M say that this test is only performed when run
    thus almost never performed because it is too expensive.

    But for soundness you have to perform it sometimes!
    So what is the solution? The solution is simple:

    - Its not performed in the goal to head unification
    - Its not performed in (=)/2 buit-in
    - It is performed in unify_with_occurs_check/2 built-in

    The ISO core standard requires both (=)/2 and
    unify_with_occurs_check/2. You need unify_with_occurs_check/2
    when you want an occurs check, which is need

    for example in rewriting or type inference
    to get correct results.

    olcott schrieb:
    On 7/9/2024 2:30 PM, Mild Shock wrote:
    You can define unify_with_occurs_check/2 in terms
    of MGU Θ it finds. The definition is such that for
    two acyclic terms X and Y, it finds an MGU Θ such that:

    - 1. It equals the two terms X Θ = Y Θ
    - 2. It is most general
    - 3. The new instance X Θ is acyclic

    So in the end never a cyclic graph is created in
    memory. To have a cyclic graph in memory a
    variable V with V ∈ T would need to be instantiated



    If you didn't top post then context could be more accurate.
    By top posting I am only responding to the gist of what
    you said and not your exact words.

    to T. This would be the edge in the graph that
    participates in a cycle. But such an edge is never
    created in memory when you use unify_with_occurs_check/2.

    The occurs check "prevents" that, it doesn't detect that.

    Mild Shock schrieb:
    Only a complete nut head can write nonsense like:

    It detects cycles in the directed graph of the expression's
    evaluation sequence as a paraphrase of Clocksin & Mellish indicates. >>>
    You can try yourself and see that it is a "prevent"
    and not a "detect" of cyclic terms. Just go online,
    and you will find:

    Example 02: Website Sandbox
    https://www.xlog.ch/runtab/doclet/docs/04_tutor/reference/example02/package.html


    And now you can try unify_with_occurs_check/2,
    it will never allow a cyclic structure in memory,
    if the two arguments are already acyclic,

    so it does a "prevent" and not a "detect":

    /* Import Richard O'Keefes METUTL */
    :- ensure_loaded(library(compat)).

    /* Will not detect something but prevent something */
    ?- unify_with_occurs_check(X, [f|X]).
    fail.

    On the other hand the predicate acyclic_term/1 is made to
    detect something, but and doesn't prevent something.
    You can try in the Website Sandbox:

    /* Will not prevent something but detect something */
    ?- X = [f|X], \+ acyclic_term(X).
    X = <cyclic term> .

    Also to the best of my knowledge its not possible
    to bootstrap detect from prevention. So there is
    no way to define:

    /* not possible derive detect from prevent */
    acyclic_term(X) :-
         ...
         /* make use of unify_with_occurs_check/2 */
         ...

    Mild Shock schrieb:
    In unification with occurs check cycles in a graph
    are prevented before they happen. You are such a moron.
    The "occurs check" does that. It checks V ∈ T, BEFORE
    a variable V gets instantiated to T.

    On the other hand acyclic_term/1 can figure out whether
    a term as variable V instantiated to T, where V ∈ T,
    AFTER a cycle allowing unification has been performed,
    i.e. the ordinary (=)/2.

    You are an idiot, you confuse these predicate:

    - acyclic_term/1

    With this predicate:

    - unify_with_occurs_check/2.

    Usually unify_with_occurs_check/2 is not implemented as:

    /* not how it is done */
    unify_with_occurs_check(X,Y) :-
         X = Y,
         acyclic_term(X).

    The problem is the above wouldn't allow enough fast failure.

    Instead it is usually implemented as follows,
    Just consult Rihcard O'Keefes File METUTL.PL :

    % unify(?X, ?Y)
    % Try to unify X and Y, wih occurs check.
    % Further down in this file is the Occurs Check.

    unify(X, Y) :-
         var(X),
         var(Y),
         !,
         X = Y.                %  want unify(X,X)
    unify(X, Y) :-
         var(X),
         !,
         occurs_check(Y, X),        %  X is not in Y
         X = Y.
    unify(X, Y) :-
         var(Y),
         !,
         occurs_check(X, Y),        %  Y is not in X
         X = Y.
    unify(X, Y) :-
         atomic(X),
         !,
         X = Y.
    unify(X, Y) :-
         functor(X, F, N),
         functor(Y, F, N),
         unify(N, X, Y).

    unify(0, _, _) :- !.
    unify(N, X, Y) :-
         arg(N, X, Xn),
         arg(N, Y, Yn),
         unify(Xn, Yn),
         M is N-1,
         !,
         unify(M, X, Y).

    occurs_check(Term, Var) :-
         var(Term),
         !,
         Term \== Var.
    occurs_check(Term, Var) :-
         functor(Term, _, Arity),
         occurs_check(Arity, Term, Var).
    occurs_check(0, _, _) :- !.
    occurs_check(N, Term, Var) :-
         arg(N, Term, Arg),
         occurs_check(Arg, Var),
         M is N-1,
         !,
         occurs_check(M, Term, Var).

    http://www.picat-lang.org/bprolog/publib/metutl.html

    Bye

    olcott schrieb:
    On 7/9/2024 11:12 AM, Mild Shock wrote:

    Fuck off asshole. Prolog is irrelevant for
    the minimal logic posts. I only made this
    joke, but it has nothing to do with occurs check:

    Meanwhile I am going back to my tinkering with my
    Prolog system, which even provides a more primitive
    logic than minimal logic, pure Prolog is minimal
    ;
    logic without embedded implication.

    You even don't know what the occurs check is,
    and for what it is used.


    It detects cycles in the directed graph of the expression's
    evaluation sequence as a paraphrase of Clocksin & Mellish indicates. >>>>>
    If the occurs check is used, then
    olcott schrieb:
    On 7/9/2024 10:14 AM, olcott wrote:
    On 7/9/2024 4:04 AM, Mild Shock wrote:

    The full time idiot olcott should be
    put in jail, and the key should be thrown away.
    All he can do is spam other peoples threads
    with his crazy lovebird chirping.

    I initially thought that you would agree with me
    about Prolog and not dismiss what I said out-of-hand
    without review.









    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mild Shock@21:1/5 to Mild Shock on Wed Jul 10 06:32:15 2024
    Hi,

    Pete Olcott is full of bullshit. He writes
    nonsense like for example:

    "According to the formal definition of Unification, this
    kind of “infinite term” should never come to exist" https://philarchive.org/archive/OLCPDPv4

    Thats not true. There are different formal definitions
    of Unification. There is Unification with and without
    occurs check.

    There are algorithms that can make Unification without
    occurs check terminate, and such an algorithm is
    for example implemented in SWI-Prolog.

    They were pioneered by Alain Colmerauer himself, the
    co-inventor of Prolog, who even wrote a paper about
    the subject:

    PROLOG AND INFINITE TREES
    Alain Colmerauer - 1982
    Universite Aix-Marseille https://www.softwarepreservation.org/projects/prolog/marseille/doc/Colmerauer-InfTree-1982.pdf

    Bye

    Mild Shock schrieb:

    The full time idiot olcott should be
    put in jail, and the key should be thrown away.
    All he can do is spam other peoples threads
    with his crazy lovebird chirping.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mild Shock@21:1/5 to and not in Prolog. They on Wed Jul 10 06:45:50 2024
    Hi,

    Here you see SWI-Prolog deal with cyclic terms:

    /* SWI-Prolog 9.3.2 */
    ?- X = [f,f|X], Y = [f|Y], X = Y.
    X = Y, Y = [f|Y].

    Clocksin & Mellish refer to the formal
    definition of Unification in Resolution Theorem
    proving, and not in Prolog. They write:

    According to the formal definition of Unification,
    this kind of "infinite term" should never come to exist.
    Thus Prolog systems that allow a term to match an
    uninstantiated subterm of itself do not act correctly
    as Resolution theorem provers.

    Thats from page 254 of this Clocksin and Mellish:

    Programming in Prolog - Using the ISO Standard
    Fifth Edition - See PDF page 268
    Clocksin & Mellish - 2003 https://athena.ecs.csus.edu/~mei/logicp/Programming_in_Prolog.pdf

    Bye

    Mild Shock schrieb:
    Hi,

    Pete Olcott is full of bullshit. He writes
    nonsense like for example:

    "According to the formal definition of Unification, this
    kind of “infinite term” should never come to exist" https://philarchive.org/archive/OLCPDPv4

    Thats not true. There are different formal definitions
    of Unification. There is Unification with and without
    occurs check.

    There are algorithms that can make Unification without
    occurs check terminate, and such an algorithm is
    for example implemented in SWI-Prolog.

    They were pioneered by Alain Colmerauer himself, the
    co-inventor of Prolog, who even wrote a paper about
    the subject:

    PROLOG AND INFINITE TREES
    Alain Colmerauer - 1982
    Universite Aix-Marseille https://www.softwarepreservation.org/projects/prolog/marseille/doc/Colmerauer-InfTree-1982.pdf

    Bye

    Mild Shock schrieb:

    The full time idiot olcott should be
    put in jail, and the key should be thrown away.
    All he can do is spam other peoples threads
    with his crazy lovebird chirping.


    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mild Shock@21:1/5 to Mild Shock on Wed Jul 10 06:52:24 2024
    Hi,

    This one is also nice, succeeds as well, both:

    /* SWI-Prolog 9.3.2 */
    ?- A = [f,g|A], B = [g,f|B], A = [f|B].
    A = [f, g|A],
    B = [g, f|B].

    ?- A = [f,g|A], B = [g,f|B], B = [g|A].
    A = [f, g|A],
    B = [g, f|B].

    You cannot use unify_with_occurs_check/2 in the
    above case, to ban it, since A and B are already
    cyclic. When the input is already cyclic,

    in SWI-Prolog, unify_with_occurs_check/2 lets
    pass the unification, turns it into a kind
    of bisimulation basically:

    ?- A = [f,g|A], B = [g,f|B], unify_with_occurs_check(A, [f|B]).
    A = [f, g|A],
    B = [g, f|B].

    ?- A = [f,g|A], B = [g,f|B], unify_with_occurs_check(B, [g|A]).
    A = [f, g|A],
    B = [g, f|B].

    The above two examples never lead to an instantiation,
    V = T, where an occurs check would be needed.
    Because A and B are already ground, they don't have

    any uninstantiated variables anymore:

    ?- A = [f,g|A], ground(A).
    A = [f, g|A].

    ?- B = [g,f|B], ground(B).
    B = [g, f|B].

    Bye

    Mild Shock schrieb:
    Hi,

    Here you see SWI-Prolog deal with cyclic terms:

    /* SWI-Prolog 9.3.2 */
    ?- X = [f,f|X], Y = [f|Y], X = Y.
    X = Y, Y = [f|Y].

    Clocksin & Mellish refer to the formal
    definition of Unification in Resolution Theorem
    proving, and not in Prolog. They write:

    According to the formal definition of Unification,
    this kind of "infinite term" should never come to exist.
    Thus Prolog systems that allow a term to match an
    uninstantiated subterm of itself do not act correctly
    as Resolution theorem provers.

    Thats from page 254 of this Clocksin and Mellish:

    Programming in Prolog - Using the ISO Standard
    Fifth Edition - See PDF page 268
    Clocksin & Mellish - 2003 https://athena.ecs.csus.edu/~mei/logicp/Programming_in_Prolog.pdf

    Bye

    Mild Shock schrieb:
    Hi,

    Pete Olcott is full of bullshit. He writes
    nonsense like for example:

    "According to the formal definition of Unification, this
    kind of “infinite term” should never come to exist"
    https://philarchive.org/archive/OLCPDPv4

    Thats not true. There are different formal definitions
    of Unification. There is Unification with and without
    occurs check.

    There are algorithms that can make Unification without
    occurs check terminate, and such an algorithm is
    for example implemented in SWI-Prolog.

    They were pioneered by Alain Colmerauer himself, the
    co-inventor of Prolog, who even wrote a paper about
    the subject:

    PROLOG AND INFINITE TREES
    Alain Colmerauer - 1982
    Universite Aix-Marseille
    https://www.softwarepreservation.org/projects/prolog/marseille/doc/Colmerauer-InfTree-1982.pdf

    Bye

    Mild Shock schrieb:

    The full time idiot olcott should be
    put in jail, and the key should be thrown away.
    All he can do is spam other peoples threads
    with his crazy lovebird chirping.



    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mikko@21:1/5 to Mild Shock on Wed Jul 10 11:55:20 2024
    On 2024-07-09 09:04:42 +0000, Mild Shock said:

    The full time idiot olcott should be
    put in jail, and the key should be thrown away.
    All he can do is spam other peoples threads
    with his crazy lovebird chirping.

    Is interference with communication or something similar a crime where
    Olcott lives?

    --
    Mikko

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mikko@21:1/5 to olcott on Thu Jul 11 10:28:29 2024
    On 2024-07-10 21:20:17 +0000, olcott said:

    On 7/10/2024 3:55 AM, Mikko wrote:
    On 2024-07-09 09:04:42 +0000, Mild Shock said:

    The full time idiot olcott should be
    put in jail, and the key should be thrown away.
    All he can do is spam other peoples threads
    with his crazy lovebird chirping.

    Is interference with communication or something similar a crime where
    Olcott lives?


    He doesn't like the way that I hi-jacked his thread.

    That's obvious but what do laws of your place say about it?

    --
    Mikko

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mild Shock@21:1/5 to Mild Shock on Fri Jul 12 11:14:39 2024
    Fucking asshole Pete Olcott, 11.07.2024, 16:57
    spamming minimal logic again?

    Mild Shock schrieb:

    The full time idiot olcott should be
    put in jail, and the key should be thrown away.
    All he can do is spam other peoples threads
    with his crazy lovebird chirping.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mild Shock@21:1/5 to Mild Shock on Fri Jul 12 11:20:28 2024
    Olcott, the blistering idiot, writes:

    He doesn't like the way that I hi-jacked his thread.
    I could have renamed it after I took it over, next time

    No you cannot rename threads you idiot.
    If you hi-jack a thread, your news reader
    will place this header:

    References: <v67685$6fr5$1@solani.org> <v6el1u$e6tb$1@dont-email.me>
    <3c9ef913b1fbbca50c1a4acd02401906646327ed@i2pn2.org>
    <RpKdnUjg8sjx0Bb7nZ2dnZfqlJydnZ2d@giganews.com>
    Etc..

    All you can do is create a new thread! Or
    use another thread.

    What are you some mindless squirel? How
    long are you using USENET already, and
    you don't know how threads work?

    Go fuck yourself asshole.

    Mild Shock schrieb:

    Fucking asshole Pete Olcott, 11.07.2024, 16:57
    spamming minimal logic again?

    Mild Shock schrieb:

    The full time idiot olcott should be
    put in jail, and the key should be thrown away.
    All he can do is spam other peoples threads
    with his crazy lovebird chirping.


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