[GOAL]
R : Type u_1
ι : Type u_2
n : ℕ
M : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : AddCommMonoid M₃
inst✝³ : (i : Fin n) → AddCommMonoid (M i)
inst✝² : (i : Fin n) → Module R (M i)
inst✝¹ : Module R M₂
inst✝ : Module R M₃
f g : MultilinearMap R M M₂
ι₁ : Fin n → Type u_6
e : (i : Fin n) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin n) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
⊢ f = g
[PROOFSTEP]
induction' n with m hm
[GOAL]
case zero
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
M : Fin Nat.zero → Type u_3
inst✝¹ : (i : Fin Nat.zero) → AddCommMonoid (M i)
inst✝ : (i : Fin Nat.zero) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin Nat.zero → Type u_6
e : (i : Fin Nat.zero) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin Nat.zero) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
⊢ f = g
[PROOFSTEP]
ext x
[GOAL]
case zero.H
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
M : Fin Nat.zero → Type u_3
inst✝¹ : (i : Fin Nat.zero) → AddCommMonoid (M i)
inst✝ : (i : Fin Nat.zero) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin Nat.zero → Type u_6
e : (i : Fin Nat.zero) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin Nat.zero) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
x : (i : Fin Nat.zero) → M i
⊢ ↑f x = ↑g x
[PROOFSTEP]
convert h finZeroElim
[GOAL]
case succ
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
⊢ f = g
[PROOFSTEP]
apply Function.LeftInverse.injective uncurry_curryLeft
[GOAL]
case succ.a
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
⊢ (fun x => curryLeft x) f = (fun x => curryLeft x) g
[PROOFSTEP]
refine' Basis.ext (e 0) _
[GOAL]
case succ.a
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
⊢ ∀ (i : ι₁ 0), ↑((fun x => curryLeft x) f) (↑(e 0) i) = ↑((fun x => curryLeft x) g) (↑(e 0) i)
[PROOFSTEP]
intro i
[GOAL]
case succ.a
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
⊢ ↑((fun x => curryLeft x) f) (↑(e 0) i) = ↑((fun x => curryLeft x) g) (↑(e 0) i)
[PROOFSTEP]
apply hm (Fin.tail e)
[GOAL]
case succ.a
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
⊢ ∀ (v : (i : Fin m) → ι₁ (Fin.succ i)),
    (↑(↑((fun x => curryLeft x) f) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (v i)) =
      ↑(↑((fun x => curryLeft x) g) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (v i)
[PROOFSTEP]
intro j
[GOAL]
case succ.a
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) f) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) =
    ↑(↑((fun x => curryLeft x) g) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)
[PROOFSTEP]
convert h (Fin.cons i j)
[GOAL]
case h.e'_2
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) f) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) = ↑f fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
case h.e'_3
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) g) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) = ↑g fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
[PROOFSTEP]
iterate 2
  rw [curryLeft_apply]
  congr 1 with x
  refine' Fin.cases rfl (fun x => _) x
  dsimp [Fin.tail]
  rw [Fin.cons_succ, Fin.cons_succ]
[GOAL]
case h.e'_2
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) f) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) = ↑f fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
case h.e'_3
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) g) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) = ↑g fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
[PROOFSTEP]
rw [curryLeft_apply]
[GOAL]
case h.e'_2
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ ↑f (Fin.cons (↑(e 0) i) fun i => ↑(Fin.tail e i) (j i)) = ↑f fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
case h.e'_3
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) g) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) = ↑g fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
[PROOFSTEP]
congr 1 with x
[GOAL]
case h.e'_2.h.e_6.h.h
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
x : Fin (m + 1)
⊢ Fin.cons (↑(e 0) i) (fun i => ↑(Fin.tail e i) (j i)) x = ↑(e x) (Fin.cons i j x)
case h.e'_3
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) g) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) = ↑g fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
[PROOFSTEP]
refine' Fin.cases rfl (fun x => _) x
[GOAL]
case h.e'_2.h.e_6.h.h
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
x✝ : Fin (m + 1)
x : Fin m
⊢ Fin.cons (↑(e 0) i) (fun i => ↑(Fin.tail e i) (j i)) (Fin.succ x) = ↑(e (Fin.succ x)) (Fin.cons i j (Fin.succ x))
case h.e'_3
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) g) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) = ↑g fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
[PROOFSTEP]
dsimp [Fin.tail]
[GOAL]
case h.e'_2.h.e_6.h.h
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
x✝ : Fin (m + 1)
x : Fin m
⊢ Fin.cons (↑(e 0) i) (fun i => ↑(e (Fin.succ i)) (j i)) (Fin.succ x) = ↑(e (Fin.succ x)) (Fin.cons i j (Fin.succ x))
case h.e'_3
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) g) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) = ↑g fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
[PROOFSTEP]
rw [Fin.cons_succ, Fin.cons_succ]
[GOAL]
case h.e'_3
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) g) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) = ↑g fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
[PROOFSTEP]
rw [curryLeft_apply]
[GOAL]
case h.e'_3
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ ↑g (Fin.cons (↑(e 0) i) fun i => ↑(Fin.tail e i) (j i)) = ↑g fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
[PROOFSTEP]
congr 1 with x
[GOAL]
case h.e'_3.h.e_6.h.h
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
x : Fin (m + 1)
⊢ Fin.cons (↑(e 0) i) (fun i => ↑(Fin.tail e i) (j i)) x = ↑(e x) (Fin.cons i j x)
[PROOFSTEP]
refine' Fin.cases rfl (fun x => _) x
[GOAL]
case h.e'_3.h.e_6.h.h
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
x✝ : Fin (m + 1)
x : Fin m
⊢ Fin.cons (↑(e 0) i) (fun i => ↑(Fin.tail e i) (j i)) (Fin.succ x) = ↑(e (Fin.succ x)) (Fin.cons i j (Fin.succ x))
[PROOFSTEP]
dsimp [Fin.tail]
[GOAL]
case h.e'_3.h.e_6.h.h
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
x✝ : Fin (m + 1)
x : Fin m
⊢ Fin.cons (↑(e 0) i) (fun i => ↑(e (Fin.succ i)) (j i)) (Fin.succ x) = ↑(e (Fin.succ x)) (Fin.cons i j (Fin.succ x))
[PROOFSTEP]
rw [Fin.cons_succ, Fin.cons_succ]
[GOAL]
R : Type u_1
ι : Type u_2
n : ℕ
M : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁷ : CommSemiring R
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : (i : Fin n) → AddCommMonoid (M i)
inst✝³ : (i : Fin n) → Module R (M i)
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Finite ι
f g : MultilinearMap R (fun x => M₂) M₃
ι₁ : Type u_6
e : Basis ι₁ R M₂
h : ∀ (v : ι → ι₁), (↑f fun i => ↑e (v i)) = ↑g fun i => ↑e (v i)
⊢ f = g
[PROOFSTEP]
cases nonempty_fintype ι
[GOAL]
case intro
R : Type u_1
ι : Type u_2
n : ℕ
M : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁷ : CommSemiring R
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : (i : Fin n) → AddCommMonoid (M i)
inst✝³ : (i : Fin n) → Module R (M i)
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Finite ι
f g : MultilinearMap R (fun x => M₂) M₃
ι₁ : Type u_6
e : Basis ι₁ R M₂
h : ∀ (v : ι → ι₁), (↑f fun i => ↑e (v i)) = ↑g fun i => ↑e (v i)
val✝ : Fintype ι
⊢ f = g
[PROOFSTEP]
exact (domDomCongr_eq_iff (Fintype.equivFin ι) f g).mp (Basis.ext_multilinear_fin (fun _ => e) fun i => h (i ∘ _))


