Forums before death by AOL, social media and spammers... "We can't have nice things"
|    sci.logic    |    Logic -- math, philosophy & computationa    |    262,912 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 261,961 of 262,912    |
|    Mikko to olcott    |
|    Re: A new foundation for correct reasoni    |
|    16 Dec 25 11:44:40    |
      XPost: comp.lang.prolog, comp.theory, sci.math       From: mikko.levanto@iki.fi              On 15/12/2025 16:03, olcott wrote:       > On 12/15/2025 3:04 AM, Mikko wrote:       >> On 15/12/2025 01:14, olcott wrote:       >>> On 12/14/2025 4:05 AM, Mikko wrote:       >>>> On 13/12/2025 16:43, olcott wrote:       >>>>> On 12/13/2025 4:19 AM, Mikko wrote:       >>>>>> olcott kirjoitti 12.12.2025 klo 16.19:       >>>>>>> On 12/12/2025 2:50 AM, Mikko wrote:       >>>>>>>> olcott kirjoitti 11.12.2025 klo 16.17:       >>>>>>>>> On 12/11/2025 2:42 AM, Mikko wrote:       >>>>>>>>>> olcott kirjoitti 10.12.2025 klo 16.10:       >>>>>>>>>>> On 12/10/2025 4:04 AM, Mikko wrote:       >>>>>>>>>>>> olcott kirjoitti 8.12.2025 klo 21.09:       >>>>>>>>>>>>> On 12/8/2025 3:13 AM, Mikko wrote:       >>>>>>>>>>>>>> olcott kirjoitti 5.12.2025 klo 19.43:       >>>>>>>>>>>>>>> On 12/5/2025 3:38 AM, Mikko wrote:       >>>>>>>>>>>>>>>> olcott kirjoitti 4.12.2025 klo 16.06:       >>>>>>>>>>>>>>>>> On 12/4/2025 2:58 AM, Mikko wrote:       >>>>>>>>>>>>>>>>>> Tristan Wibberley kirjoitti 4.12.2025 klo 4.32:       >>>>>>>>>>>>>>>>>>> On 30/11/2025 09:58, Mikko wrote:       >>>>>>>>>>>>>>>>>>>       >>>>>>>>>>>>>>>>>>>> Note that the meanings of       >>>>>>>>>>>>>>>>>>>> ?- G = not(provable(F, G)).       >>>>>>>>>>>>>>>>>>>> and       >>>>>>>>>>>>>>>>>>>> ?- unify_with_occurs_check(G, not(provable(F, G))).       >>>>>>>>>>>>>>>>>>>> are different. The former assigns a value to G, the       >>>>>>>>>>>>>>>>>>>> latter does not.       >>>>>>>>>>>>>>>>>>       >>>>>>>>>>>>>>>>>>> For sufficiently informal definitions of "value".       >>>>>>>>>>>>>>>>>>> And for sufficiently wrong ones too!       >>>>>>>>>>>>>>>>>>       >>>>>>>>>>>>>>>>>> It is sufficiently clear what "value" of a Prolog       >>>>>>>>>>>>>>>>>> variable means.       >>>>>>>>>>>>>>>>       >>>>>>>>>>>>>>>>> % This sentence cannot be proven in F       >>>>>>>>>>>>>>>>> ?- G = not(provable(F, G)).       >>>>>>>>>>>>>>>>> G = not(provable(F, G)).       >>>>>>>>>>>>>>>>> ?- unify_with_occurs_check(G, not(provable(F, G))).       >>>>>>>>>>>>>>>>> false.       >>>>>>>>>>>>>>>>>       >>>>>>>>>>>>>>>>> I would say that the above Prolog is the 100%       >>>>>>>>>>>>>>>>> complete formal specification of:       >>>>>>>>>>>>>>>>>       >>>>>>>>>>>>>>>>> "This sentence cannot be proven in F"       >>>>>>>>>>>>>>>>       >>>>>>>>>>>>>>>> The first query can be regarded as a question whether "G       >>>>>>>>>>>>>>>> = not(provable(       >>>>>>>>>>>>>>>> F, G))" can be proven for some F and some G. The answer       >>>>>>>>>>>>>>>> is that it can       >>>>>>>>>>>>>>>> for every F and for (at least) one G, which is       >>>>>>>>>>>>>>>> not(provable(G)).       >>>>>>>>>>>>>>>>       >>>>>>>>>>>>>>>> The second query can be regarded as a question whether       >>>>>>>>>>>>>>>> "G = not(provable       >>>>>>>>>>>>>>>> (F, G))" can be proven for some F and some G that do not       >>>>>>>>>>>>>>>> contain cycles.       >>>>>>>>>>>>>>>> The answer is that in the proof system of Prolog it       >>>>>>>>>>>>>>>> cannot be.       >>>>>>>>>>>>>>>       >>>>>>>>>>>>>>> No that it flatly incorrect. The second question is this:       >>>>>>>>>>>>>>> Is "G = not(provable(F, G))." semantically sound?       >>>>>>>>>>>>>>       >>>>>>>>>>>>>> Where is the definition of Prolog semantics is that said?       >>>>>>>>>>>>>       >>>>>>>>>>>>> Any expression of Prolog that cannot be evaluated to       >>>>>>>>>>>>> a truth value because it specifies non-terminating       >>>>>>>>>>>>> infinite recursion is "semantically unsound" by the       >>>>>>>>>>>>> definition of those terms even if Prolog only specifies       >>>>>>>>>>>>> that cannot be evaluated to a truth value because it       >>>>>>>>>>>>> specifies non-terminating infinite recursion.       >>>>>>>>>>>>       >>>>>>>>>>>> Your Prolog implementation has evaluated G =       >>>>>>>>>>>> not(provablel(F, G))       >>>>>>>>>>>> to a truth value true. When doing so it evaluated each side       >>>>>>>>>>>> of =       >>>>>>>>>>>> to a value that is not a truth value.       >>>>>>>>>>>       >>>>>>>>>>> ?- unify_with_occurs_check(G, not(provable(F, G))).       >>>>>>>>>>> false.       >>>>>>>>>>>       >>>>>>>>>>> Proves that       >>>>>>>>>>> G = not(provable(F, G)).       >>>>>>>>>>> would remain stuck in infinite recursion.       >>>>>>>>>>>       >>>>>>>>>>> unify_with_occurs_check() examines the directed       >>>>>>>>>>> graph of the evaluation sequence of an expression.       >>>>>>>>>>> When it detects a cycle that indicates that an       >>>>>>>>>>> expression would remain stuck in recursive       >>>>>>>>>>> evaluation never to be resolved to a truth value.       >>>>>>>>>>>       >>>>>>>>>>> BEGIN:(Clocksin & Mellish 2003:254)       >>>>>>>>>>> Finally, a note about how Prolog matching sometimes differs       >>>>>>>>>>> from the unification used in Resolution. Most Prolog systems       >>>>>>>>>>> will allow you to satisfy goals like:       >>>>>>>>>>>       >>>>>>>>>>> equal(X, X).       >>>>>>>>>>> ?- equal(foo(Y), Y).       >>>>>>>>>>>       >>>>>>>>>>> that is, they will allow you to match a term against an       >>>>>>>>>>> uninstantiated subterm of itself. In this example, foo(Y)       >>>>>>>>>>> is matched against Y, which appears within it. As a result,       >>>>>>>>>>> Y will stand for foo(Y), which is foo(foo(Y)) (because of       >>>>>>>>>>> what Y stands for), which is foo(foo(foo(Y))), and so on.       >>>>>>>>>>> So Y ends up standing for some kind of infinite structure.       >>>>>>>>>>>       >>>>>>>>>>> Note that, whereas they may allow you to construct something       >>>>>>>>>>> like this, most Prolog systems will not be able to write it       >>>>>>>>>>> out at the end. 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. In order to make them do so, we       >>>>>>>>>>> would have to add a check that a variable cannot be       >>>>>>>>>>> instantiated to something containing itself. Such a check,       >>>>>>>>>>> an occurs check, would be straightforward to implement, but       >>>>>>>>>>> would slow down the execution of Prolog programs considerably.       >>>>>>>>>>> Since it would only affect very few programs, most implementors       >>>>>>>>>>> have simply left it out 1.       >>>>>>>>>>>       >>>>>>>>>>> 1 The Prolog standard states that the result is undefined if       >>>>>>>>>>> a Prolog system attempts to match a term against an       >>>>>>>>>>> uninstantiated subterm of itself, which means that programs       >>>>>>>>>>> which cause this to       >>>>>>>>>>> happen will not be portable. A portable program should ensure       >>>>>>>>>>> that wherever an occurs check might be applicable the built-       >>>>>>>>>>> in predicate       >>>>>>>>>>> unify_with_occurs_check/2 is used explicitly instead of the       >>>>>>>>>>> normal       >>>>>>>>>>> unification operation of the Prolog implementation. As its       >>>>>>>>>>> name suggests, this predicate acts like =/2 except that it       >>>>>>>>>>> fails if an       >>>>>>>>>>> occurs check detects an illegal attempt to instantiate a       >>>>>>>>>>> variable.              [continued in next message]              --- 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