Theorem: _private.Mathlib.LinearAlgebra.Multilinear.FiniteDimensional.0.MultilinearMap.free_and_finite
File: Mathlib/LinearAlgebra/Multilinear/FiniteDimensional.lean

Proof steps:
state_before: ι : Type u_1
R : Type u_2
M₂ : Type u_3
M₁ : ι → Type u_4
inst✝⁹ : Finite ι
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : Module R M₂
inst✝⁵ : Module.Finite R M₂
inst✝⁴ : Module.Free R M₂
inst✝³ : (i : ι) → AddCommGroup (M₁ i)
inst✝² : (i : ι) → Module R (M₁ i)
inst✝¹ : ∀ (i : ι), Module.Finite R (M₁ i)
inst✝ : ∀ (i : ι), Module.Free R (M₁ i)
⊢ Module.Free R (MultilinearMap R M₁ M₂) ∧ Module.Finite R (MultilinearMap R M₁ M₂)
state_after: case intro
ι : Type u_1
R : Type u_2
M₂ : Type u_3
M₁ : ι → Type u_4
inst✝⁹ : Finite ι
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : Module R M₂
inst✝⁵ : Module.Finite R M₂
inst✝⁴ : Module.Free R M₂
inst✝³ : (i : ι) → AddCommGroup (M₁ i)
inst✝² : (i : ι) → Module R (M₁ i)
inst✝¹ : ∀ (i : ι), Module.Finite R (M₁ i)
inst✝ : ∀ (i : ι), Module.Free R (M₁ i)
val✝ : Fintype ι
⊢ Module.Free R (MultilinearMap R M₁ M₂) ∧ Module.Finite R (MultilinearMap R M₁ M₂)
tactic: cases nonempty_fintype ι
state_before: case intro
ι : Type u_1
R : Type u_2
M₂ : Type u_3
M₁ : ι → Type u_4
inst✝⁹ : Finite ι
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : Module R M₂
inst✝⁵ : Module.Finite R M₂
inst✝⁴ : Module.Free R M₂
inst✝³ : (i : ι) → AddCommGroup (M₁ i)
inst✝² : (i : ι) → Module R (M₁ i)
inst✝¹ : ∀ (i : ι), Module.Finite R (M₁ i)
inst✝ : ∀ (i : ι), Module.Free R (M₁ i)
val✝ : Fintype ι
⊢ Module.Free R (MultilinearMap R M₁ M₂) ∧ Module.Finite R (MultilinearMap R M₁ M₂)
state_after: case intro
ι : Type u_1
R : Type u_2
M₂ : Type u_3
M₁ : ι → Type u_4
inst✝⁹ : Finite ι
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : Module R M₂
inst✝⁵ : Module.Finite R M₂
inst✝⁴ : Module.Free R M₂
inst✝³ : (i : ι) → AddCommGroup (M₁ i)
inst✝² : (i : ι) → Module R (M₁ i)
inst✝¹ : ∀ (i : ι), Module.Finite R (M₁ i)
inst✝ : ∀ (i : ι), Module.Free R (M₁ i)
val✝ : Fintype ι
this :
  ∀ [inst : (i : Fin (Fintype.card ι)) → AddCommGroup (M₁ ((Fintype.equivFin ι).symm i))]
    [inst_1 : (i : Fin (Fintype.card ι)) → Module R (M₁ ((Fintype.equivFin ι).symm i))]
    [inst_2 : ∀ (i : Fin (Fintype.card ι)), Module.Finite R (M₁ ((Fintype.equivFin ι).symm i))]
    [inst_3 : ∀ (i : Fin (Fintype.card ι)), Module.Free R (M₁ ((Fintype.equivFin ι).symm i))],
    Module.Free R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂) ∧
      Module.Finite R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂)
⊢ Module.Free R (MultilinearMap R M₁ M₂) ∧ Module.Finite R (MultilinearMap R M₁ M₂)
tactic: have := @free_and_finite_fin R M₂ _ _ _ _ _ (Fintype.card ι)
    (fun x => M₁ ((Fintype.equivFin ι).symm x))
