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

tactic: refine' AlternatingMap.coe_multilinearMap_injective (Basis.ext_multilinear e fun v => _)
state_before: R : Type ?u.1290808
inst✝¹⁶ : Semiring R
M : Type ?u.1290814
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type ?u.1290846
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type ?u.1290876
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type ?u.1290906
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type ?u.1291294
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_4
ι' : Type ?u.1291685
ι'' : Type ?u.1291688
ι₁ : Type u_5
inst✝⁵ : Finite ι
R' : Type u_1
N₁ : Type u_2
N₂ : Type u_3
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : AlternatingMap R' N₁ N₂ ι
e : Basis ι₁ R' N₁
h : ∀ (v : ι → ι₁), Function.Injective v → (↑f fun i => ↑e (v i)) = ↑g fun i => ↑e (v i)
⊢ f = g

tactic: by_cases hi : Function.Injective v
state_before: R : Type ?u.1290808
inst✝¹⁶ : Semiring R
M : Type ?u.1290814
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type ?u.1290846
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type ?u.1290876
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type ?u.1290906
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type ?u.1291294
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_4
ι' : Type ?u.1291685
ι'' : Type ?u.1291688
ι₁ : Type u_5
inst✝⁵ : Finite ι
R' : Type u_1
N₁ : Type u_2
N₂ : Type u_3
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : AlternatingMap R' N₁ 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: exact h v hi
state_before: case pos
R : Type ?u.1290808
inst✝¹⁶ : Semiring R
M : Type ?u.1290814
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type ?u.1290846
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type ?u.1290876
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type ?u.1290906
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type ?u.1291294
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_4
ι' : Type ?u.1291685
ι'' : Type ?u.1291688
ι₁ : Type u_5
inst✝⁵ : Finite ι
R' : Type u_1
N₁ : Type u_2
N₂ : Type u_3
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : AlternatingMap R' N₁ 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: have : ¬Function.Injective fun i => e (v i) := hi.imp Function.Injective.of_comp
state_before: case neg
R : Type ?u.1290808
inst✝¹⁶ : Semiring R
M : Type ?u.1290814
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type ?u.1290846
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type ?u.1290876
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type ?u.1290906
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type ?u.1291294
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_4
ι' : Type ?u.1291685
ι'' : Type ?u.1291688
ι₁ : Type u_5
inst✝⁵ : Finite ι
R' : Type u_1
N₁ : Type u_2
N₂ : Type u_3
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : AlternatingMap R' N₁ 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: 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.1290808
inst✝¹⁶ : Semiring R
M : Type ?u.1290814
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type ?u.1290846
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type ?u.1290876
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type ?u.1290906
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type ?u.1291294
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_4
ι' : Type ?u.1291685
ι'' : Type ?u.1291688
ι₁ : Type u_5
inst✝⁵ : Finite ι
R' : Type u_1
N₁ : Type u_2
N₂ : Type u_3
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : AlternatingMap R' N₁ 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)