== Abstract array axioms == 

 The abstract array axioms in the current version are: 
 ::get(set(A,I, V), I) = V 
 ::get(set(A,I, V), J) = get(A, J) if I ≠ J 
 :for any array state A, any value V, and any tuples I, J for which the operations are defined. 
 Methink that this is not OK because: 
 *To write an sbtract algorithm that scans an array, one needs to know the set of valid indices.  This requires additional operations and possibly other axioms. 
 *These axioms say nothing about time and space costs, so they allow implementations where the cost of get/set is proportional to the size of A (or worse). This is not good when analyzing the performance of algorithms that use arrays. 
 *The axioms also allow an Awk-style array that creates any element that gets assigned to, but fails when reading a non-existent element. 
 *In fact they are satisfied by a "pea-brained" Awk array where each set(A,I,V) creates A[I] and destroys all other elements. 
 My idea for fixing the last two bugs was to introduce a "FAIL" value to be the result of accessing an invalid index,  and postulate that get(FAIL,I) = set(FAIL,I,V)=FAIL for all I,V; and then remove the phrase "for which the operations are defined".  However then the first axiom is violated if I is an invalid index. 
 Does the paper say anythng about these problems?