state_before: case intro
ι : Type u_1
R : Type u_2
M₂ : Type u_3
M₁ : ι → Type u_4
inst✝⁹ : Finite ι
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : Module R M₂
inst✝⁵ : Module.Finite R M₂
inst✝⁴ : Module.Free R M₂
inst✝³ : (i : ι) → AddCommGroup (M₁ i)
inst✝² : (i : ι) → Module R (M₁ i)
inst✝¹ : ∀ (i : ι), Module.Finite R (M₁ i)
inst✝ : ∀ (i : ι), Module.Free R (M₁ i)
val✝ : Fintype ι
this :
  ∀ [inst : (i : Fin (Fintype.card ι)) → AddCommGroup (M₁ ((Fintype.equivFin ι).symm i))]
    [inst_1 : (i : Fin (Fintype.card ι)) → Module R (M₁ ((Fintype.equivFin ι).symm i))]
    [inst_2 : ∀ (i : Fin (Fintype.card ι)), Module.Finite R (M₁ ((Fintype.equivFin ι).symm i))]
    [inst_3 : ∀ (i : Fin (Fintype.card ι)), Module.Free R (M₁ ((Fintype.equivFin ι).symm i))],
    Module.Free R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂) ∧
      Module.Finite R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂)
⊢ Module.Free R (MultilinearMap R M₁ M₂) ∧ Module.Finite R (MultilinearMap R M₁ M₂)
state_after: case intro.intro
ι : Type u_1
R : Type u_2
M₂ : Type u_3
M₁ : ι → Type u_4
inst✝⁹ : Finite ι
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : Module R M₂
inst✝⁵ : Module.Finite R M₂
inst✝⁴ : Module.Free R M₂
inst✝³ : (i : ι) → AddCommGroup (M₁ i)
inst✝² : (i : ι) → Module R (M₁ i)
inst✝¹ : ∀ (i : ι), Module.Finite R (M₁ i)
inst✝ : ∀ (i : ι), Module.Free R (M₁ i)
val✝ : Fintype ι
this :
  ∀ [inst : (i : Fin (Fintype.card ι)) → AddCommGroup (M₁ ((Fintype.equivFin ι).symm i))]
    [inst_1 : (i : Fin (Fintype.card ι)) → Module R (M₁ ((Fintype.equivFin ι).symm i))]
    [inst_2 : ∀ (i : Fin (Fintype.card ι)), Module.Finite R (M₁ ((Fintype.equivFin ι).symm i))]
    [inst_3 : ∀ (i : Fin (Fintype.card ι)), Module.Free R (M₁ ((Fintype.equivFin ι).symm i))],
    Module.Free R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂) ∧
      Module.Finite R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂)
l : Module.Free R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂)
r : Module.Finite R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂)
⊢ Module.Free R (MultilinearMap R M₁ M₂) ∧ Module.Finite R (MultilinearMap R M₁ M₂)
tactic: cases' this with l r
state_before: case intro.intro
ι : Type u_1
R : Type u_2
M₂ : Type u_3
M₁ : ι → Type u_4
inst✝⁹ : Finite ι
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : Module R M₂
inst✝⁵ : Module.Finite R M₂
inst✝⁴ : Module.Free R M₂
inst✝³ : (i : ι) → AddCommGroup (M₁ i)
inst✝² : (i : ι) → Module R (M₁ i)
inst✝¹ : ∀ (i : ι), Module.Finite R (M₁ i)
inst✝ : ∀ (i : ι), Module.Free R (M₁ i)
val✝ : Fintype ι
this :
  ∀ [inst : (i : Fin (Fintype.card ι)) → AddCommGroup (M₁ ((Fintype.equivFin ι).symm i))]
    [inst_1 : (i : Fin (Fintype.card ι)) → Module R (M₁ ((Fintype.equivFin ι).symm i))]
    [inst_2 : ∀ (i : Fin (Fintype.card ι)), Module.Finite R (M₁ ((Fintype.equivFin ι).symm i))]
    [inst_3 : ∀ (i : Fin (Fintype.card ι)), Module.Free R (M₁ ((Fintype.equivFin ι).symm i))],
    Module.Free R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂) ∧
      Module.Finite R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂)
