64 lines
2.3 KiB
Text
64 lines
2.3 KiB
Text
/-
|
|
Copyright (c) 2014 Jeremy Avigad. All rights reserved.
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
|
|
Module: data.set.function
|
|
Author: Jeremy Avigad, Andrew Zipperer
|
|
|
|
Functions between subsets of finite types.
|
|
-/
|
|
import .basic
|
|
import algebra.function
|
|
open function eq.ops
|
|
|
|
namespace set
|
|
variables {X Y Z : Type}
|
|
|
|
abbreviation eq_on (f1 f2 : X → Y) (a : set X) : Prop :=
|
|
∀₀ x ∈ a, f1 x = f2 x
|
|
|
|
definition image (f : X → Y) (a : set X) : set Y := {y : Y | ∃x, x ∈ a ∧ f x = y}
|
|
notation f `'[`:max a `]` := image f a
|
|
|
|
theorem image_eq_image_of_eq_on {f1 f2 : X → Y} {a : set X} (H1 : eq_on f1 f2 a) :
|
|
f1 '[a] = f2 '[a] :=
|
|
setext (take y, iff.intro
|
|
(assume H2,
|
|
obtain x (H3 : x ∈ a ∧ f1 x = y), from H2,
|
|
have H4 : x ∈ a, from and.left H3,
|
|
have H5 : f2 x = y, from (H1 H4)⁻¹ ⬝ and.right H3,
|
|
exists.intro x (and.intro H4 H5))
|
|
(assume H2,
|
|
obtain x (H3 : x ∈ a ∧ f2 x = y), from H2,
|
|
have H4 : x ∈ a, from and.left H3,
|
|
have H5 : f1 x = y, from (H1 H4) ⬝ and.right H3,
|
|
exists.intro x (and.intro H4 H5)))
|
|
|
|
definition maps_to (f : X → Y) (a : set X) (b : set Y) : Prop := ∀⦃x⦄, x ∈ a → f x ∈ b
|
|
|
|
theorem maps_to_compose {g : Y → Z} {f : X → Y} {a : set X} {b : set Y} {c : set Z}
|
|
(H1 : maps_to g b c) (H2 : maps_to f a b) : maps_to (g ∘ f) a c :=
|
|
take x, assume H : x ∈ a, H1 (H2 H)
|
|
|
|
definition inj_on (f : X → Y) (a : set X) : Prop :=
|
|
∀⦃x1 x2 : X⦄, x1 ∈ a → x2 ∈ a → f x1 = f x2 → x1 = x2
|
|
|
|
theorem inj_on_of_eq_on {f1 f2 : X → Y} {a : set X} (inj_f1 : inj_on f1 a)
|
|
(eq_f1_f2 : eq_on f1 f2 a) : inj_on f2 a :=
|
|
take x1 x2 : X,
|
|
assume ax1 : x1 ∈ a,
|
|
assume ax2 : x2 ∈ a,
|
|
assume H : f2 x1 = f2 x2,
|
|
have H' : f1 x1 = f1 x2, from eq_f1_f2 ax1 ⬝ H ⬝ (eq_f1_f2 ax2)⁻¹,
|
|
show x1 = x2, from inj_f1 ax1 ax2 H'
|
|
|
|
definition surj_on (f : X → Y) (a : set X) (b : set Y) : Prop := b ⊆ f '[a]
|
|
|
|
theorem surj_on_of_eq_on {f1 f2 : X → Y} {a : set X} {b : set Y} (surj_f1 : surj_on f1 a b)
|
|
(eq_f1_f2 : eq_on f1 f2 a) : surj_on f2 a b :=
|
|
take y, assume H : y ∈ b,
|
|
obtain x (H1 : x ∈ a ∧ f1 x = y), from surj_f1 H,
|
|
have H2 : x ∈ a, from and.left H1,
|
|
have H3 : f2 x = y, from (eq_f1_f2 H2)⁻¹ ⬝ and.right H1,
|
|
exists.intro x (and.intro H2 H3)
|
|
end set
|