Monday, March 29, 2021

Gödel failed to prove inferential undecidablity or incompleteness in foundations

Hilbert believed every proposition is either provable or disprovable every mathematical proposition is, that is, inferentially decidable {(Ψ)(¬Î¨)} [Hilbert 1930]. Others doubted inferential decidability held. It would mean that whether a proposition is a theorem could be algorithmically decided by enumerating theorems until the proposition occurs or its negation occurs [von Plato 2018].

[Gödel 1931] seemed to have proved undecidability using the proposition I'mUnprovable, such that (I’mUnprovable I’mUnprovable).

However, existence of I’mUnprovable  would enable the following cyberattack [cf. Wittgenstein 1937]:

Theorem: Existence of I’mUnprovable  of leads to inconsistency in foundations.

Proof: Ever since Euclid, it has been a fundamental principle that a theorem can be used in a proof (the principle of  TheoremUse), that is, {((Ψ)Ψ)} [cf. Artemov and Fitting 2019]. However by [Gödel 1931], 

 (¬I’mUnprovable I’mUnprovable). Consequently,  

(¬I’mUnprovable I’mUnprovable)  by TheoremUse.

  • Therefore I’mUnprovable  using ProofBySelfContradiction 
    {(((¬Î¨Î¨)) Ψ)} with Ψ being I’mUnprovable
  • Thus, I’mUnprovable using TheoremUse {((Ψ)Ψ)} with Ψ being I’mUnprovable. Consequently, I’mUnprovable using
    (I’mUnprovable I’mUnprovable)

 Having both I’mUnprovable  and I’mUnprovable is a contradiction in foundations.

 

Strong types prevent construction of I’mUnprovable using the following recursive definition:

I’mUnprovable:Proposition viwI’mUnprovable. Note that (I’mUnprovable):Proposition vi+1w in the right-hand side of the definition because I’mUnprovable is a propositional variable of I’mUnprovable :Proposition viw. Consequently,

I’mUnprovable:Proposition<i>I’mUnprovable:Proposition<i+1>, which is a contradiction.

 

The crucial issue with the proofs in [Gödel 1931] is that the Gödel number of a proposition does not capture its order. Because of orders of propositions, the Diagonal Lemma [Gödel 1931] fails to construct the proposition I’mUnprovable.

information see the following:
See the following article for more information:

My Theorems are Enumerable Cyberattack

Alonzo Church made major contributions to foundations by creating the lambda calculus and proving the computational undecidability of whether an expression halts. In 1934, he published a remarkable article in which proclaimed that he had discovered a contradiction in foundations that meant the end of his field as follows:

[Church 1934] noted that the assumption that theorems must computationally enumerable leads to inconsistency for a foundational theory T that can axiomatize computation and provability by the following remarkable powerful proof:

In order to obtain a contradiction, hypothesize theorems of a foundational theory T are computationally enumerable. Then procedures that are provably total in T are computationally by a procedure that is provably total in T. Consider the Boolean procedure Diagonal defined on natural number input n to be the result of the complement of the result of the ith provably total procedure on input i. The procedure Diagonal differs from every procedure in the enumeration of provably total procedures in T. However, by construction, diagonal is a provably total procedure in T, which is a contradiction.

The contradiction in the Church/Turing theory of computation led Church to conclude the following:

“Indeed, if there is no formalization of logic as a whole [theorems are not computationally enumerable], then there is no exact description of what logic is, for it is in the very nature of an exact description that it implies a formalization. And if there no exact description of logic, then there is no sound basis for supposing that there is such a thing as logic.”

In other words, the argument in [Church 1934] is so powerful that it meant the end of logic!  

Left unresolved the contradiction could provide the basis for cyberattacks as explained here:

        “Epistemology Cyberattacks”

                https://papers.ssrn.com/abstract=3603021

Fortunately, there is a better use for [Church 1934] as follows:  it can be adapted to construct a true but unprovable proposition in foundations (instead of the nonexistent one proposed in [Gödel 1931]). Used in this way, [Church 1934] makes a fundamental contribution to foundations instead of demolishing the possibility of foundations as [Church 1934] concluded.


Thursday, March 25, 2021

Further Development of Dijkstra's Contributions

 I fondly remember Dijkstra! He inspired important advances in my own professional development as related in this posting. I was fortunate to have stimulating conversations. Interactions with Dijkstra were generally very focused on solutions he had recently found or problems he was trying to solve.

Dijkstra was a physicist turned programmer--a pragmatist to the core who used mathematical tools
when needed to solve problems. My background in mathematics has made my work more in the framework of mathematical abstraction applied to practical issues. When working on the same issues, our approaches (and solutions) come from different perspectives. Pragmatism and abstraction are both useful in research.

Listening to Dijkstra and reading his publications was always worthwhile even though we often disagreed. I learned a great deal from him and very much appreciate having interacted with him and observed him in action. 

One of the finest tributes to Dijkstra is to take his work seriously. One on one, Dijkstra loved a good debate! This posting further develops some of his most important work.

Dijkstra's semaphores were a major advance in concurrent programming. Dijkstra used semaphores to implement critical sections of code in which activity in the section excludes all other activities from executing in the section. In large programs, semaphores are not easy to manage. Bugs in the use of semaphores (also known as "locks") have caused many irreproducible crashes in large software systems. A region of mutual exclusion is a generalization of a critical section that protects local variables in addition to code. As initially developed, regions of mutual exclusion are less powerful than using semaphores. A "hole" in a region of mutual allows an activity to temporarily leave the region and later return to exclude other activities. Regions with holes provide a structured way to have the full power of semaphores, without allowing their dangerous use. Consequently, system crashes can be prevented using regions of mutual exclusion with holes.