l : Module.Free R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂)
r : Module.Finite R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂)
⊢ Module.Free R (MultilinearMap R M₁ M₂) ∧ Module.Finite R (MultilinearMap R M₁ M₂)
state_after: case intro.intro
ι : Type u_1
R : Type u_2
M₂ : Type u_3
M₁ : ι → Type u_4
inst✝⁹ : Finite ι
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : Module R M₂
inst✝⁵ : Module.Finite R M₂
inst✝⁴ : Module.Free R M₂
inst✝³ : (i : ι) → AddCommGroup (M₁ i)
inst✝² : (i : ι) → Module R (M₁ i)
inst✝¹ : ∀ (i : ι), Module.Finite R (M₁ i)
inst✝ : ∀ (i : ι), Module.Free R (M₁ i)
val✝ : Fintype ι
this :
  ∀ [inst : (i : Fin (Fintype.card ι)) → AddCommGroup (M₁ ((Fintype.equivFin ι).symm i))]
    [inst_1 : (i : Fin (Fintype.card ι)) → Module R (M₁ ((Fintype.equivFin ι).symm i))]
    [inst_2 : ∀ (i : Fin (Fintype.card ι)), Module.Finite R (M₁ ((Fintype.equivFin ι).symm i))]
    [inst_3 : ∀ (i : Fin (Fintype.card ι)), Module.Free R (M₁ ((Fintype.equivFin ι).symm i))],
    Module.Free R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂) ∧
      Module.Finite R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂)
l : Module.Free R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂)
r : Module.Finite R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂)
e : MultilinearMap R M₁ M₂ ≃ₗ[R] MultilinearMap R (fun i => M₁ ((Fintype.equivFin ι).symm i)) M₂
⊢ Module.Free R (MultilinearMap R M₁ M₂) ∧ Module.Finite R (MultilinearMap R M₁ M₂)
tactic: have e := domDomCongrLinearEquiv' R R M₁ M₂ (Fintype.equivFin ι)
state_before: case intro.intro
ι : Type u_1
R : Type u_2
M₂ : Type u_3
M₁ : ι → Type u_4
inst✝⁹ : Finite ι
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : Module R M₂
inst✝⁵ : Module.Finite R M₂
inst✝⁴ : Module.Free R M₂
inst✝³ : (i : ι) → AddCommGroup (M₁ i)
inst✝² : (i : ι) → Module R (M₁ i)
inst✝¹ : ∀ (i : ι), Module.Finite R (M₁ i)
inst✝ : ∀ (i : ι), Module.Free R (M₁ i)
val✝ : Fintype ι
this :
  ∀ [inst : (i : Fin (Fintype.card ι)) → AddCommGroup (M₁ ((Fintype.equivFin ι).symm i))]
    [inst_1 : (i : Fin (Fintype.card ι)) → Module R (M₁ ((Fintype.equivFin ι).symm i))]
    [inst_2 : ∀ (i : Fin (Fintype.card ι)), Module.Finite R (M₁ ((Fintype.equivFin ι).symm i))]
    [inst_3 : ∀ (i : Fin (Fintype.card ι)), Module.Free R (M₁ ((Fintype.equivFin ι).symm i))],
    Module.Free R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂) ∧
      Module.Finite R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂)
l : Module.Free R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂)
r : Module.Finite R (MultilinearMap R (fun x => M₁ ((Fintype.equivFin ι).symm x)) M₂)
e : MultilinearMap R M₁ M₂ ≃ₗ[R] MultilinearMap R (fun i => M₁ ((Fintype.equivFin ι).symm i)) M₂
⊢ Module.Free R (MultilinearMap R M₁ M₂) ∧ Module.Finite R (MultilinearMap R M₁ M₂)
state_after: no goals
tactic: exact ⟨Module.Free.of_equiv e.symm, Module.Finite.equiv e.symm⟩