Diffing
This page is about various form of generalized differentiation.
Desired things:
- Compact storage of data
- undoability revertability
- mix-and-meshability with older versions
Application cases
3D modeling - finding points on surfaces
Usage of: Generalized differentiation (bottom up)
Beautiful differentiation:
This is likely useful for 3D modeling constructive solid geometry
in functional representation (algebraic varieties).
As multidimensional gradients and curvatures are
to be used to find points on surfaces.
Storing content addressed codebases with discovered representation of history
Usage of: Differentiating datastructures
Put the abstract Syntax tree (AST) of code into algebraic datatypes (ADTs) Put an edit calculus into the same ADT.
Try to use insights from differentiating datastructures to
arrive at an elegant minimal incidental complexity solution
Question that poses itself: How to represent version history?
As versions can merge and split undo history lists and trees are likely a bad choice.
It's a directed acyclic graph (DAG) structure.
(TODO: Investigate if zippers can be done for DAG datastructures too.)
Enable collaboration in image-based programming via types and structure editing
- "Version Control for Structure Editing"
(wiki-TODO: Elaborate on this.)
Kinds of generalized diffing
Differentiating datastructures
See: Curry-Howard-Lambeck isomorphism With lists and trees as algebrais data types (ADTs) One can interpret them as algebraic structures and literally differentiate. These differentiation correspond to so called zipper datastructures usable to represent diffs on these original ADTs.
Eventually an analogy to Taylor series might be found.
Generalized differentiation (top down)
See 2020 link below.
Needs investigating.
Generalized differentiation (bottom up)
See: Beautiful differentiation (Conal Elliott)
Edit calculus
A formal calculus to make edits on a formal languages abstract syntax tree (AST).
This is invented rather than discovered.
So maybe one can glean a bit from the other cases to arrive at an elegant solution.
Schema diffing – Version Control for Structure Editing
(wiki-TODO: Elaborate on this.)