@@ -1222,21 +1222,29 @@ by { induction p; simp only [*, transfer, edges_nil, edges_cons, eq_self_iff_tru
12221222@[simp] lemma support_transfer : (p.transfer H hp).support = p.support :=
12231223by { induction p; simp only [*, transfer, eq_self_iff_true, and_self, support_nil, support_cons], }
12241224
1225- lemma transfer_is_path (pp : p.is_path) : (p.transfer H hp).is_path :=
1225+ @[simp] lemma length_transfer : (p.transfer H hp).length = p.length :=
1226+ by induction p; simp [*]
1227+
1228+ variables {p}
1229+
1230+ protected lemma is_path.transfer (pp : p.is_path) : (p.transfer H hp).is_path :=
12261231begin
12271232 induction p;
12281233 simp only [transfer, is_path.nil, cons_is_path_iff, support_transfer] at pp ⊢,
12291234 { tauto, },
12301235end
12311236
1232- lemma transfer_is_cycle (p : G.walk u u) (hp) (pc : p.is_cycle) : (p.transfer H hp).is_cycle :=
1237+ protected lemma is_cycle.transfer {p : G.walk u u} (pc : p.is_cycle) (hp) :
1238+ (p.transfer H hp).is_cycle :=
12331239begin
12341240 cases p;
12351241 simp only [transfer, is_cycle.not_of_nil, cons_is_cycle_iff, transfer, edges_transfer] at pc ⊢,
12361242 { exact pc, },
1237- { exact ⟨transfer_is_path _ _ pc.left, pc.right⟩, },
1243+ { exact ⟨pc.left.transfer _ , pc.right⟩, },
12381244end
12391245
1246+ variables (p)
1247+
12401248@[simp] lemma transfer_transfer {K : simple_graph V} (hp' : ∀ e, e ∈ p.edges → e ∈ K.edge_set) :
12411249 (p.transfer H hp).transfer K (by { rw p.edges_transfer hp, exact hp', }) = p.transfer K hp' :=
12421250by { induction p; simp only [transfer, eq_self_iff_true, heq_iff_eq, true_and], apply p_ih, }
@@ -1269,13 +1277,21 @@ variables {G}
12691277
12701278/-- Given a walk that avoids a set of edges, produce a walk in the graph
12711279with those edges deleted. -/
1272- @[simp, reducible]
1280+ @[reducible]
12731281def to_delete_edges (s : set (sym2 V))
12741282 {v w : V} (p : G.walk v w) (hp : ∀ e, e ∈ p.edges → ¬ e ∈ s) : (G.delete_edges s).walk v w :=
12751283p.transfer _ (by
12761284 { simp only [edge_set_delete_edges, set.mem_diff],
12771285 exact λ e ep, ⟨edges_subset_edge_set p ep, hp e ep⟩, })
12781286
1287+ @[simp] lemma to_delete_edges_nil (s : set (sym2 V)) {v : V} (hp) :
1288+ (walk.nil : G.walk v v).to_delete_edges s hp = walk.nil := rfl
1289+
1290+ @[simp] lemma to_delete_edges_cons (s : set (sym2 V))
1291+ {u v w : V} (h : G.adj u v) (p : G.walk v w) (hp) :
1292+ (walk.cons h p).to_delete_edges s hp =
1293+ walk.cons ⟨h, hp _ (or.inl rfl)⟩ (p.to_delete_edges s $ λ _ he, hp _ $ or.inr he) := rfl
1294+
12791295/-- Given a walk that avoids an edge, create a walk in the subgraph with that edge deleted.
12801296This is an abbreviation for `simple_graph.walk.to_delete_edges`. -/
12811297abbreviation to_delete_edge {v w : V} (e : sym2 V) (p : G.walk v w) (hp : e ∉ p.edges) :
@@ -1287,10 +1303,13 @@ lemma map_to_delete_edges_eq (s : set (sym2 V)) {v w : V} {p : G.walk v w} (hp)
12871303 walk.map (hom.map_spanning_subgraphs (G.delete_edges_le s)) (p.to_delete_edges s hp) = p :=
12881304by rw [←transfer_eq_map_of_le, transfer_transfer, transfer_self]
12891305
1290- lemma is_path.to_delete_edges (s : set (sym2 V))
1306+ protected lemma is_path.to_delete_edges (s : set (sym2 V))
12911307 {v w : V} {p : G.walk v w} (h : p.is_path) (hp) :
1292- (p.to_delete_edges s hp).is_path :=
1293- by { rw ← map_to_delete_edges_eq s hp at h, exact h.of_map }
1308+ (p.to_delete_edges s hp).is_path := h.transfer _
1309+
1310+ protected lemma is_cycle.to_delete_edges (s : set (sym2 V))
1311+ {v : V} {p : G.walk v v} (h : p.is_cycle) (hp) :
1312+ (p.to_delete_edges s hp).is_cycle := h.transfer _
12941313
12951314@[simp] lemma to_delete_edges_copy (s : set (sym2 V))
12961315 {u v u' v'} (p : G.walk u v) (hu : u = u') (hv : v = v') (h) :
0 commit comments