Searcharxiv⌕ Search

arXiv subjects

Moez A. AbdelGawad

Publications and source records attributed to Moez A. AbdelGawad.

At least 19 recordsLinked to original sources

Mutual Coinduction

In this paper we present mutual coinduction as a dual of mutual induction and also as a generalization of standard coinduction. In particular, we present a precise formal definition of mutual induction and mutual coinduction. In the process we present the associated mutual induction and mutual coinduction proof principles, and we present the conditions under which these principles hold. In spite of some mention of mutual (co)induction in research literature, but the formal definition of mutual (co)induction and the proof of the mutual (co)induction proof principles we present here seem to be the first such definition and proof. As such, it seems our work is the first to point out that monotonicity of mutual generators seems not sufficient for guaranteeing the existence of least and greatest simultaneous fixed points in complete lattices, and that continuity on the other hand is sufficient for guaranteeing their existence. [The paper has been responsively updated so as to not require the continuity of generators but only require their monotonicity, and it now includes a proof of the sufficiency of monotonicity. A full revision of the paper to reflect the relaxed requirement is currently underway.] In the course of our presentation of mutual coinduction we also discuss some concepts related to standard (also called direct) induction and standard coinduction, as well as ones related to mutual (also called simultaneous or indirect) induction. During the presentation we purposely discuss particular standard concepts so as to help motivate the definitions of their more general counterparts for mutual/ simultaneous/ indirect (co)induction. Greatest simultaneous post-fixed points, in particular, will be abstractions and models of mathematical objects (e.g., points, sets, types, predicates, etc.) that are defined mutually-coinductively.

cs.LO↗

Java Generics: An Order-Theoretic Approach (Abridged Outline)

The mathematical modeling of generics in Java and other similar nominally-typed object-oriented programming languages is a challenge. In this short paper we present the outline of a novel order-theoretic approach to modeling generics, in which we also elementarily use some concepts and tools from category theory. We believe a combined order-theoretic and category-theoretic approach to modeling generics holds the keys to overcoming much of the adversity found when analyzing features of generic OO type systems.

cs.PL↗

Using Category Theory in Modeling Generics in OOP (Outline)

Modeling generics in object-oriented programming languages such as Java and C# is a challenge. Recently we proposed a new order-theoretic approach to modeling generics. Given the strong relation between order theory and category theory, in this extended abstract we present how also some tools from category theory, such as adjunctions, monads and operads, are used in our approach to modeling generics.

cs.PL↗

Java Generics: An Order-Theoretic Approach (Detailed Outline)

Generics have been added to Java so as to increase the expressiveness of its type system. Generics in Java, however, include some features---such as Java wildcards, $F$-bounded generics, and Java erasure---that have been hard to analyze and reason about so far, reflecting the fact that the mathematical modeling of generics in Java and other similar nominally-typed object-oriented programming (OOP) languages is a challenge. As a result, the type systems of mainstream nominally-typed OOP languages, which are built based on current models of generics, are overly complex, which hinders the progress of these type systems. In this paper we present a detailed outline of a new approach to modeling Java generics that uses concepts and tools from order theory, and we report on our progress in developing this approach. Fundamentally, we use the nominal subclassing relation (as a partial order) together with some standard and novel order-theoretic tools to construct the generic nominal subtyping relation (as a partial order) and the containment relation between generic type arguments (a third partial order). We further analyze the relation between these three ordering relations---which lie at the heart of mainstream generic OO type systems---using order theoretic tools, and accordingly we explore extensions of OO type systems suggested by such analysis. In our approach we also make use of some concepts and tools from category theory. We believe a combined order-theoretic and category-theoretic approach to modeling generics holds the keys to overcoming much of the adversity found when analyzing features of generic OO type systems.

cs.PL↗

Induction, Coinduction, and Fixed Points: A Concise Comparative Survey

In this survey article (which hitherto is an ongoing work-in-progress) we present the formulation of the induction and coinduction principles using the language and conventions of each of order theory, set theory, programming languages' type theory, first-order logic, and category theory, for the purpose of examining some of the similarities and, more significantly, the dissimilarities between these various mathematical disciplines, and hence shed some light on the precise relation between these disciplines. Towards that end, in this article we discuss plenty of related concepts, such as fixed points, pre-fixed points, post-fixed points, inductive sets and types, coinductive sets and types, algebras and coalgebras. We conclude the survey by hinting at the possibility of a more abstract and unified treatment that uses concepts from category theory such as monads and comonads.

cs.LO↗

Object-Oriented Theorem Proving (OOTP): First Thoughts

Automatic (i.e., computer-assisted) theorem proving (ATP) can come in many flavors. This document presents early steps in our effort towards defining object-oriented theorem proving (OOTP) as a new style of ATP. Traditional theorem proving (TTP) is the only well-known flavor of ATP so far. OOTP is a generalization of TTP. While TTP is strongly based on functional programming (FP), OOTP is strongly based on object-oriented programming (OOP) instead. We believe OOTP is a style of theorem proving that is no less powerful and no less natural than TTP and thus likely will be no less practically useful than TTP.

cs.PL↗

Induction, Coinduction, and Fixed Points in PL Type Theory

Recently we presented a concise survey of the formulation of the induction and coinduction principles, and some concepts related to them, in programming languages type theory and four other mathematical disciplines. The presentation in type theory involved the separate formulation of these concepts, first, in the theory of types of functional programming languages and, next, in the theory of types of object-oriented programming languages. In this article we show that separating these two formulations helps demonstrate some of the fundamental differences between structural subtyping, predominant in functional programming languages, and nominal subtyping, predominant in object-oriented programming languages---including differences concerning type negation and concerning the existence of inductive types, of coinductive types, and of approximations thereof. In the article we also motivate mutual coinduction and mutual coinductive types, and their approximations, and we discuss in brief the potential relevance of these concepts to object-oriented programming (OOP) type theory.

cs.LO↗

Induction, Coinduction, and Fixed Points: Intuitions and Tutorial

Recently we presented a concise survey of the formulation of the induction and coinduction principles, and some concepts related to them, in five different fields mathematical fields, hence shedding some light on the precise relation between these fields. In this article we present few tutorial examples---from set theory, number theory and real analysis---that illustrate these concepts, and the intuitions behind them, more concretely.

cs.LO↗

Doubly F-Bounded Generics

In this paper we suggest how f-bounded generics in nominally-typed OOP can be extended to the more general notion we call `doubly f-bounded generics' and we suggest how doubly f-bounded generics can be reasoned about. We also (attempt to) prove, using a coinductive argument, that our reasoning method is mathematically sound.

cs.PL↗

Java Subtyping as an Infinite Self-Similar Partial Graph Product

Due to supporting variance annotations, such as wildcard types, the subtyping relation in Java and other generic nominally-typed OO programming languages is both interesting and intricate. In these languages, the subtyping relation between ground object types, i.e., ones with no type variables, is the basis for defining the full OO subtyping relation, i.e., that includes type variables. As an ordering relation over the set of types, the subtyping relation in object-oriented programming languages can always be represented as a directed graph. In order to better understand some of the subtleties of the subtyping relation in Java, in this paper we present how the subtyping relation between ground Java types can be precisely constructed using two new operations (a binary operation and a unary one) on directed graphs. The binary operation we use, called a partial Cartesian graph product, is similar in its essence to standard graph products and group products. Its definition is based in particular on that of the standard Cartesian graph product. We believe the use of graph operations in constructing the ground generic Java subtyping relation reveals some of the not-immediately-obvious structure of the subtyping relation not only in Java but, more generally, also in mainstream generic nominally-typed OO programming languages such as C#, Scala and Kotlin. Accordingly, we believe that describing precisely how graph operations can be used to explicitly construct the subtyping relation in these languages, as we do in this paper, may significantly improve our understanding of features of the type systems of these languages such as wildcard types and variance annotations, and of the dependency of these features on nominal subtyping in nominally-typed OOP.

cs.PL↗

Partial Cartesian Graph Product

In this paper we define a new product-like binary operation on directed graphs, and we discuss some of its properties. We also briefly discuss its application in constructing the subtyping relation in generic nominally-typed object-oriented programming languages.

cs.PL↗

Towards Taming Java Wildcards and Extending Java with Interval Types

Of the complex features of generic nominally-typed OO type systems, wildcard types and variance annotations are probably the hardest to fully grasp. As demonstrated when adding closures (a.k.a., lambdas) and when extending type inference in Java, wildcard types and variance annotations make the development and progress of OO programming languages, and of their type systems in particular, a challenging and delicate task. In this work we build on our concurrent work, in which we model Java subtyping using a partial graph product, to suggest how wildcard types in Java can be generalized, and simplified, to interval types. In particular, interval types correspond to endpoints of paths in the Java subtyping graph. In addition to being a simple and more familiar notion, that is easier to grasp than wildcard types, interval types are strictly more expressive than wildcard types. As such, we believe interval types, when developed and analyzed in full, will be a welcome addition to Java and other similar generic nominally-typed OO programming languages.

cs.PL↗

Finitary-based Domain Theory in Coq: An Early Report

In domain theory every finite computable object can be represented by a single mathematical object instead of a set of objects, using the notion of finitary-basis. In this article we report on our effort to formalize domain theory in Coq in terms of finitary-basis.

cs.LO↗

An Overview of Nominal-Typing versus Structural-Typing in OOP

NOOP is a mathematical model of nominally-typed OOP that proves the identification of inheritance and subtyping in mainstream nominally-typed OO programming languages and the validity of this identification. This report gives an overview of the main notions in OOP relevant to constructing a mathematical model of OOP such as NOOP. The emphasis in this report is on defining nominality, nominal typing and nominal subtyping of mainstream nominally-typed OO languages, and on contrasting the three notions with their counterparts in structurally-typed OO languages, i.e., with structurality, structural typing and structural subtyping, respectively. An additional appendix demonstrates these notions and other related notions, and the differences between them, using some simple code examples. A detailed, more technical comparison between nominal typing and structural typing in OOP is presented in other publications.

cs.PL↗

Subtyping in Java is a Fractal

While developing their software, professional object-oriented (OO) software developers keep in their minds an image of the subtyping relation between types in their software. The goal of this paper is to present an observation about the graph of the subtyping relation in Java, namely the observation that, after the addition of generics---and of wildcards, in particular---to Java, the graph of the subtyping relation is no longer a simple directed-acyclic graph (DAG), as in pre-generics Java, but is rather a fractal. Further, this observation equally applies to other mainstream nominally-typed OO languages (such as C#, C++ and Scala) where generics and wildcards (or some other form of 'variance annotations') are standard features. Accordingly, the shape of the subtyping relation in these OO languages is more complex than a tree or a simple DAG, and indeed is also a fractal. Given the popularity of fractals, the fractal observation may help OO software developers keep a useful and intuitive mental image of their software's subtyping relation, even if it is a little more frightening, and more amazing one than before. With proper support from IDEs, the fractal observation can help OO developers in resolving type errors they may find in their code in lesser time, and with more confidence.

cs.PL↗

A Comparison of NOOP to Structural Domain-Theoretic Models of OOP

Mainstream object-oriented programming languages such as Java, C#, C++ and Scala are all almost entirely nominally-typed. NOOP is a recently developed domain-theoretic model of OOP that was designed to include full nominal information found in nominally-typed OOP. This paper compares NOOP to the most widely known domain-theoretic models of OOP, namely, the models developed by Cardelli and Cook, which were structurally-typed models. Leveraging the development of NOOP, the comparison presented in this paper provides a clear and precise mathematical account for the relation between nominal and structural OO type systems.

cs.PL↗

Why Nominal-Typing Matters in OOP

The statements `inheritance is not subtyping' and `mainstream OO languages unnecessarily place restrictions over inheritance' have rippled as mantras through the PL research community for years. Many mainstream OO developers and OO language designers however do not accept these statements. In \emph{nominally-typed} OO languages that these developers and language designers are dearly familiar with, inheritance simply is subtyping; and they believe OO type inheritance is an inherently nominal notion not a structural one. Nominally-typed OO languages are among the most used programming languages today. However, the value of nominal typing to mainstream OO developers, as a means for designing robust OO software, seems to be in wait for full appreciation among PL researchers--thereby perpetuating an unnecessary schism between many OO developers and language designers and many OO PL researchers, with each side discounting, if not even disregarding, the views of the other. In this essay we strengthen earlier efforts to demonstrate the semantic value of nominal typing by presenting a technical comparison between nominal OO type systems and structural OO type systems. Recently, a domain-theoretic model of nominally-typed OOP was compared to well-known models of structurally-typed OOP. Combined, these comparisons provide a clear and deep account for the relation between nominal and structural OO type systems that has not been presented before, and they help demonstrate the key value of nominal typing and nominal subtyping to OO developers and language designers. We believe a clearer understanding of the key semantic advantage of pure nominal OO typing over pure structural OO typing can help remedy the existing schism. We believe future foundational OO PL research, to further its relevance to mainstream OOP, should be based less on structural models of OOP and more on nominal ones instead.

cs.PL↗