Why the case of property names can change

Here's a small Python example to illustrate the issues:

 # Properties are case-insensitive, but this can lead to some
 # surprising behavior: the first way a property is used will
 # determine how it ends up in the global symbol table.
 #
 # Sample output:
 #   Property('S', 'HeLLo') Property('S', 'HeLLo')
 #   2
 #   2
 #   135099576
 #   135033272
 #   0
 import metakit
 db = metakit.storage()
 v1 = db.getas('lo[HeLLo:S]')
 v2 = db.getas('hi[hello:S]')
 # surprise: this prints two mixed-case names
 print v1.HeLLo, v2.hello
 # this shows that the Metakit property is the same for both
 # reason: there is a single global case-insensitive symbol table
 print metakit.property('S','HeLLo').id
 print metakit.property('S','hello').id
 # this shows that the Python objects differ
 # reason: these are two wrapper objects around the same thing
 print id(metakit.property('S','HeLLo'))
 print id(metakit.property('S','hello'))
 # this causes a mismatch, it will have to be fixed one day
 print metakit.property('S','HeLLo') == metakit.property('S','hello')

This has been added to the MK sources, as "examples/case.py".