Theorem: LinearMap.funLeft_surjective_of_injective
File: Mathlib/Algebra/Module/Equiv.lean

tactic: intro g
state_before: R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Injective f
⊢ Surjective ⇑(funLeft R M f)
state_after: R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Injective f
g : m → M
⊢ ∃ a, (funLeft R M f) a = g

tactic: refine ⟨fun x => if h : ∃ y, f y = x then g h.choose else 0, ?_⟩
state_before: R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Injective f
g : m → M
⊢ ∃ a, (funLeft R M f) a = g
state_after: R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Injective f
g : m → M
⊢ ((funLeft R M f) fun x => if h : ∃ y, f y = x then g h.choose else 0) = g

tactic: ext
state_before: R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Injective f
g : m → M
⊢ ((funLeft R M f) fun x => if h : ∃ y, f y = x then g h.choose else 0) = g
state_after: case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Injective f
g : m → M
x✝ : m
⊢ (funLeft R M f) (fun x => if h : ∃ y, f y = x then g h.choose else 0) x✝ = g x✝

tactic: dsimp only [funLeft_apply]
state_before: case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Injective f
g : m → M
x✝ : m
⊢ (funLeft R M f) (fun x => if h : ∃ y, f y = x then g h.choose else 0) x✝ = g x✝
state_after: case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Injective f
g : m → M
x✝ : m
⊢ (if h : ∃ y, f y = f x✝ then g h.choose else 0) = g x✝

tactic: split_ifs with w
state_before: case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Injective f
g : m → M
x✝ : m
⊢ (if h : ∃ y, f y = f x✝ then g h.choose else 0) = g x✝
state_after: case pos
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Injective f
g : m → M
x✝ : m
w : ∃ y, f y = f x✝
⊢ g w.choose = g x✝

case neg
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Injective f
g : m → M
x✝ : m
w : ¬∃ y, f y = f x✝
⊢ 0 = g x✝

tactic: congr
state_before: case pos
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Injective f
g : m → M
x✝ : m
w : ∃ y, f y = f x✝
⊢ g w.choose = g x✝
state_after: case pos.e_a
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Injective f
g : m → M
x✝ : m
w : ∃ y, f y = f x✝
⊢ w.choose = x✝

tactic: exact hf w.choose_spec
state_before: case pos.e_a
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Injective f
g : m → M
x✝ : m
w : ∃ y, f y = f x✝
⊢ w.choose = x✝
state_after: no goals

tactic: simp only [not_true, exists_apply_eq_apply] at w
state_before: case neg
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂ : Type u_13
N₃ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : Type u_17
n : Type u_18
p : Type u_19
f : m → n
hf : Injective f
g : m → M
x✝ : m
w : ¬∃ y, f y = f x✝
⊢ 0 = g x✝
state_after: no goals