Global states are central to the Church/Turing model of computation. In this model, there is a global state with nondeterministic transition to the next state. A state transition can be initiated by a computation step that specifies that one of a number of specified steps can be executed next. The model has the property of bounded nondeterminism. Bounded nondeterminism means that there is a bound determined in advance for the number of possibilities that a system can explore given that it must always come back with an answer. In the development of a theory of concurrent computation, Dijkstra remained committed to a global state model of computation. This commitment gave rise to the “unbounded nondeterminism” controversy. Digital systems can be physically indeterminate by making use of arbiters in order to resolve reception order in communication between systems. Because of physical indeterminacy, a digital system can have the property of unbounded nondeterminism in that no bound exists when it is started on the number of possibilities that an always-responding digital system can explore. Being restricted to bounded nondeterminism is one the reasons that the Church/Turing model of computation is inadequate for digital computation. More general models of computation had to be developed beyond the Church/Turing model. The upshot was that Dijkstra and I agreed to disagree on the issue of physical indeterminacy and consequent unbounded indeterminacy.

Following 1951 work by Alan Turing, Dijkstra developed a theory of computation based on attaching predicates to global states in his wonderful book "A Disciple of Programming". He formulated preconditions for predicates in the nondeterministic transition from one nonlocal state to its successor, which systematized Turing's earlier work.

An induction principle was implicit in Dijkstra's theory of computation. Because global states do not exist in the theory of digital computation, the induction principle for proving properties of digital computation must be based on computational events rather than global states. The induction principle for digital computation is analogous to the one that Dedekind developed for the natural numbers. To prove that a predicate P holds for every natural number, Dedekind's induction principle has two steps as follows:

  1. Base step:  Prove that P holds for 0.
  2. Induction Step:  Prove that if P holds for natural number n, then it holds for n+1.

Dedekind proved that his induction principle rigorously characterizes the natural numbers. Analogously, to prove that a predicate P holds for every event of a digital system, event induction has two steps as follows:

  1. Base step:  Prove that P holds for every incoming event of the system.
  2. Induction step:  Prove that if P holds for an event e, then it holds for each event that immediately follows e.

Many kinds of properties of digital computation can be proved using event induction. Event induction can be used to prove that a particular digital system will always respond to a request. Also, it can be used to prove that a particular digital system will always have a some invariant property viewed from outside even as the system changes its behavior over time. Unlike the Church/Turing model, the event induction principle rigorously characterizes digital computation.

Dijkstra's concurrent automatic storage reclamation algorithm is a marvel. It causes no pauses in operation of a system and causes no pause between ending one phase of reclamation and beginning the next phase. However, Dijkstra's algorithm does not compactify storage. Instead, storage is reclaimed in pieces throughout memory. Consequently, the algorithm does not maintain locality of reference, which is crucial to performance on modern computer cores. Inspired by his algorithm, Henry Lieberman and I published a paper on generational automatic storage reclamation in which storage is divided into generations by time of creation and use of storage. In practice, the most recent generation has much better locality of use.

Dijkstra's work on self-stabilizing systems helped inspire new developments in Intelligent Systems. The intuition is that a system should be stable even in face of disagreement about empirical information, which is extremely common in an Intelligent System. Classical logic can make absurd inferences using such information even if disagreement is deeply hidden. The absurd inferences can be used in cyberattacks against Intelligent Systems. Unlike classical logic, robust inference can prevent absurd inferences being made using empirical information. Consequently, robust inference is crucial to the development and universal deployment of Intelligent Systems in this decade.

 

Monday, October 12, 2020

Video of panel discussion with Joe Armstrong, Carl Hewitt, and Tony Hoare

The video is here:
            https://www.youtube.com/watch?v=37wFVVVZlVU

In a wide ranging discussion, there were some fundamental disagreements among the panelists as follows:


  • I disagreed with Tony Hoare about using synchronized communication as the primitive because it is too slow for both IoT and many-core chips. Instead, the primitive for communication should be asynchronous sending and receiving, from which more complex protocols can be constructed. 
       Also, I disagreed with Tony about sequential actions (using ";") as being
       foundational. 
Instead, concurrent actions are foundational for digital
       systems as follows:

    • Receipt of a communication activated sending other communications
    • An Actor received one communication before it received another communication
       Consequently, a computation is a partial order of causalityTony and I
       did agree that tooling is needed for navigating the partial order. We just
       disagreed about whether sequential actions (using ";") are foundational.


       Furthermore, class hierarchies are not a suitable foundation for Scalable
       Intelligent Systems
Interfaces instead of subclassing should be used for
       IoT communication.  Also,  entities and descriptions in large ontologies do
       not fit in an object class hierarchy
, e.g., Java and C++. Subclassing is
       not secure because it allows a subclass to impersonate a superclass.

  • I disagreed with Joe Armstrong about requiring use of external mailboxes because they are inefficient in both space and time.
    Instead of requiring an external mailbox for each Actor, buffering/reordering/scheduling should be performed inside an Actor as required.
Of course, Tony and Joe made other great points with which we agree entirely.