  lua-l archive

• Subject: Re: Tables for mathematicians
• From: Daurnimator <quae@...>
• Date: Sat, 20 Aug 2016 17:03:54 +1000

```On 20 August 2016 at 16:59, Dirk Laurie <dirk.laurie@gmail.com> wrote:
> Just in case you thought tables were easy :-)
>
> Let V be the set of all Lua values.
>
> A key in V is a subset k of V, other than {nil}, such that any two members
> of k are raw equal. Let K be the set of all keys.
>
> Remarks:
> 1. Many keys consist of only one value.
> 2. The subset consisting of only NaN is not a valid key, since NaN is not
> raw equal to itself.
>
> An association is any mapping f from K to V.
>
> An implementation of an association f is a Lua table t such that, if j
> is any member of a key k, rawget(t,k) returns f(k).
>
> An assocation is said to be implementable if an implementation of it exists.
>
> If t is the implementation of an association f, the operation t[j]=v,
> where j belongs to the key k, modifies t to be the implementation of a
> a different association f' in such that f'[a] == f[a] when a ~= k.
>
> Postulate: The keys of an implementable association which are mapped
> to a non-nil value form a well-ordered set.
>
> The `next` function is a generator for one of the possible orderings
> of that well-ordered set.
>
> I could go on ... but note we have not even got close to the issues
> people have been dicussing recently!

Don't forget the conversion of integer floats to integers:

t = {}; f=1.0; t[1.0] = true; k = next(t); print(math.type(f), math.type(k))

```