@@ -192,6 +192,24 @@ protected lemma inj_on : inj_on e e.source := e.left_inv_on.inj_on
192
192
protected lemma bij_on : bij_on e e.source e.target := e.inv_on.bij_on e.maps_to e.symm_maps_to
193
193
protected lemma surj_on : surj_on e e.source e.target := e.bij_on.surj_on
194
194
195
+ /-- Create a copy of a `local_equiv` providing better definitional equalities. -/
196
+ @[simps] def copy (e : local_equiv α β) (f : α → β) (hf : ⇑e = f) (g : β → α) (hg : ⇑e.symm = g)
197
+ (s : set α) (hs : e.source = s) (t : set β) (ht : e.target = t) :
198
+ local_equiv α β :=
199
+ { to_fun := f,
200
+ inv_fun := g,
201
+ source := s,
202
+ target := t,
203
+ map_source' := λ x, ht ▸ hs ▸ hf ▸ e.map_source,
204
+ map_target' := λ y, hs ▸ ht ▸ hg ▸ e.map_target,
205
+ left_inv' := λ x, hs ▸ hf ▸ hg ▸ e.left_inv,
206
+ right_inv' := λ x, ht ▸ hf ▸ hg ▸ e.right_inv }
207
+
208
+ lemma copy_eq_self (e : local_equiv α β) (f : α → β) (hf : ⇑e = f) (g : β → α) (hg : ⇑e.symm = g)
209
+ (s : set α) (hs : e.source = s) (t : set β) (ht : e.target = t) :
210
+ e.copy f hf g hg s hs t ht = e :=
211
+ by { substs f g s t, cases e, refl }
212
+
195
213
/-- Associating to a local_equiv an equiv between the source and the target -/
196
214
protected def to_equiv : equiv (e.source) (e.target) :=
197
215
{ to_fun := λ x, ⟨e x, e.map_source x.mem⟩,
@@ -292,10 +310,33 @@ begin
292
310
e'.left_inv he] }
293
311
end
294
312
313
+ lemma inter_eq_of_inter_eq_of_eq_on {e' : local_equiv α β} (h : e.is_image s t)
314
+ (h' : e'.is_image s t) (hs : e.source ∩ s = e'.source ∩ s) (Heq : eq_on e e' (e.source ∩ s)) :
315
+ e.target ∩ t = e'.target ∩ t :=
316
+ by rw [← h.image_eq, ← h'.image_eq, ← hs, Heq.image_eq]
317
+
318
+ lemma symm_eq_on_of_inter_eq_of_eq_on {e' : local_equiv α β} (h : e.is_image s t)
319
+ (hs : e.source ∩ s = e'.source ∩ s) (Heq : eq_on e e' (e.source ∩ s)) :
320
+ eq_on e.symm e'.symm (e.target ∩ t) :=
321
+ begin
322
+ rw [← h.image_eq],
323
+ rintros y ⟨x, hx, rfl⟩,
324
+ have hx' := hx, rw hs at hx',
325
+ rw [e.left_inv hx.1 , Heq hx, e'.left_inv hx'.1 ]
326
+ end
327
+
295
328
end is_image
296
329
297
330
lemma is_image_source_target : e.is_image e.source e.target := λ x hx, by simp [hx]
298
331
332
+ lemma is_image_source_target_of_disjoint (e' : local_equiv α β) (hs : disjoint e.source e'.source)
333
+ (ht : disjoint e.target e'.target) :
334
+ e.is_image e'.source e'.target :=
335
+ assume x hx,
336
+ have x ∉ e'.source, from λ hx', hs ⟨hx, hx'⟩,
337
+ have e x ∉ e'.target, from λ hx', ht ⟨e.maps_to hx, hx'⟩,
338
+ by simp only *
339
+
299
340
lemma image_source_inter_eq' (s : set α) :
300
341
e '' (e.source ∩ s) = e.target ∩ e.symm ⁻¹' s :=
301
342
by rw [inter_comm, e.left_inv_on.image_inter', image_source_eq_target, inter_comm]
353
394
354
395
/-- Restricting a local equivalence to e.source ∩ s -/
355
396
protected def restr (s : set α) : local_equiv α β :=
356
- (@is_image.of_symm_preimage_eq α β e s _ rfl).restr
397
+ (@is_image.of_symm_preimage_eq α β e s (e.symm ⁻¹' s) rfl).restr
357
398
358
399
@[simp, mfld_simps] lemma restr_coe (s : set α) : (e.restr s : α → β) = e := rfl
359
400
@[simp, mfld_simps] lemma restr_coe_symm (s : set α) : ((e.restr s).symm : β → α) = e.symm := rfl
@@ -626,38 +667,23 @@ lemma symm_piecewise (e e' : local_equiv α β) {s : set α} {t : set β}
626
667
(e.piecewise e' s t H H').symm = e.symm.piecewise e'.symm t s H.symm H'.symm :=
627
668
rfl
628
669
629
- /-- Combine two `local_equiv`s with disjoint sources and disjoint targets. We do not reuse
630
- `local_equiv.piecewise` here to provide better formulas for `source` and `target`. -/
670
+ /-- Combine two `local_equiv`s with disjoint sources and disjoint targets. We reuse
671
+ `local_equiv.piecewise`, then override `source` and `target` to ensure better definitional
672
+ equalities. -/
631
673
@[simps] def disjoint_union (e e' : local_equiv α β) (hs : disjoint e.source e'.source)
632
674
(ht : disjoint e.target e'.target) [∀ x, decidable (x ∈ e.source)]
633
675
[∀ y, decidable (y ∈ e.target)] :
634
676
local_equiv α β :=
635
- { to_fun := e.source.piecewise e e',
636
- inv_fun := e.target.piecewise e.symm e'.symm,
637
- source := e.source ∪ e'.source,
638
- target := e.target ∪ e'.target,
639
- map_source' := λ x,
640
- have x ∈ e'.source → x ∉ e.source, from λ h' h, hs ⟨h, h'⟩,
641
- by rintro (he|he'); simp *,
642
- map_target' := λ y,
643
- have y ∈ e'.target → y ∉ e.target, from λ h' h, ht ⟨h, h'⟩,
644
- by rintro (he|he'); simp *,
645
- left_inv' := λ x,
646
- begin
647
- rintro (he|he'),
648
- { simp * },
649
- { have : x ∉ e.source ∧ e' x ∉ e.target,
650
- from ⟨λ h, hs ⟨h, he'⟩, λ h, ht ⟨h, e'.map_source he'⟩⟩,
651
- simp * }
652
- end ,
653
- right_inv' := λ y,
654
- begin
655
- rintro (he|he'),
656
- { simp * },
657
- { have : y ∉ e.target ∧ e'.symm y ∉ e.source,
658
- from ⟨λ h, ht ⟨h, he'⟩, λ h, hs ⟨h, e'.map_target he'⟩⟩,
659
- simp * }
660
- end }
677
+ (e.piecewise e' e.source e.target e.is_image_source_target $
678
+ e'.is_image_source_target_of_disjoint _ hs.symm ht.symm).copy
679
+ _ rfl _ rfl (e.source ∪ e'.source) (ite_left _ _) (e.target ∪ e'.target) (ite_left _ _)
680
+
681
+ lemma disjoint_union_eq_piecewise (e e' : local_equiv α β) (hs : disjoint e.source e'.source)
682
+ (ht : disjoint e.target e'.target) [∀ x, decidable (x ∈ e.source)]
683
+ [∀ y, decidable (y ∈ e.target)] :
684
+ e.disjoint_union e' hs ht = e.piecewise e' e.source e.target e.is_image_source_target
685
+ (e'.is_image_source_target_of_disjoint _ hs.symm ht.symm) :=
686
+ copy_eq_self _ _ _ _ _ _ _ _ _
661
687
662
688
section pi
663
689
0 commit comments