Theorem: Basis.ext_alternating
File: Mathlib/LinearAlgebra/Alternating/Basic.lean

tactic: refine AlternatingMap.coe_multilinearMap_injective (Basis.ext_multilinear e fun v => ?_)
state_before: R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ι₁ : Type u_10
inst✝⁵ : Finite ι
R' : Type u_11
N₁ : Type u_12
N₂ : Type u_13
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : N₁ [⋀^ι]→ₗ[R'] N₂
e : Basis ι₁ R' N₁
h : ∀ (v : ι → ι₁), Function.Injective v → (f fun i => e (v i)) = g fun i => e (v i)
⊢ f = g
state_after: R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ι₁ : Type u_10
inst✝⁵ : Finite ι
R' : Type u_11
N₁ : Type u_12
N₂ : Type u_13
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : N₁ [⋀^ι]→ₗ[R'] N₂
e : Basis ι₁ R' N₁
h : ∀ (v : ι → ι₁), Function.Injective v → (f fun i => e (v i)) = g fun i => e (v i)
v : ι → ι₁
⊢ (↑f fun i => e (v i)) = ↑g fun i => e (v i)

tactic: by_cases hi : Function.Injective v
state_before: R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ι₁ : Type u_10
inst✝⁵ : Finite ι
R' : Type u_11
N₁ : Type u_12
N₂ : Type u_13
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : N₁ [⋀^ι]→ₗ[R'] N₂
e : Basis ι₁ R' N₁
h : ∀ (v : ι → ι₁), Function.Injective v → (f fun i => e (v i)) = g fun i => e (v i)
v : ι → ι₁
⊢ (↑f fun i => e (v i)) = ↑g fun i => e (v i)
state_after: case pos
R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ι₁ : Type u_10
inst✝⁵ : Finite ι
R' : Type u_11
N₁ : Type u_12
N₂ : Type u_13
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : N₁ [⋀^ι]→ₗ[R'] N₂
e : Basis ι₁ R' N₁
h : ∀ (v : ι → ι₁), Function.Injective v → (f fun i => e (v i)) = g fun i => e (v i)
v : ι → ι₁
hi : Function.Injective v
⊢ (↑f fun i => e (v i)) = ↑g fun i => e (v i)

case neg
R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ι₁ : Type u_10
inst✝⁵ : Finite ι
R' : Type u_11
N₁ : Type u_12
N₂ : Type u_13
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : N₁ [⋀^ι]→ₗ[R'] N₂
e : Basis ι₁ R' N₁
h : ∀ (v : ι → ι₁), Function.Injective v → (f fun i => e (v i)) = g fun i => e (v i)
v : ι → ι₁
hi : ¬Function.Injective v
⊢ (↑f fun i => e (v i)) = ↑g fun i => e (v i)

tactic: exact h v hi
state_before: case pos
R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ι₁ : Type u_10
inst✝⁵ : Finite ι
R' : Type u_11
N₁ : Type u_12
N₂ : Type u_13
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : N₁ [⋀^ι]→ₗ[R'] N₂
e : Basis ι₁ R' N₁
h : ∀ (v : ι → ι₁), Function.Injective v → (f fun i => e (v i)) = g fun i => e (v i)
v : ι → ι₁
hi : Function.Injective v
⊢ (↑f fun i => e (v i)) = ↑g fun i => e (v i)
state_after: no goals

tactic: have : ¬Function.Injective fun i => e (v i) := hi.imp Function.Injective.of_comp
state_before: case neg
R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ι₁ : Type u_10
inst✝⁵ : Finite ι
R' : Type u_11
N₁ : Type u_12
N₂ : Type u_13
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : N₁ [⋀^ι]→ₗ[R'] N₂
e : Basis ι₁ R' N₁
h : ∀ (v : ι → ι₁), Function.Injective v → (f fun i => e (v i)) = g fun i => e (v i)
v : ι → ι₁
hi : ¬Function.Injective v
⊢ (↑f fun i => e (v i)) = ↑g fun i => e (v i)
state_after: case neg
R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ι₁ : Type u_10
inst✝⁵ : Finite ι
R' : Type u_11
N₁ : Type u_12
N₂ : Type u_13
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : N₁ [⋀^ι]→ₗ[R'] N₂
e : Basis ι₁ R' N₁
h : ∀ (v : ι → ι₁), Function.Injective v → (f fun i => e (v i)) = g fun i => e (v i)
v : ι → ι₁
hi : ¬Function.Injective v
this : ¬Function.Injective fun i => e (v i)
⊢ (↑f fun i => e (v i)) = ↑g fun i => e (v i)

tactic: rw [coe_multilinearMap, coe_multilinearMap, f.map_eq_zero_of_not_injective _ this,
  g.map_eq_zero_of_not_injective _ this]
state_before: case neg
R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ι₁ : Type u_10
inst✝⁵ : Finite ι
R' : Type u_11
N₁ : Type u_12
N₂ : Type u_13
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : N₁ [⋀^ι]→ₗ[R'] N₂
e : Basis ι₁ R' N₁
h : ∀ (v : ι → ι₁), Function.Injective v → (f fun i => e (v i)) = g fun i => e (v i)
v : ι → ι₁
hi : ¬Function.Injective v
this : ¬Function.Injective fun i => e (v i)
⊢ (↑f fun i => e (v i)) = ↑g fun i => e (v i)
state_after: no goals