home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   sci.physics      Physical laws, properties, etc.      178,769 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 178,025 of 178,769   
   Mild Shock to Mild Shock   
   =?UTF-8?Q?Fishy_=f0=9f=90=9f_in_Scryer_P   
   17 Jul 25 10:52:28   
   
   From: janburse@fastmail.fm   
      
   Hi,   
      
   The same example values also create fishy 🐟   
   sorting using native sorting in Scryer Prolog:   
      
   /* Scryer Prolog 0.9.4-417 */   
   ?- values([z,x,y], A), sort(A, B),   
       values([x,y,z], C), sort(C, D), B == D.   
       false. /* fishy 🐟 */   
      
   Or using native sorting in SWI-Prolog:   
      
   /* SWI-Prolog 9.3.25 */   
   ?- values([z,x,y], A), sort(A, B),   
       values([x,y,z], C), sort(C, D), B == D.   
   false. /* fishy 🐟 */   
      
   Bye   
      
   Mild Shock schrieb:   
   >   
   >  > I checked that your examples are not counter   
   >  > examples for my compare_with_stack/3.   
   >   
   > What makes you think the values I show, X, Y   
   > and Z, are possible in a total linear ordering?   
   > The values also break predsort/3, you can easily   
   > verify that sort([x,y,z]) =\= sort([y,x,z]):   
   >   
   > value(x, X) :- X = X-0-9-7-6-5-4-3-2-1.   
   > value(y, Y) :- Y = Y-7-5-8-2-4-1.   
   > value(z, Z) :- H = H-9-7-6-5-4-3-2-1-0, Z = H-9-7-6-5-4-3-2-1.   
   >   
   > values(L, R) :- maplist(value, L, R).   
   >   
   > ?- values([x,y,z], A), predsort(compare_with_stack, A, B),   
   >     values([y,x,z], C), predsort(compare_with_stack, C, D),   
   >     B == D.   
   > false.   
   >   
   > But expectation would be sort([x,y,z]) ==   
   > sort([y,x,z]) since sort/2 should be immune   
   > to permutation. If this isn’t enough proof that   
   > there is something fishy in compare_with_stack/3 ,   
   >   
   > well then I don’t know, maybe the earth is indeed flat?   
   >   
   > Mild Shock schrieb:   
   >> Hi,   
   >>   
   >> Now somebody was so friendly to spear head   
   >> a new Don Quixote attempt in fighting the   
   >> windmills of compare/3. Interestingly my   
   >>   
   >> favorite counter example still goes through:   
   >>   
   >> ?- X = X-0-9-7-6-5-4-3-2-1, Y = Y-7-5-8-2-4-1,   
   >>     compare_with_stack(C, X, Y).   
   >> X = X-0-9-7-6-5-4-3-2-1,   
   >> Y = Y-7-5-8-2-4-1,   
   >> C = (<).   
   >>   
   >> ?- H = H-9-7-6-5-4-3-2-1-0, Z = H-9-7-6-5-4-3-2-1, Y = Y-7-5-8-2-4-1,   
   >>     compare_with_stack(C, Z, Y).   
   >> H = H-9-7-6-5-4-3-2-1-0,   
   >> Z = H-9-7-6-5-4-3-2-1,   
   >> Y = Y-7-5-8-2-4-1,   
   >> C = (>).   
   >>   
   >> ?- H = H-9-7-6-5-4-3-2-1-0, Z = H-9-7-6-5-4-3-2-1, X =   
   >> X-0-9-7-6-5-4-3-2-1,   
   >>     compare_with_stack(C, Z, X).   
   >> H = H-9-7-6-5-4-3-2-1-0,   
   >> Z = X, X = X-0-9-7-6-5-4-3-2-1,   
   >> C = (=).   
   >>   
   >> I posted it here in March 2023:   
   >>   
   >> Careful with compare/3 and Brent algorithm   
   >> https://swi-prolog.discourse.group/t/careful-with-compare-3-a   
   d-brent-algorithm/6413   
   >>   
   >>   
   >> Its based that rational terms are indeed in   
   >> some relation to rational numbers. The above   
   >> terms are related to:   
   >>   
   >> 10/81 = 0.(123456790) = 0.12345679(012345679)   
   >>   
   >> Bye   
   >>   
   >> Mild Shock schrieb:   
   >>> Hi,   
   >>>   
   >>> That false/0 and not fail/0 is now all over the place,   
   >>> I don't mean in person but for example here:   
   >>>   
   >>> ?- X=f(f(X), X), Y=f(Y, f(Y)), X = Y.   
   >>> false.   
   >>>   
   >>> Is a little didactical nightmare.   
   >>>   
   >>> Syntactic unification has mathematical axioms (1978),   
   >>> to fully formalize unifcation you would need to   
   >>> formalize both (=)/2 and (≠)/2 (sic!), otherwise you   
   >>> rely on some negation as failure concept.   
   >>>   
   >>> Keith L. Clark, Negation as Failure   
   >>> https://link.springer.com/chapter/10.1007/978-1-4684-3384-5_11   
   >>>   
   >>> You can realize a subset of a mixture of (=)/2   
   >>> and (≠)/2 in the form of a vanilla unify Prolog   
   >>> predicate using some of the meta programming   
   >>> facilities of Prolog, like var/1 and having some   
   >>>   
   >>> negation as failure reading:   
   >>>   
   >>> /* Vanilla Unify */   
   >>> unify(V, W) :- var(V), var(W), !, (V \== W -> V = W; true).   
   >>> unify(V, T) :- var(V), !, V = T.   
   >>> unify(S, W) :- var(W), !, W = S.   
   >>> unify(S, T) :- functor(S, F, N), functor(T, F, N),   
   >>>       S =.. [F|L], T =.. [F|R], maplist(unify, L, R).   
   >>>   
   >>> I indeed get:   
   >>>   
   >>> ?- X=f(f(X), X), Y=f(Y, f(Y)), unify(X,Y).   
   >>> false.   
   >>>   
   >>> If the vanilla unify/2 already fails then unify   
   >>> with and without subject to occurs check, will also   
   >>> fail, and unify with and without ability to   
   >>> handle rational terms, will also fail:   
   >>>   
   >>> Bye   
   >>   
   >   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca