The need for a null-pointer algebra

Working as a programmer, one is also encountered with the many definitions of non-existence (of a state or of something reducible to a state). A the value of the memory address which is unknown, unavailable or undefined is oftentimes known as NULL ( null, nul, nil – see below)

From Middle French nul, from Latin nūllus, from ne (“not”) + ūllus (“any”).

From Latin nīl, a contraction of nihilnihilum (“nothing”). See nihilism.

The concept of null defines an absence and it should not be confused with zero, which is, depending on context, a cardinal or an ordinal (number). It should also be noted that Latin, for some reason, had a distinction between “nullus” (not any) and “nihilum” (nothing, “no thing”~no object defined)

The definition of null depends on the expectation, intention and context (n.b. at the moment prior-of observation, inference or inspection) of the observer.

In programming languages, null is used a “pointer to nothing” or a “reference to nothing”, implying the possibility to lookup, to retrieve for detailed inspection the item or state the is being referenced by a non-null pointer. It is also worth noting that the semantic of null depend on a) the level of abstraction of the language, b) the conceivable or available function that can be executed on a non-null pointer, and c) the direct or indirect level of embodiment by the machine executing said language of the concept of null (i.e. whether the processor has a special bit for null addresses or it just uses zero). To give a few example from various computational contexts and programming languages:

  • In C/C++ the null pointer is a pointer that intentionally points to nothing. If you don’t have an address to assign to a pointer, you can use null. The null value avoids memory leaks and crashes in applications that contain pointers. From a representation point of view, the value zero is stored as the address corresponding to a null-pointer, as most Intel processors don’t use a specifically-designed and specifically-designated, bit for delimiting the null semantic of absence.
  • In C# null means “no object.” While the constraint to run on Intel processors (without the “null”-designated bit) had to be respected, languages of higher abstraction (such as Java, .NET), which use a intermediary virtual machine between the semantics and the embodied execution (i.e. the hardware processor instructions), the semantic delimitation of absence was performed by wrapping either the value of all the address or by wrapping the execution of each address <store> and <lookup>
  • In a databse, zero is a value while the value null means that no value exists. When used as a value, null is not a memory location. Only pointers hold memory locations. 
  • Without a null character, a string would not correctly terminate, which would cause problems.

Nonetheless, there are other notations for NULL:

Void is a popular different concept used to define an absence of an expected, asserted and alleged state.

From Middle English voidevoyde, from Old French vuitvoidevuide (modern vide), in turn from a Vulgar Latin *vocitus, related to Latin vacuus (“empty”).

Another interesting concept is that of “null and void”:

void – invalidcancelledunenforceable

having no force, binding power, or validity

Proposed notation

[ ] - empty list or the void list; 

An empty list assumes no past, present, future or possible state for any of its items because there are none to be inspected, assumed, inferred or otherwise posited.

In programming, an empty list is usually a final state, in the sense that no further operations are deemed relevant from that point forward, either on-stack (function calls, method invocations) or off-stack (exceptions, interruptions).

[ null ] - "list containing the null item" 

The meaning of this is that the observer (i.e. the sentient reading this article and thinking about this problem) is aware of an absence, of a lack, of a void. This awareness requires the notion of a will to find something or the expectation that something there should be sought in the first place.

null – “unreachable-unreached / unknowable-unknown / undefined-undefinable / unaddressable-unaddressed / uncomputed-uncomputable / unexpected-unexpectable* state or value”

* While each of the dichotomy pairs mentioned above deserve their own discussion from the perspective of variations of expectations between observer and observed, for the sake of brevity, in this article, we will use the phrasing [unknown/undefined]

[A , B] - "both A and B" (but never null!)
[ A|B ] - "either A or B" (but never null!)

From an informational point of view, that is an extremely strong claim. It is like saying that “for the duration of my thought experiment, the contents of this list will not be [unknown/undefined] nor will it contain items that are [unknown/undefined]

[ A|B|   ] - "either A or B or null"  (implicit blank notation)
[ A|B|□ ] - "either A or B or null" (explicit blank notation with Unicode character 'WHITE SQUARE' (U+25A1) / UTF-32 (hex)0x000025A1 (25a1) )
[ A | B | null ]  - " either A or B or null" (explicit blank literal notation)

Bogdan Written by: