Deutsch   English   Français   Italiano  
<vlofuo$21qlu$1@solani.org>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.solani.org!.POSTED!not-for-mail
From: Mild Shock <janburse@fastmail.fm>
Newsgroups: sci.logic
Subject: Re: Nakano Proposition 2 in SWI-Prolog (Was: How to make cyclic
 terms)
Date: Thu, 9 Jan 2025 13:37:44 +0100
Message-ID: <vlofuo$21qlu$1@solani.org>
References: <vlkfq7$1vh4j$1@solani.org> <vlkrge$2dkpc$1@dont-email.me>
 <vllgli$2039r$1@solani.org> <vlmdk8$2dkpd$6@dont-email.me>
 <vlme6h$2dkpc$3@dont-email.me> <vlo9os$2dkpd$11@dont-email.me>
 <vloa2b$2dkpd$12@dont-email.me> <vlof4t$21qd0$1@solani.org>
 <vlofkd$21qfv$1@solani.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Thu, 9 Jan 2025 12:37:44 -0000 (UTC)
Injection-Info: solani.org;
	logging-data="2157246"; mail-complaints-to="abuse@news.solani.org"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101
 Firefox/128.0 SeaMonkey/2.53.20
Cancel-Lock: sha1:icQEsnJgdhPZZq6JdYvu2bdL834=
In-Reply-To: <vlofkd$21qfv$1@solani.org>
X-User-ID: eJwFwYEBwAAEA7CXDC3Oweb/E5bA+HDDCToOV2ztlckA+Cln8vS46aJTdMkSs36vPTIFtecwIFTflZ0fQHIU2w==
Bytes: 4312
Lines: 112

Hi,

In SWI-Prolog, the example doesn't need System F
or Nakano Recursive Types. It simply works with
the congruence relation itself,

if you want to bar that the Curry Paradox emerges,
you have to replace the de Bruijn Variable clause,
by an unify_with_occurs_check/2 based rule:

/* de Bruijn Variable */
typeof(N, L, A) :- integer(N),
    nth0(N, L, B),
    unify_with_occurs_check(A, B).

Now the program uses another congruence relation
among Prolog terms. And the example doesn't work anymore.
Now already the self application fails:

?- typeof(lam(0*0), [], A).
false.

Needless to say that subsequently the Curry
Paradox fails as well:

?- typeof(lam(0*0)*lam(0*0), [], A).
false.

Bye

P.S.: What are de Bruijn indexes:

In mathematical logic, the de Bruijn index is a tool
invented by the Dutch mathematician Nicolaas Govert
de Bruijn for representing terms of lambda calculus
without naming the bound variables.
https://en.wikipedia.org/wiki/De_Bruijn_index

Mild Shock schrieb:
> Hi,
> 
> Or in SWI-Prolog:
> 
> /* de Bruijn Variable */
> typeof(N, L, A) :- integer(N),
>     nth0(N, L, A).
> /* de Bruijn abstraction */
> typeof(lam(S), L, A -> B) :-
>     typeof(S, [A|L], B).
> /* Modus Ponens */
> typeof((S*T), L, B) :-
>     typeof(S, L, (A -> B)),
>     typeof(T, L, A).
> 
> ?- typeof(lam(0*0), [], A).
> A = (_S1->_A), % where
>      _S1 = (_S1->_A).
> 
> ?- typeof(lam(0*0)*lam(0*0), [], A).
> true.
> 
> The last query gives simply true without A constrained.
> You could also try this here instantiating A, and
> you will see it works for any A:
> 
> ?- typeof(lam(0*0)*lam(0*0), [], a).
> true.
> 
> ?- typeof(lam(0*0)*lam(0*0), [], (a->b)).
> true.
> 
> ?- typeof(lam(0*0)*lam(0*0), [], (b->a)).
> true.
> 
> Bye
> 
> Mild Shock schrieb:
>>
>> See here:
>>
>> A Modality for Recursion
>> Hiroshi Nakano - 2000 - Zitiert von: 237
>> https://www602.math.ryukoku.ac.jp/~nakano/papers/modality-lics00.pdf
>>
>> Even if you disband cyclic terms in your
>> model, like if you adhere to a strict Herband model.
>> If the Herband model has an equality which is a
>>
>> congruence relation ≌. Nakano's paper contains
>> an inference rule for a congruence relation ≌.
>> When you have such a congruence relation, you can
>>
>> of course derive things like for example for a certain
>> exotic recursive type C, that the following holds:
>>
>> C ≌ C -> A
>>
>> You can then produce the Curry Paradox in simple
>> types with congruence. And then ultimately derive:
>>
>> |- (λx.x x)(λx.x x): A
>>
>> As in Proposition 2 of Nakano's paper.
>>
>> Julio Di Egidio schrieb:
>>>> (But I still wouldn't know how to create a cyclic term proper in Coq 
>>>> or in fact in any total functional language, despite the mechanism 
>>>> underlying conversion/definitional equality is logical unification, 
>>>> and we can even somewhat access it in Coq, via the definition of 
>>>> `eq`/reflexivity.)
>>
>