diff --git a/元素改变导致结构性变化是否安全的证明.md b/元素改变导致结构性变化是否安全的证明.md new file mode 100644 index 0000000..e51b861 --- /dev/null +++ b/元素改变导致结构性变化是否安全的证明.md @@ -0,0 +1,60 @@ +# 图层删除 +当删除一个节点时,该节点一定满足且只满足以下条件中的一条: +1. 是一个Leaf节点,引用了其他的Element; +2. 是一个Folder节点,没有GroupElement引用,没有引用任何其他节点(因为是Folder); +3. 是一个Folder节点,存在对应的GroupElement引用。 + +其中,对于第1条,由于Leaf节点被删除只影响其父亲Folder的属性,所以显然在删除Leaf节点时是绝对安全的。 + +对于第2条,对于其父亲Folder,其被删除只影响其父亲Folder的属性,所以不会影响其父亲;对于其孩子,有可能存在以下情况: +1. 孩子中不存在任何被引用的情况:删除安全; +2. 孩子中存在Folder节点被GroupElement引用,不安全,需要手动将情况转换为第1条后才可以删除。 + +对于第3条,必须首先手动解除其本身的引用,然后将转变为第2条。 + +# 图元删除 +**显然**,无论是什么种类的图元,删除一个图元会影响到的元素只有引用它的图层,所以我们将SimpleElement与GroupElement合并成一种情况讨论。 + +当删除一个图元时,该图元一定满足且只满足以下条件中的一条: +1. 是一个GraphicElement,未被其他图层引用; +2. 是一个GraphicElement,被其他图层引用。 + +对于第1条,删除绝对安全。 + +对于第2条,将引用关系手动解除后,删除安全。 + +# 图层移动 +## 条件分析 +图层移动时,显然,被移动的节点只影响它本身及它的子图层, +移动的目标节点只影响它本身及它的父图层,那么: + +(1) 被移动的图层一定满足且只满足以下条件中的一条: +1. 是一个Folder节点,无对应的GroupElement引用,子节点无引用GroupElement; +2. 是一个Folder节点,无对应的GroupElement引用,子节点存在引用GroupElement; +3. 是一个Folder节点,存在对应的GroupElement引用; +4. 是一个Leaf节点,引用了GroupElement; +5. 是一个Leaf节点,未引用GroupElement。 + +(2) 目标FolderLayer一定满足且只满足以下条件中的一条: +1. 自身无对应的GroupElement引用,无父节点有GroupElement引用; +2. 自身无对应的GroupElement引用,存在父节点有GroupElement引用; +3. 自身存在对应的GroupElement引用。 + +显然,以上条件的全组合可以覆盖所有情况。 +由于: +- `(1) 1` 与 `(2) 中的任一条件`进行组合显然是绝对安全的; +- `(1) 3` 中自身提供的GroupElement并不会影响移动; +- `(1) 5` 与 `(2) 中的任一条件`进行组合显然是绝对安全的; +- `(1) 中的任一条件` 与 `(2) 1` 进行组合显然是绝对安全的。 + +所以接下来对于除去以上情况的所有组合情况进行讨论。 +## 讨论证明 +### `(1) 2` - `(2) 2` +当且仅当被移动的图层的子节点引用的GroupElement 与 目标图层父节点提供的GroupElement 相同时,移动不安全。 +### `(1) 4` - `(2) 2` +当且仅当被移动的图层引用的GroupElement 与 目标图层父节点提供的 GroupElement 相同时,移动不安全。 +### `(2) 3` 的特殊讨论 +当且仅当自身提供的GroupElement 被 被移动图层或其子节点引用时,需要处理其自身情况,否则无视其自身提供的GroupElement,与 `(2) 1` 或 `(2) 2` 视为同情况处理。 + +## 结论 +当且仅当被移动的图层或其子节点所引用的GroupElement 与 目标图层或其父节点所提供的GroupElement 相同时,移动不安全;其余情况均安全。 \ No newline at end of file