[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z z₀ : ℂ
f : ℂ → ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
⊢ ‖dslope f c z‖ ≤ R₂ / R₁
[PROOFSTEP]
have hR₁ : 0 < R₁ := nonempty_ball.1 ⟨z, hz⟩
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z z₀ : ℂ
f : ℂ → ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
hR₁ : 0 < R₁
⊢ ‖dslope f c z‖ ≤ R₂ / R₁
[PROOFSTEP]
suffices ∀ᶠ r in 𝓝[<] R₁, ‖dslope f c z‖ ≤ R₂ / r
  by
  refine' ge_of_tendsto _ this
  exact (tendsto_const_nhds.div tendsto_id hR₁.ne').mono_left nhdsWithin_le_nhds
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z z₀ : ℂ
f : ℂ → ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
hR₁ : 0 < R₁
this : ∀ᶠ (r : ℝ) in 𝓝[Iio R₁] R₁, ‖dslope f c z‖ ≤ R₂ / r
⊢ ‖dslope f c z‖ ≤ R₂ / R₁
[PROOFSTEP]
refine' ge_of_tendsto _ this
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z z₀ : ℂ
f : ℂ → ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
hR₁ : 0 < R₁
this : ∀ᶠ (r : ℝ) in 𝓝[Iio R₁] R₁, ‖dslope f c z‖ ≤ R₂ / r
⊢ Tendsto (fun c => R₂ / c) (𝓝[Iio R₁] R₁) (𝓝 (R₂ / R₁))
[PROOFSTEP]
exact (tendsto_const_nhds.div tendsto_id hR₁.ne').mono_left nhdsWithin_le_nhds
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z z₀ : ℂ
f : ℂ → ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
hR₁ : 0 < R₁
⊢ ∀ᶠ (r : ℝ) in 𝓝[Iio R₁] R₁, ‖dslope f c z‖ ≤ R₂ / r
[PROOFSTEP]
rw [mem_ball] at hz
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z z₀ : ℂ
f : ℂ → ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : dist z c < R₁
hR₁ : 0 < R₁
⊢ ∀ᶠ (r : ℝ) in 𝓝[Iio R₁] R₁, ‖dslope f c z‖ ≤ R₂ / r
[PROOFSTEP]
filter_upwards [Ioo_mem_nhdsWithin_Iio ⟨hz, le_rfl⟩] with r hr
[GOAL]
case h
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z z₀ : ℂ
f : ℂ → ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : dist z c < R₁
hR₁ : 0 < R₁
r : ℝ
hr : r ∈ Ioo (dist z c) R₁
⊢ ‖dslope f c z‖ ≤ R₂ / r
[PROOFSTEP]
have hr₀ : 0 < r := dist_nonneg.trans_lt hr.1
[GOAL]
case h
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z z₀ : ℂ
f : ℂ → ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : dist z c < R₁
hR₁ : 0 < R₁
r : ℝ
hr : r ∈ Ioo (dist z c) R₁
hr₀ : 0 < r
⊢ ‖dslope f c z‖ ≤ R₂ / r
[PROOFSTEP]
replace hd : DiffContOnCl ℂ (dslope f c) (ball c r)
[GOAL]
case hd
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z z₀ : ℂ
f : ℂ → ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : dist z c < R₁
hR₁ : 0 < R₁
r : ℝ
hr : r ∈ Ioo (dist z c) R₁
hr₀ : 0 < r
⊢ DiffContOnCl ℂ (dslope f c) (ball c r)
[PROOFSTEP]
refine' DifferentiableOn.diffContOnCl _
[GOAL]
case hd
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z z₀ : ℂ
f : ℂ → ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : dist z c < R₁
hR₁ : 0 < R₁
r : ℝ
hr : r ∈ Ioo (dist z c) R₁
hr₀ : 0 < r
⊢ DifferentiableOn ℂ (dslope f c) (closure (ball c r))
[PROOFSTEP]
rw [closure_ball c hr₀.ne']
[GOAL]
case hd
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z z₀ : ℂ
f : ℂ → ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : dist z c < R₁
hR₁ : 0 < R₁
r : ℝ
hr : r ∈ Ioo (dist z c) R₁
hr₀ : 0 < r
⊢ DifferentiableOn ℂ (dslope f c) (closedBall c r)
[PROOFSTEP]
exact ((differentiableOn_dslope <| ball_mem_nhds _ hR₁).mpr hd).mono (closedBall_subset_ball hr.2)
[GOAL]
case h
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z z₀ : ℂ
f : ℂ → ℂ
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : dist z c < R₁
hR₁ : 0 < R₁
r : ℝ
hr : r ∈ Ioo (dist z c) R₁
hr₀ : 0 < r
hd : DiffContOnCl ℂ (dslope f c) (ball c r)
⊢ ‖dslope f c z‖ ≤ R₂ / r
[PROOFSTEP]
refine' norm_le_of_forall_mem_frontier_norm_le bounded_ball hd _ _
[GOAL]
case h.refine'_1
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z z₀ : ℂ
f : ℂ → ℂ
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : dist z c < R₁
hR₁ : 0 < R₁
r : ℝ
hr : r ∈ Ioo (dist z c) R₁
hr₀ : 0 < r
hd : DiffContOnCl ℂ (dslope f c) (ball c r)
⊢ ∀ (z : ℂ), z ∈ frontier (ball c r) → ‖dslope f c z‖ ≤ R₂ / r
[PROOFSTEP]
rw [frontier_ball c hr₀.ne']
[GOAL]
case h.refine'_1
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z z₀ : ℂ
f : ℂ → ℂ
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : dist z c < R₁
hR₁ : 0 < R₁
r : ℝ
hr : r ∈ Ioo (dist z c) R₁
hr₀ : 0 < r
hd : DiffContOnCl ℂ (dslope f c) (ball c r)
⊢ ∀ (z : ℂ), z ∈ sphere c r → ‖dslope f c z‖ ≤ R₂ / r
[PROOFSTEP]
intro z hz
[GOAL]
case h.refine'_1
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z✝ z₀ : ℂ
f : ℂ → ℂ
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz✝ : dist z✝ c < R₁
hR₁ : 0 < R₁
r : ℝ
hr : r ∈ Ioo (dist z✝ c) R₁
hr₀ : 0 < r
hd : DiffContOnCl ℂ (dslope f c) (ball c r)
z : ℂ
hz : z ∈ sphere c r
⊢ ‖dslope f c z‖ ≤ R₂ / r
[PROOFSTEP]
have hz' : z ≠ c := ne_of_mem_sphere hz hr₀.ne'
[GOAL]
case h.refine'_1
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z✝ z₀ : ℂ
f : ℂ → ℂ
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz✝ : dist z✝ c < R₁
hR₁ : 0 < R₁
r : ℝ
hr : r ∈ Ioo (dist z✝ c) R₁
hr₀ : 0 < r
hd : DiffContOnCl ℂ (dslope f c) (ball c r)
z : ℂ
hz : z ∈ sphere c r
hz' : z ≠ c
⊢ ‖dslope f c z‖ ≤ R₂ / r
[PROOFSTEP]
rw [dslope_of_ne _ hz', slope_def_module, norm_smul, norm_inv, mem_sphere_iff_norm.1 hz, ← div_eq_inv_mul,
  div_le_div_right hr₀, ← dist_eq_norm]
[GOAL]
case h.refine'_1
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z✝ z₀ : ℂ
f : ℂ → ℂ
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz✝ : dist z✝ c < R₁
hR₁ : 0 < R₁
r : ℝ
hr : r ∈ Ioo (dist z✝ c) R₁
hr₀ : 0 < r
hd : DiffContOnCl ℂ (dslope f c) (ball c r)
z : ℂ
hz : z ∈ sphere c r
hz' : z ≠ c
⊢ dist (f z) (f c) ≤ R₂
[PROOFSTEP]
exact le_of_lt (h_maps (mem_ball.2 (by rw [mem_sphere.1 hz]; exact hr.2)))
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z✝ z₀ : ℂ
f : ℂ → ℂ
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz✝ : dist z✝ c < R₁
hR₁ : 0 < R₁
r : ℝ
hr : r ∈ Ioo (dist z✝ c) R₁
hr₀ : 0 < r
hd : DiffContOnCl ℂ (dslope f c) (ball c r)
z : ℂ
hz : z ∈ sphere c r
hz' : z ≠ c
⊢ dist z c < R₁
[PROOFSTEP]
rw [mem_sphere.1 hz]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z✝ z₀ : ℂ
f : ℂ → ℂ
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz✝ : dist z✝ c < R₁
hR₁ : 0 < R₁
r : ℝ
hr : r ∈ Ioo (dist z✝ c) R₁
hr₀ : 0 < r
hd : DiffContOnCl ℂ (dslope f c) (ball c r)
z : ℂ
hz : z ∈ sphere c r
hz' : z ≠ c
⊢ r < R₁
[PROOFSTEP]
exact hr.2
[GOAL]
case h.refine'_2
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z z₀ : ℂ
f : ℂ → ℂ
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : dist z c < R₁
hR₁ : 0 < R₁
r : ℝ
hr : r ∈ Ioo (dist z c) R₁
hr₀ : 0 < r
hd : DiffContOnCl ℂ (dslope f c) (ball c r)
⊢ z ∈ closure (ball c r)
[PROOFSTEP]
rw [closure_ball c hr₀.ne', mem_closedBall]
[GOAL]
case h.refine'_2
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f✝ : ℂ → E
c z z₀ : ℂ
f : ℂ → ℂ
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : dist z c < R₁
hR₁ : 0 < R₁
r : ℝ
hr : r ∈ Ioo (dist z c) R₁
hr₀ : 0 < r
hd : DiffContOnCl ℂ (dslope f c) (ball c r)
⊢ dist z c ≤ r
[PROOFSTEP]
exact hr.1.le
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
⊢ ‖dslope f c z‖ ≤ R₂ / R₁
[PROOFSTEP]
have hR₁ : 0 < R₁ := nonempty_ball.1 ⟨z, hz⟩
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
hR₁ : 0 < R₁
⊢ ‖dslope f c z‖ ≤ R₂ / R₁
[PROOFSTEP]
have hR₂ : 0 < R₂ := nonempty_ball.1 ⟨f z, h_maps hz⟩
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
hR₁ : 0 < R₁
hR₂ : 0 < R₂
⊢ ‖dslope f c z‖ ≤ R₂ / R₁
[PROOFSTEP]
cases' eq_or_ne (dslope f c z) 0 with hc hc
[GOAL]
case inl
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
hR₁ : 0 < R₁
hR₂ : 0 < R₂
hc : dslope f c z = 0
⊢ ‖dslope f c z‖ ≤ R₂ / R₁
[PROOFSTEP]
rw [hc, norm_zero]
[GOAL]
case inl
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
hR₁ : 0 < R₁
hR₂ : 0 < R₂
hc : dslope f c z = 0
⊢ 0 ≤ R₂ / R₁
[PROOFSTEP]
exact div_nonneg hR₂.le hR₁.le
[GOAL]
case inr
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
hR₁ : 0 < R₁
hR₂ : 0 < R₂
hc : dslope f c z ≠ 0
⊢ ‖dslope f c z‖ ≤ R₂ / R₁
[PROOFSTEP]
rcases exists_dual_vector ℂ _ hc with ⟨g, hg, hgf⟩
[GOAL]
case inr.intro.intro
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
hR₁ : 0 < R₁
hR₂ : 0 < R₂
hc : dslope f c z ≠ 0
g : E →L[ℂ] ℂ
hg : ‖g‖ = 1
hgf : ↑g (dslope f c z) = ↑‖dslope f c z‖
⊢ ‖dslope f c z‖ ≤ R₂ / R₁
[PROOFSTEP]
have hg' : ‖g‖₊ = 1 := NNReal.eq hg
[GOAL]
case inr.intro.intro
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
hR₁ : 0 < R₁
hR₂ : 0 < R₂
hc : dslope f c z ≠ 0
g : E →L[ℂ] ℂ
hg : ‖g‖ = 1
hgf : ↑g (dslope f c z) = ↑‖dslope f c z‖
hg' : ‖g‖₊ = 1
⊢ ‖dslope f c z‖ ≤ R₂ / R₁
[PROOFSTEP]
have hg₀ : ‖g‖₊ ≠ 0 := by simpa only [hg'] using one_ne_zero
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
hR₁ : 0 < R₁
hR₂ : 0 < R₂
hc : dslope f c z ≠ 0
g : E →L[ℂ] ℂ
hg : ‖g‖ = 1
hgf : ↑g (dslope f c z) = ↑‖dslope f c z‖
hg' : ‖g‖₊ = 1
⊢ ‖g‖₊ ≠ 0
[PROOFSTEP]
simpa only [hg'] using one_ne_zero
[GOAL]
case inr.intro.intro
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
hR₁ : 0 < R₁
hR₂ : 0 < R₂
hc : dslope f c z ≠ 0
g : E →L[ℂ] ℂ
hg : ‖g‖ = 1
hgf : ↑g (dslope f c z) = ↑‖dslope f c z‖
hg' : ‖g‖₊ = 1
hg₀ : ‖g‖₊ ≠ 0
⊢ ‖dslope f c z‖ ≤ R₂ / R₁
[PROOFSTEP]
calc
  ‖dslope f c z‖ = ‖dslope (g ∘ f) c z‖ :=
    by
    rw [g.dslope_comp, hgf, IsROrC.norm_ofReal, abs_norm]
    exact fun _ => hd.differentiableAt (ball_mem_nhds _ hR₁)
  _ ≤ R₂ / R₁ :=
    by
    refine' schwarz_aux (g.differentiable.comp_differentiableOn hd) (MapsTo.comp _ h_maps) hz
    simpa only [hg', NNReal.coe_one, one_mul] using g.lipschitz.mapsTo_ball hg₀ (f c) R₂
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
hR₁ : 0 < R₁
hR₂ : 0 < R₂
hc : dslope f c z ≠ 0
g : E →L[ℂ] ℂ
hg : ‖g‖ = 1
hgf : ↑g (dslope f c z) = ↑‖dslope f c z‖
hg' : ‖g‖₊ = 1
hg₀ : ‖g‖₊ ≠ 0
⊢ ‖dslope f c z‖ = ‖dslope (↑g ∘ f) c z‖
[PROOFSTEP]
rw [g.dslope_comp, hgf, IsROrC.norm_ofReal, abs_norm]
[GOAL]
case H
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
hR₁ : 0 < R₁
hR₂ : 0 < R₂
hc : dslope f c z ≠ 0
g : E →L[ℂ] ℂ
hg : ‖g‖ = 1
hgf : ↑g (dslope f c z) = ↑‖dslope f c z‖
hg' : ‖g‖₊ = 1
hg₀ : ‖g‖₊ ≠ 0
⊢ c = z → DifferentiableAt ℂ f c
[PROOFSTEP]
exact fun _ => hd.differentiableAt (ball_mem_nhds _ hR₁)
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
hR₁ : 0 < R₁
hR₂ : 0 < R₂
hc : dslope f c z ≠ 0
g : E →L[ℂ] ℂ
hg : ‖g‖ = 1
hgf : ↑g (dslope f c z) = ↑‖dslope f c z‖
hg' : ‖g‖₊ = 1
hg₀ : ‖g‖₊ ≠ 0
⊢ ‖dslope (↑g ∘ f) c z‖ ≤ R₂ / R₁
[PROOFSTEP]
refine' schwarz_aux (g.differentiable.comp_differentiableOn hd) (MapsTo.comp _ h_maps) hz
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
hR₁ : 0 < R₁
hR₂ : 0 < R₂
hc : dslope f c z ≠ 0
g : E →L[ℂ] ℂ
hg : ‖g‖ = 1
hgf : ↑g (dslope f c z) = ↑‖dslope f c z‖
hg' : ‖g‖₊ = 1
hg₀ : ‖g‖₊ ≠ 0
⊢ MapsTo (↑g) (ball (f c) R₂) (ball ((↑g ∘ f) c) R₂)
[PROOFSTEP]
simpa only [hg', NNReal.coe_one, one_mul] using g.lipschitz.mapsTo_ball hg₀ (f c) R₂
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
inst✝¹ : CompleteSpace E
inst✝ : StrictConvexSpace ℝ E
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
h_z₀ : z₀ ∈ ball c R₁
h_eq : ‖dslope f c z₀‖ = R₂ / R₁
⊢ EqOn f (fun z => f c + (z - c) • dslope f c z₀) (ball c R₁)
[PROOFSTEP]
set g := dslope f c
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
inst✝¹ : CompleteSpace E
inst✝ : StrictConvexSpace ℝ E
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
h_z₀ : z₀ ∈ ball c R₁
g : ℂ → E := dslope f c
h_eq : ‖g z₀‖ = R₂ / R₁
⊢ EqOn f (fun z => f c + (z - c) • g z₀) (ball c R₁)
[PROOFSTEP]
rintro z hz
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z✝ z₀ : ℂ
inst✝¹ : CompleteSpace E
inst✝ : StrictConvexSpace ℝ E
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
h_z₀ : z₀ ∈ ball c R₁
g : ℂ → E := dslope f c
h_eq : ‖g z₀‖ = R₂ / R₁
z : ℂ
hz : z ∈ ball c R₁
⊢ f z = (fun z => f c + (z - c) • g z₀) z
[PROOFSTEP]
by_cases z = c
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z✝ z₀ : ℂ
inst✝¹ : CompleteSpace E
inst✝ : StrictConvexSpace ℝ E
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
h_z₀ : z₀ ∈ ball c R₁
g : ℂ → E := dslope f c
h_eq : ‖g z₀‖ = R₂ / R₁
z : ℂ
hz : z ∈ ball c R₁
⊢ f z = (fun z => f c + (z - c) • g z₀) z
[PROOFSTEP]
by_cases z = c
[GOAL]
case pos
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z✝ z₀ : ℂ
inst✝¹ : CompleteSpace E
inst✝ : StrictConvexSpace ℝ E
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
h_z₀ : z₀ ∈ ball c R₁
g : ℂ → E := dslope f c
h_eq : ‖g z₀‖ = R₂ / R₁
z : ℂ
hz : z ∈ ball c R₁
h : z = c
⊢ f z = (fun z => f c + (z - c) • g z₀) z
[PROOFSTEP]
simp [h]
[GOAL]
case neg
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z✝ z₀ : ℂ
inst✝¹ : CompleteSpace E
inst✝ : StrictConvexSpace ℝ E
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
h_z₀ : z₀ ∈ ball c R₁
g : ℂ → E := dslope f c
h_eq : ‖g z₀‖ = R₂ / R₁
z : ℂ
hz : z ∈ ball c R₁
h : ¬z = c
⊢ f z = (fun z => f c + (z - c) • g z₀) z
[PROOFSTEP]
have h_R₁ : 0 < R₁ := nonempty_ball.mp ⟨_, h_z₀⟩
[GOAL]
case neg
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z✝ z₀ : ℂ
inst✝¹ : CompleteSpace E
inst✝ : StrictConvexSpace ℝ E
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
h_z₀ : z₀ ∈ ball c R₁
g : ℂ → E := dslope f c
h_eq : ‖g z₀‖ = R₂ / R₁
z : ℂ
hz : z ∈ ball c R₁
h : ¬z = c
h_R₁ : 0 < R₁
⊢ f z = (fun z => f c + (z - c) • g z₀) z
[PROOFSTEP]
have g_le_div : ∀ z ∈ ball c R₁, ‖g z‖ ≤ R₂ / R₁ := fun z hz => norm_dslope_le_div_of_mapsTo_ball hd h_maps hz
[GOAL]
case neg
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z✝ z₀ : ℂ
inst✝¹ : CompleteSpace E
inst✝ : StrictConvexSpace ℝ E
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
h_z₀ : z₀ ∈ ball c R₁
g : ℂ → E := dslope f c
h_eq : ‖g z₀‖ = R₂ / R₁
z : ℂ
hz : z ∈ ball c R₁
h : ¬z = c
h_R₁ : 0 < R₁
g_le_div : ∀ (z : ℂ), z ∈ ball c R₁ → ‖g z‖ ≤ R₂ / R₁
⊢ f z = (fun z => f c + (z - c) • g z₀) z
[PROOFSTEP]
have g_max : IsMaxOn (norm ∘ g) (ball c R₁) z₀ := isMaxOn_iff.mpr fun z hz => by simpa [h_eq] using g_le_div z hz
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z✝¹ z₀ : ℂ
inst✝¹ : CompleteSpace E
inst✝ : StrictConvexSpace ℝ E
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
h_z₀ : z₀ ∈ ball c R₁
g : ℂ → E := dslope f c
h_eq : ‖g z₀‖ = R₂ / R₁
z✝ : ℂ
hz✝ : z✝ ∈ ball c R₁
h : ¬z✝ = c
h_R₁ : 0 < R₁
g_le_div : ∀ (z : ℂ), z ∈ ball c R₁ → ‖g z‖ ≤ R₂ / R₁
z : ℂ
hz : z ∈ ball c R₁
⊢ (norm ∘ g) z ≤ (norm ∘ g) z₀
[PROOFSTEP]
simpa [h_eq] using g_le_div z hz
[GOAL]
case neg
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z✝ z₀ : ℂ
inst✝¹ : CompleteSpace E
inst✝ : StrictConvexSpace ℝ E
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
h_z₀ : z₀ ∈ ball c R₁
g : ℂ → E := dslope f c
h_eq : ‖g z₀‖ = R₂ / R₁
z : ℂ
hz : z ∈ ball c R₁
h : ¬z = c
h_R₁ : 0 < R₁
g_le_div : ∀ (z : ℂ), z ∈ ball c R₁ → ‖g z‖ ≤ R₂ / R₁
g_max : IsMaxOn (norm ∘ g) (ball c R₁) z₀
⊢ f z = (fun z => f c + (z - c) • g z₀) z
[PROOFSTEP]
have g_diff : DifferentiableOn ℂ g (ball c R₁) :=
  (differentiableOn_dslope (isOpen_ball.mem_nhds (mem_ball_self h_R₁))).mpr hd
[GOAL]
case neg
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z✝ z₀ : ℂ
inst✝¹ : CompleteSpace E
inst✝ : StrictConvexSpace ℝ E
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
h_z₀ : z₀ ∈ ball c R₁
g : ℂ → E := dslope f c
h_eq : ‖g z₀‖ = R₂ / R₁
z : ℂ
hz : z ∈ ball c R₁
h : ¬z = c
h_R₁ : 0 < R₁
g_le_div : ∀ (z : ℂ), z ∈ ball c R₁ → ‖g z‖ ≤ R₂ / R₁
g_max : IsMaxOn (norm ∘ g) (ball c R₁) z₀
g_diff : DifferentiableOn ℂ g (ball c R₁)
⊢ f z = (fun z => f c + (z - c) • g z₀) z
[PROOFSTEP]
have : g z = g z₀ :=
  eqOn_of_isPreconnected_of_isMaxOn_norm (convex_ball c R₁).isPreconnected isOpen_ball g_diff h_z₀ g_max hz
[GOAL]
case neg
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z✝ z₀ : ℂ
inst✝¹ : CompleteSpace E
inst✝ : StrictConvexSpace ℝ E
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
h_z₀ : z₀ ∈ ball c R₁
g : ℂ → E := dslope f c
h_eq : ‖g z₀‖ = R₂ / R₁
z : ℂ
hz : z ∈ ball c R₁
h : ¬z = c
h_R₁ : 0 < R₁
g_le_div : ∀ (z : ℂ), z ∈ ball c R₁ → ‖g z‖ ≤ R₂ / R₁
g_max : IsMaxOn (norm ∘ g) (ball c R₁) z₀
g_diff : DifferentiableOn ℂ g (ball c R₁)
this : g z = g z₀
⊢ f z = (fun z => f c + (z - c) • g z₀) z
[PROOFSTEP]
simp [← this]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
h₀ : 0 < R₁
⊢ ‖deriv f c‖ ≤ R₂ / R₁
[PROOFSTEP]
simpa only [dslope_same] using norm_dslope_le_div_of_mapsTo_ball hd h_maps (mem_ball_self h₀)
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
⊢ dist (f z) (f c) ≤ R₂ / R₁ * dist z c
[PROOFSTEP]
rcases eq_or_ne z c with (rfl | hne)
[GOAL]
case inl
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
z z₀ : ℂ
hd : DifferentiableOn ℂ f (ball z R₁)
h_maps : MapsTo f (ball z R₁) (ball (f z) R₂)
hz : z ∈ ball z R₁
⊢ dist (f z) (f z) ≤ R₂ / R₁ * dist z z
[PROOFSTEP]
simp only [dist_self, mul_zero, le_rfl]
[GOAL]
case inr
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R R₁ R₂ : ℝ
f : ℂ → E
c z z₀ : ℂ
hd : DifferentiableOn ℂ f (ball c R₁)
h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)
hz : z ∈ ball c R₁
hne : z ≠ c
⊢ dist (f z) (f c) ≤ R₂ / R₁ * dist z c
[PROOFSTEP]
simpa only [dslope_of_ne _ hne, slope_def_module, norm_smul, norm_inv, ← div_eq_inv_mul, ← dist_eq_norm,
  div_le_iff (dist_pos.2 hne)] using norm_dslope_le_div_of_mapsTo_ball hd h_maps hz
[GOAL]
f : ℂ → ℂ
c z : ℂ
R R₁ R₂ : ℝ
hd : DifferentiableOn ℂ f (ball c R)
h_maps : MapsTo f (ball c R) (ball c R)
hc : f c = c
h₀ : 0 < R
⊢ MapsTo f (ball c R) (ball (f c) R)
[PROOFSTEP]
rwa [hc]
[GOAL]
f : ℂ → ℂ
c z : ℂ
R R₁ R₂ : ℝ
hd : DifferentiableOn ℂ f (ball c R)
h_maps : MapsTo f (ball c R) (ball c R)
hc : f c = c
hz : z ∈ ball c R
⊢ dist (f z) c ≤ dist z c
[PROOFSTEP]
have := dist_le_div_mul_dist_of_mapsTo_ball hd (by rwa [hc]) hz
[GOAL]
f : ℂ → ℂ
c z : ℂ
R R₁ R₂ : ℝ
hd : DifferentiableOn ℂ f (ball c R)
h_maps : MapsTo f (ball c R) (ball c R)
hc : f c = c
hz : z ∈ ball c R
⊢ MapsTo f (ball c R) (ball (f c) ?m.39633)
[PROOFSTEP]
rwa [hc]
[GOAL]
f : ℂ → ℂ
c z : ℂ
R R₁ R₂ : ℝ
hd : DifferentiableOn ℂ f (ball c R)
h_maps : MapsTo f (ball c R) (ball c R)
hc : f c = c
hz : z ∈ ball c R
this : dist (f z) (f c) ≤ R / R * dist z c
⊢ dist (f z) c ≤ dist z c
[PROOFSTEP]
rwa [hc, div_self, one_mul] at this
[GOAL]
f : ℂ → ℂ
c z : ℂ
R R₁ R₂ : ℝ
hd : DifferentiableOn ℂ f (ball c R)
h_maps : MapsTo f (ball c R) (ball c R)
hc : f c = c
hz : z ∈ ball c R
this : dist (f z) c ≤ R / R * dist z c
⊢ R ≠ 0
[PROOFSTEP]
exact (nonempty_ball.1 ⟨z, hz⟩).ne'
[GOAL]
f : ℂ → ℂ
c z : ℂ
R R₁ R₂ : ℝ
hd : DifferentiableOn ℂ f (ball 0 R)
h_maps : MapsTo f (ball 0 R) (ball 0 R)
h₀ : f 0 = 0
hz : ↑abs z < R
⊢ ↑abs (f z) ≤ ↑abs z
[PROOFSTEP]
replace hz : z ∈ ball (0 : ℂ) R
[GOAL]
case hz
f : ℂ → ℂ
c z : ℂ
R R₁ R₂ : ℝ
hd : DifferentiableOn ℂ f (ball 0 R)
h_maps : MapsTo f (ball 0 R) (ball 0 R)
h₀ : f 0 = 0
hz : ↑abs z < R
⊢ z ∈ ball 0 R
f : ℂ → ℂ
c z : ℂ
R R₁ R₂ : ℝ
hd : DifferentiableOn ℂ f (ball 0 R)
h_maps : MapsTo f (ball 0 R) (ball 0 R)
h₀ : f 0 = 0
hz : z ∈ ball 0 R
⊢ ↑abs (f z) ≤ ↑abs z
[PROOFSTEP]
exact mem_ball_zero_iff.2 hz
[GOAL]
f : ℂ → ℂ
c z : ℂ
R R₁ R₂ : ℝ
hd : DifferentiableOn ℂ f (ball 0 R)
h_maps : MapsTo f (ball 0 R) (ball 0 R)
h₀ : f 0 = 0
hz : z ∈ ball 0 R
⊢ ↑abs (f z) ≤ ↑abs z
[PROOFSTEP]
simpa only [dist_zero_right] using dist_le_dist_of_mapsTo_ball_self hd h_maps h₀ hz