Friday, April 26, 2019

Problem Calculus: Spaces

  • Semantically Homogeneous:  A space where each dimension can be combined into a larger uniform multidimensional space.  Movement in each dimension is effectively the same as movement in any other dimension.  Only differing by a rotation.  For example, a function that has the signature "int * int * int -> unit" where we are representing a point in 3D euclidean space.  Each parameter is a different axis (x,y,z) in the coordinate plane.
  • Semantically Heterogeneous:  A space where each dimension cannot be combined into a larger uniform space because each dimension serves a radically different purpose.  For example, if you had the function signature from before "int * int * int -> unit", but this time if the first "int" represented "age", the second one represented "width", and the last one represented "RGB color".  In this instance the different dimensions of the space aren't uniform and each have different meaning.  You can still plot a 3D point in this space, but the meaning of moving in one dimension is radically different than the meaning of moving in another dimension.  
  • Indexed Dimension:  Where the value of one of the dimensions modifies the semantics of another of the dimensions.  For example, the type "bool * int * int" may have the meaning:  "true * x * y" and "false * r * θ".  When the boolean is true, then the space indicates a typical coordinate plane.  But when the boolean is false, then the space indicates a polar coordinate plane.  
  • Indirectly Related Dimension:  Typically, a space will have dimensions where each one is free to associate and relate to any other without any effort required.  For example, if you have "x,y,z" then you are free to consider "x + y" or "x + z" or "y + z".  Each one can reach each other space directly.  However, if your space instead looks like "linked_list<int; 3>" then the first dimension reaches the second one directly.  And the second dimension reaches the third one.  In general it makes sense to start thinking about all dimensions that are related by some predicate.  For example, all even dimensions or all dimensions separated by 18 other dimensions.  
    • Omni Related:  Typical dimensional relationships.  Everything can access everything else and it doesn't make sense to pair off the dimensions.
    • List Related:  Like the linked_list example above.  The dimensions are related to each other like on a number line.
    • Tree Related:  If you're building a tree, then the relationships can get more complicated yet.  Perhaps you want all dimensions that belong in a certain sub tree.  Or worse yet perhaps you care about dimensions that are siblings or cousins with some specific path or families of paths between them.
    • Graph Related:  Worse case scenario is that your dimensions have arbitrary relationships to other dimensions, but not omni related (or maybe sometimes they are omni related ... you have to check each time).
    • Other?:  There are generalizations of graphs, but I'm not sure things fundamentally change.  A hypergraph can be represented by a specialized graph and the relationships between dimensions are going to be preserved.
  • Abstraction Confusion:  If you have a graph (also applies to lists and trees) and the contained objects in each node have the possibility to reference the containing graph nodes.
  • Isolation Confusion:  If you have a graph (also applies to lists and trees) and the contained objects in each node have the possibility to reference contained objects in other nodes of the graph.