| ∀ r0, r1, map0, H2. map ⊆ map0 ∧ copy-node-prepost(H0, H2, map0) ∧ ¬ r0 ∈ map0 ∧ r0 ∈ H0 → ⟪map1 := map0, H := H2; copy_node#(r0; r1, map0, H2)⟫ (copy-node-prepost(H0, H2, map0) ∧ H ⊆ H2 ∧ map1 ⊆ map0 ∧ r0 ∈ map0 ∧ map0[r0] = r1), ∀ succ, map, H0, H1, H, map1, succ1. # succ < # succ0 → (∀ r0, r1, map0, H2. map ⊆ map0 ∧ copy-node-prepost(H0, H2, map0) ∧ ¬ r0 ∈ map0 ∧ r0 ∈ H0 → ⟪map1 := map0, H := H2; copy_node#(r0; r1, map0, H2)⟫ (copy-node-prepost(H0, H2, map0) ∧ H ⊆ H2 ∧ map1 ⊆ map0 ∧ r0 ∈ map0 ∧ map0[r0] = r1)) ∧ H1 = H ∧ map1 = map ∧ closed(succ, H0) ∧ copy-edges-prepost(succ1, H0, H, map) → ⟪copy_edges#(succ; succ1, map, H)⟫ (H1 ⊆ H ∧ map1 ⊆ map ∧ copy-edges-prepost(succ1, H0, H, map)), H1 = H, map1 = map, closed(succ0, H0), copy-edges-prepost(succ1, H0, H, map) ⊦ ⟪copy_edges#(succ0; succ1, map, H)⟫ (H1 ⊆ H ∧ map1 ⊆ map ∧ copy-edges-prepost(succ1, H0, H, map)) |
[Concretesimprules((Csimpnamedseq(copy-edges,,, ⊦ )))]