[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
m : M
n : N
p : Submodule R M
q : Submodule R N
hm : m ∈ p
hn : n ∈ q
⊢ ↑(↑f ↑{ val := m, property := hm }) n = ↑(↑f m) n
[PROOFSTEP]
rfl
[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ map₂ f (span R s) (span R t) = span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
apply le_antisymm
[GOAL]
case a
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ map₂ f (span R s) (span R t) ≤ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
rw [map₂_le]
[GOAL]
case a
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (m : M), m ∈ span R s → ∀ (n : N), n ∈ span R t → ↑(↑f m) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
apply @span_induction' R M _ _ _ s
[GOAL]
case a.Hs
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (x : M), x ∈ s → ∀ (n : N), n ∈ span R t → ↑(↑f x) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.H0
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (n : N), n ∈ span R t → ↑(↑f 0) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.H1
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (x : M),
    x ∈ span R s →
      ∀ (y : M),
        y ∈ span R s →
          (∀ (n : N), n ∈ span R t → ↑(↑f x) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)) →
            (∀ (n : N), n ∈ span R t → ↑(↑f y) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)) →
              ∀ (n : N), n ∈ span R t → ↑(↑f (x + y)) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.H2
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (a : R) (x : M),
    x ∈ span R s →
      (∀ (n : N), n ∈ span R t → ↑(↑f x) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)) →
        ∀ (n : N), n ∈ span R t → ↑(↑f (a • x)) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
intro a ha
[GOAL]
case a.Hs
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
ha : a ∈ s
⊢ ∀ (n : N), n ∈ span R t → ↑(↑f a) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.H0
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (n : N), n ∈ span R t → ↑(↑f 0) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.H1
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (x : M),
    x ∈ span R s →
      ∀ (y : M),
        y ∈ span R s →
          (∀ (n : N), n ∈ span R t → ↑(↑f x) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)) →
            (∀ (n : N), n ∈ span R t → ↑(↑f y) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)) →
              ∀ (n : N), n ∈ span R t → ↑(↑f (x + y)) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.H2
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (a : R) (x : M),
    x ∈ span R s →
      (∀ (n : N), n ∈ span R t → ↑(↑f x) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)) →
        ∀ (n : N), n ∈ span R t → ↑(↑f (a • x)) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
apply @span_induction' R N _ _ _ t
[GOAL]
case a.Hs.Hs
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
ha : a ∈ s
⊢ ∀ (x : N), x ∈ t → ↑(↑f a) x ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.Hs.H0
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
ha : a ∈ s
⊢ ↑(↑f a) 0 ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.Hs.H1
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
ha : a ∈ s
⊢ ∀ (x : N),
    x ∈ span R t →
      ∀ (y : N),
        y ∈ span R t →
          ↑(↑f a) x ∈ span R (image2 (fun m n => ↑(↑f m) n) s t) →
            ↑(↑f a) y ∈ span R (image2 (fun m n => ↑(↑f m) n) s t) →
              ↑(↑f a) (x + y) ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.Hs.H2
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
ha : a ∈ s
⊢ ∀ (a_1 : R) (x : N),
    x ∈ span R t →
      ↑(↑f a) x ∈ span R (image2 (fun m n => ↑(↑f m) n) s t) →
        ↑(↑f a) (a_1 • x) ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.H0
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (n : N), n ∈ span R t → ↑(↑f 0) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.H1
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (x : M),
    x ∈ span R s →
      ∀ (y : M),
        y ∈ span R s →
          (∀ (n : N), n ∈ span R t → ↑(↑f x) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)) →
            (∀ (n : N), n ∈ span R t → ↑(↑f y) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)) →
              ∀ (n : N), n ∈ span R t → ↑(↑f (x + y)) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.H2
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (a : R) (x : M),
    x ∈ span R s →
      (∀ (n : N), n ∈ span R t → ↑(↑f x) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)) →
        ∀ (n : N), n ∈ span R t → ↑(↑f (a • x)) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
intro b hb
[GOAL]
case a.Hs.Hs
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
ha : a ∈ s
b : N
hb : b ∈ t
⊢ ↑(↑f a) b ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.Hs.H0
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
ha : a ∈ s
⊢ ↑(↑f a) 0 ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.Hs.H1
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
ha : a ∈ s
⊢ ∀ (x : N),
    x ∈ span R t →
      ∀ (y : N),
        y ∈ span R t →
          ↑(↑f a) x ∈ span R (image2 (fun m n => ↑(↑f m) n) s t) →
            ↑(↑f a) y ∈ span R (image2 (fun m n => ↑(↑f m) n) s t) →
              ↑(↑f a) (x + y) ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.Hs.H2
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
ha : a ∈ s
⊢ ∀ (a_1 : R) (x : N),
    x ∈ span R t →
      ↑(↑f a) x ∈ span R (image2 (fun m n => ↑(↑f m) n) s t) →
        ↑(↑f a) (a_1 • x) ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.H0
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (n : N), n ∈ span R t → ↑(↑f 0) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.H1
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (x : M),
    x ∈ span R s →
      ∀ (y : M),
        y ∈ span R s →
          (∀ (n : N), n ∈ span R t → ↑(↑f x) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)) →
            (∀ (n : N), n ∈ span R t → ↑(↑f y) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)) →
              ∀ (n : N), n ∈ span R t → ↑(↑f (x + y)) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.H2
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (a : R) (x : M),
    x ∈ span R s →
      (∀ (n : N), n ∈ span R t → ↑(↑f x) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)) →
        ∀ (n : N), n ∈ span R t → ↑(↑f (a • x)) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
exact subset_span ⟨_, _, ‹_›, ‹_›, rfl⟩
[GOAL]
case a.Hs.H0
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
ha : a ∈ s
⊢ ↑(↑f a) 0 ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.Hs.H1
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
ha : a ∈ s
⊢ ∀ (x : N),
    x ∈ span R t →
      ∀ (y : N),
        y ∈ span R t →
          ↑(↑f a) x ∈ span R (image2 (fun m n => ↑(↑f m) n) s t) →
            ↑(↑f a) y ∈ span R (image2 (fun m n => ↑(↑f m) n) s t) →
              ↑(↑f a) (x + y) ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.Hs.H2
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
ha : a ∈ s
⊢ ∀ (a_1 : R) (x : N),
    x ∈ span R t →
      ↑(↑f a) x ∈ span R (image2 (fun m n => ↑(↑f m) n) s t) →
        ↑(↑f a) (a_1 • x) ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.H0
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (n : N), n ∈ span R t → ↑(↑f 0) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.H1
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (x : M),
    x ∈ span R s →
      ∀ (y : M),
        y ∈ span R s →
          (∀ (n : N), n ∈ span R t → ↑(↑f x) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)) →
            (∀ (n : N), n ∈ span R t → ↑(↑f y) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)) →
              ∀ (n : N), n ∈ span R t → ↑(↑f (x + y)) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
case a.H2
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (a : R) (x : M),
    x ∈ span R s →
      (∀ (n : N), n ∈ span R t → ↑(↑f x) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)) →
        ∀ (n : N), n ∈ span R t → ↑(↑f (a • x)) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
all_goals intros;
  simp only [*, add_mem, smul_mem, zero_mem, _root_.map_zero, map_add, LinearMap.zero_apply, LinearMap.add_apply,
    LinearMap.smul_apply, SMulHomClass.map_smul]
[GOAL]
case a.Hs.H0
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
ha : a ∈ s
⊢ ↑(↑f a) 0 ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
intros
[GOAL]
case a.Hs.H0
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
ha : a ∈ s
⊢ ↑(↑f a) 0 ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
simp only [*, add_mem, smul_mem, zero_mem, _root_.map_zero, map_add, LinearMap.zero_apply, LinearMap.add_apply,
  LinearMap.smul_apply, SMulHomClass.map_smul]
[GOAL]
case a.Hs.H1
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
ha : a ∈ s
⊢ ∀ (x : N),
    x ∈ span R t →
      ∀ (y : N),
        y ∈ span R t →
          ↑(↑f a) x ∈ span R (image2 (fun m n => ↑(↑f m) n) s t) →
            ↑(↑f a) y ∈ span R (image2 (fun m n => ↑(↑f m) n) s t) →
              ↑(↑f a) (x + y) ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
intros
[GOAL]
case a.Hs.H1
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
ha : a ∈ s
x✝ : N
hx✝ : x✝ ∈ span R t
y✝ : N
hy✝ : y✝ ∈ span R t
a✝¹ : ↑(↑f a) x✝ ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
a✝ : ↑(↑f a) y✝ ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
⊢ ↑(↑f a) (x✝ + y✝) ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
simp only [*, add_mem, smul_mem, zero_mem, _root_.map_zero, map_add, LinearMap.zero_apply, LinearMap.add_apply,
  LinearMap.smul_apply, SMulHomClass.map_smul]
[GOAL]
case a.Hs.H2
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
ha : a ∈ s
⊢ ∀ (a_1 : R) (x : N),
    x ∈ span R t →
      ↑(↑f a) x ∈ span R (image2 (fun m n => ↑(↑f m) n) s t) →
        ↑(↑f a) (a_1 • x) ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
intros
[GOAL]
case a.Hs.H2
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
ha : a ∈ s
a✝¹ : R
x✝ : N
hx✝ : x✝ ∈ span R t
a✝ : ↑(↑f a) x✝ ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
⊢ ↑(↑f a) (a✝¹ • x✝) ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
simp only [*, add_mem, smul_mem, zero_mem, _root_.map_zero, map_add, LinearMap.zero_apply, LinearMap.add_apply,
  LinearMap.smul_apply, SMulHomClass.map_smul]
[GOAL]
case a.H0
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (n : N), n ∈ span R t → ↑(↑f 0) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
intros
[GOAL]
case a.H0
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
n✝ : N
a✝ : n✝ ∈ span R t
⊢ ↑(↑f 0) n✝ ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
simp only [*, add_mem, smul_mem, zero_mem, _root_.map_zero, map_add, LinearMap.zero_apply, LinearMap.add_apply,
  LinearMap.smul_apply, SMulHomClass.map_smul]
[GOAL]
case a.H1
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (x : M),
    x ∈ span R s →
      ∀ (y : M),
        y ∈ span R s →
          (∀ (n : N), n ∈ span R t → ↑(↑f x) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)) →
            (∀ (n : N), n ∈ span R t → ↑(↑f y) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)) →
              ∀ (n : N), n ∈ span R t → ↑(↑f (x + y)) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
intros
[GOAL]
case a.H1
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
x✝ : M
hx✝ : x✝ ∈ span R s
y✝ : M
hy✝ : y✝ ∈ span R s
a✝² : ∀ (n : N), n ∈ span R t → ↑(↑f x✝) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
a✝¹ : ∀ (n : N), n ∈ span R t → ↑(↑f y✝) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
n✝ : N
a✝ : n✝ ∈ span R t
⊢ ↑(↑f (x✝ + y✝)) n✝ ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
simp only [*, add_mem, smul_mem, zero_mem, _root_.map_zero, map_add, LinearMap.zero_apply, LinearMap.add_apply,
  LinearMap.smul_apply, SMulHomClass.map_smul]
[GOAL]
case a.H2
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ ∀ (a : R) (x : M),
    x ∈ span R s →
      (∀ (n : N), n ∈ span R t → ↑(↑f x) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)) →
        ∀ (n : N), n ∈ span R t → ↑(↑f (a • x)) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
intros
[GOAL]
case a.H2
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a✝² : R
x✝ : M
hx✝ : x✝ ∈ span R s
a✝¹ : ∀ (n : N), n ∈ span R t → ↑(↑f x✝) n ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
n✝ : N
a✝ : n✝ ∈ span R t
⊢ ↑(↑f (a✝² • x✝)) n✝ ∈ span R (image2 (fun m n => ↑(↑f m) n) s t)
[PROOFSTEP]
simp only [*, add_mem, smul_mem, zero_mem, _root_.map_zero, map_add, LinearMap.zero_apply, LinearMap.add_apply,
  LinearMap.smul_apply, SMulHomClass.map_smul]
[GOAL]
case a
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ span R (image2 (fun m n => ↑(↑f m) n) s t) ≤ map₂ f (span R s) (span R t)
[PROOFSTEP]
rw [span_le]
[GOAL]
case a
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
⊢ image2 (fun m n => ↑(↑f m) n) s t ⊆ ↑(map₂ f (span R s) (span R t))
[PROOFSTEP]
rintro _ ⟨a, b, ha, hb, rfl⟩
[GOAL]
case a.intro.intro.intro.intro
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Set M
t : Set N
a : M
b : N
ha : a ∈ s
hb : b ∈ t
⊢ (fun m n => ↑(↑f m) n) a b ∈ ↑(map₂ f (span R s) (span R t))
[PROOFSTEP]
exact apply_mem_map₂ _ (subset_span ha) (subset_span hb)
[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
p : Submodule R M
m : M
_hm : m ∈ p
n : N
hn : n ∈ ⊥
⊢ ↑(↑f m) n ∈ ⊥
[PROOFSTEP]
rw [Submodule.mem_bot] at hn
[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
p : Submodule R M
m : M
_hm : m ∈ p
n : N
hn : n = 0
⊢ ↑(↑f m) n ∈ ⊥
[PROOFSTEP]
rw [hn, LinearMap.map_zero]
[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
p : Submodule R M
m : M
_hm : m ∈ p
n : N
hn : n = 0
⊢ 0 ∈ ⊥
[PROOFSTEP]
simp only [mem_bot]
[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
q : Submodule R N
m : M
hm : m ∈ ⊥
n : N
hn : n ∈ q
⊢ ↑(↑f m) n ∈ ⊥
[PROOFSTEP]
rw [Submodule.mem_bot] at hm ⊢
[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
q : Submodule R N
m : M
hm : m = 0
n : N
hn : n ∈ q
⊢ ↑(↑f m) n = 0
[PROOFSTEP]
rw [hm, LinearMap.map_zero₂]
[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
p : Submodule R M
q : Submodule R N
⊢ image2 (fun m n => ↑(↑f m) n) ↑p ↑q ⊆ ↑(map₂ f p q)
[PROOFSTEP]
rintro _ ⟨i, j, hi, hj, rfl⟩
[GOAL]
case intro.intro.intro.intro
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
p : Submodule R M
q : Submodule R N
i : M
j : N
hi : i ∈ ↑p
hj : j ∈ ↑q
⊢ (fun m n => ↑(↑f m) n) i j ∈ ↑(map₂ f p q)
[PROOFSTEP]
exact apply_mem_map₂ _ hi hj
[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
p : Submodule R M
q : Submodule R N
⊢ map₂ f p q = span R (image2 (fun m n => ↑(↑f m) n) ↑p ↑q)
[PROOFSTEP]
rw [← map₂_span_span, span_eq, span_eq]
[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
p : Submodule R M
q : Submodule R N
⊢ map₂ (LinearMap.flip f) q p = map₂ f p q
[PROOFSTEP]
rw [map₂_eq_span_image2, map₂_eq_span_image2, Set.image2_swap]
[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
p : Submodule R M
q : Submodule R N
⊢ span R (image2 (fun a b => ↑(↑(LinearMap.flip f) b) a) ↑p ↑q) = span R (image2 (fun m n => ↑(↑f m) n) ↑p ↑q)
[PROOFSTEP]
rfl
[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : ι → Submodule R M
t : Submodule R N
⊢ map₂ f (⨆ (i : ι), s i) t = ⨆ (i : ι), map₂ f (s i) t
[PROOFSTEP]
suffices map₂ f (⨆ i, span R (s i : Set M)) (span R t) = ⨆ i, map₂ f (span R (s i)) (span R t) by
  simpa only [span_eq] using this
[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : ι → Submodule R M
t : Submodule R N
this : map₂ f (⨆ (i : ι), span R ↑(s i)) (span R ↑t) = ⨆ (i : ι), map₂ f (span R ↑(s i)) (span R ↑t)
⊢ map₂ f (⨆ (i : ι), s i) t = ⨆ (i : ι), map₂ f (s i) t
[PROOFSTEP]
simpa only [span_eq] using this
[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : ι → Submodule R M
t : Submodule R N
⊢ map₂ f (⨆ (i : ι), span R ↑(s i)) (span R ↑t) = ⨆ (i : ι), map₂ f (span R ↑(s i)) (span R ↑t)
[PROOFSTEP]
simp_rw [map₂_span_span, ← span_iUnion, map₂_span_span, Set.image2_iUnion_left]
[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Submodule R M
t : ι → Submodule R N
⊢ map₂ f s (⨆ (i : ι), t i) = ⨆ (i : ι), map₂ f s (t i)
[PROOFSTEP]
suffices map₂ f (span R s) (⨆ i, span R (t i : Set N)) = ⨆ i, map₂ f (span R s) (span R (t i)) by
  simpa only [span_eq] using this
[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Submodule R M
t : ι → Submodule R N
this : map₂ f (span R ↑s) (⨆ (i : ι), span R ↑(t i)) = ⨆ (i : ι), map₂ f (span R ↑s) (span R ↑(t i))
⊢ map₂ f s (⨆ (i : ι), t i) = ⨆ (i : ι), map₂ f s (t i)
[PROOFSTEP]
simpa only [span_eq] using this
[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Submodule R M
t : ι → Submodule R N
⊢ map₂ f (span R ↑s) (⨆ (i : ι), span R ↑(t i)) = ⨆ (i : ι), map₂ f (span R ↑s) (span R ↑(t i))
[PROOFSTEP]
simp_rw [map₂_span_span, ← span_iUnion, map₂_span_span, Set.image2_iUnion_right]
[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
m : M
⊢ map₂ f (span R {m}) = map (↑f m)
[PROOFSTEP]
funext
[GOAL]
case h
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
m : M
x✝ : Submodule R N
⊢ map₂ f (span R {m}) x✝ = map (↑f m) x✝
[PROOFSTEP]
rw [map₂_eq_span_image2]
[GOAL]
case h
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
m : M
x✝ : Submodule R N
⊢ span R (image2 (fun m n => ↑(↑f m) n) ↑(span R {m}) ↑x✝) = map (↑f m) x✝
[PROOFSTEP]
apply le_antisymm
[GOAL]
case h.a
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
m : M
x✝ : Submodule R N
⊢ span R (image2 (fun m n => ↑(↑f m) n) ↑(span R {m}) ↑x✝) ≤ map (↑f m) x✝
[PROOFSTEP]
rw [span_le, Set.image2_subset_iff]
[GOAL]
case h.a
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
m : M
x✝ : Submodule R N
⊢ ∀ (x : M), x ∈ ↑(span R {m}) → ∀ (y : N), y ∈ ↑x✝ → ↑(↑f x) y ∈ ↑(map (↑f m) x✝)
[PROOFSTEP]
intro x hx y hy
[GOAL]
case h.a
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
m : M
x✝ : Submodule R N
x : M
hx : x ∈ ↑(span R {m})
y : N
hy : y ∈ ↑x✝
⊢ ↑(↑f x) y ∈ ↑(map (↑f m) x✝)
[PROOFSTEP]
obtain ⟨a, rfl⟩ := mem_span_singleton.1 hx
[GOAL]
case h.a.intro
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
m : M
x✝ : Submodule R N
y : N
hy : y ∈ ↑x✝
a : R
hx : a • m ∈ ↑(span R {m})
⊢ ↑(↑f (a • m)) y ∈ ↑(map (↑f m) x✝)
[PROOFSTEP]
rw [f.map_smul]
[GOAL]
case h.a.intro
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
m : M
x✝ : Submodule R N
y : N
hy : y ∈ ↑x✝
a : R
hx : a • m ∈ ↑(span R {m})
⊢ ↑(a • ↑f m) y ∈ ↑(map (↑f m) x✝)
[PROOFSTEP]
exact smul_mem _ a (mem_map_of_mem hy)
[GOAL]
case h.a
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
m : M
x✝ : Submodule R N
⊢ map (↑f m) x✝ ≤ span R (image2 (fun m n => ↑(↑f m) n) ↑(span R {m}) ↑x✝)
[PROOFSTEP]
rintro _ ⟨n, hn, rfl⟩
[GOAL]
case h.a.intro.intro
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
m : M
x✝ : Submodule R N
n : N
hn : n ∈ ↑x✝
⊢ ↑(↑f m) n ∈ span R (image2 (fun m n => ↑(↑f m) n) ↑(span R {m}) ↑x✝)
[PROOFSTEP]
exact subset_span ⟨m, n, mem_span_singleton_self m, hn, rfl⟩
[GOAL]
ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : Submodule R M
n : N
⊢ map₂ f s (span R {n}) = map (↑(LinearMap.flip f) n) s
[PROOFSTEP]
rw [← map₂_span_singleton_eq_map, map₂_flip]


[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring S
inst✝⁹ : Semiring R₁
inst✝⁸ : Semiring R₂
inst✝⁷ : Semiring R₃
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M₁
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : AddCommMonoid M₄
inst✝¹ : AddCommMonoid N₁
inst✝ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e✝ e' e : M ≃ₛₗ[σ] M₂
src✝¹ : M₂ →ₛₗ[σ'] M :=
  LinearMap.inverse (↑e) e.invFun (_ : LeftInverse e.invFun e.toFun) (_ : Function.RightInverse e.invFun e.toFun)
src✝ : M₂ ≃ M := (toEquiv e).symm
r : S
x : M₂
⊢ AddHom.toFun
      {
        toFun :=
          ↑(LinearMap.inverse (↑e) e.invFun (_ : LeftInverse e.invFun e.toFun)
              (_ : Function.RightInverse e.invFun e.toFun)),
        map_add' :=
          (_ :
            ∀ (x y : M₂),
              AddHom.toFun src✝¹.toAddHom (x + y) = AddHom.toFun src✝¹.toAddHom x + AddHom.toFun src✝¹.toAddHom y) }
      (r • x) =
    ↑σ' r •
      AddHom.toFun
        {
          toFun :=
            ↑(LinearMap.inverse (↑e) e.invFun (_ : LeftInverse e.invFun e.toFun)
                (_ : Function.RightInverse e.invFun e.toFun)),
          map_add' :=
            (_ :
              ∀ (x y : M₂),
                AddHom.toFun src✝¹.toAddHom (x + y) = AddHom.toFun src✝¹.toAddHom x + AddHom.toFun src✝¹.toAddHom y) }
        x
[PROOFSTEP]
dsimp only
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring S
inst✝⁹ : Semiring R₁
inst✝⁸ : Semiring R₂
inst✝⁷ : Semiring R₃
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M₁
inst✝⁴ : AddCommMonoid M₂
inst✝³ : AddCommMonoid M₃
inst✝² : AddCommMonoid M₄
inst✝¹ : AddCommMonoid N₁
inst✝ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e✝ e' e : M ≃ₛₗ[σ] M₂
src✝¹ : M₂ →ₛₗ[σ'] M :=
  LinearMap.inverse (↑e) e.invFun (_ : LeftInverse e.invFun e.toFun) (_ : Function.RightInverse e.invFun e.toFun)
src✝ : M₂ ≃ M := (toEquiv e).symm
r : S
x : M₂
⊢ ↑(LinearMap.inverse (↑e) e.invFun (_ : LeftInverse e.invFun e.toFun) (_ : Function.RightInverse e.invFun e.toFun))
      (r • x) =
    ↑σ' r •
      ↑(LinearMap.inverse (↑e) e.invFun (_ : LeftInverse e.invFun e.toFun) (_ : Function.RightInverse e.invFun e.toFun))
        x
[PROOFSTEP]
rw [map_smulₛₗ]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₂ →ₛₗ[σ₂₃] M₃
g : M₁ →ₛₗ[σ₁₃] M₃
⊢ f = LinearMap.comp g ↑(symm e₁₂) ↔ LinearMap.comp f ↑e₁₂ = g
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₂ →ₛₗ[σ₂₃] M₃
g : M₁ →ₛₗ[σ₁₃] M₃
⊢ f = LinearMap.comp g ↑(symm e₁₂) → LinearMap.comp f ↑e₁₂ = g
[PROOFSTEP]
intro H
[GOAL]
case mpr
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₂ →ₛₗ[σ₂₃] M₃
g : M₁ →ₛₗ[σ₁₃] M₃
⊢ LinearMap.comp f ↑e₁₂ = g → f = LinearMap.comp g ↑(symm e₁₂)
[PROOFSTEP]
intro H
[GOAL]
case mp
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₂ →ₛₗ[σ₂₃] M₃
g : M₁ →ₛₗ[σ₁₃] M₃
H : f = LinearMap.comp g ↑(symm e₁₂)
⊢ LinearMap.comp f ↑e₁₂ = g
[PROOFSTEP]
ext
[GOAL]
case mpr
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₂ →ₛₗ[σ₂₃] M₃
g : M₁ →ₛₗ[σ₁₃] M₃
H : LinearMap.comp f ↑e₁₂ = g
⊢ f = LinearMap.comp g ↑(symm e₁₂)
[PROOFSTEP]
ext
[GOAL]
case mp.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₂ →ₛₗ[σ₂₃] M₃
g : M₁ →ₛₗ[σ₁₃] M₃
H : f = LinearMap.comp g ↑(symm e₁₂)
x✝ : M₁
⊢ ↑(LinearMap.comp f ↑e₁₂) x✝ = ↑g x✝
[PROOFSTEP]
simp [H, e₁₂.toEquiv.eq_comp_symm f g]
[GOAL]
case mpr.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₂ →ₛₗ[σ₂₃] M₃
g : M₁ →ₛₗ[σ₁₃] M₃
H : LinearMap.comp f ↑e₁₂ = g
x✝ : M₂
⊢ ↑f x✝ = ↑(LinearMap.comp g ↑(symm e₁₂)) x✝
[PROOFSTEP]
simp [← H, ← e₁₂.toEquiv.eq_comp_symm f g]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₂ →ₛₗ[σ₂₃] M₃
g : M₁ →ₛₗ[σ₁₃] M₃
⊢ LinearMap.comp g ↑(symm e₁₂) = f ↔ g = LinearMap.comp f ↑e₁₂
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₂ →ₛₗ[σ₂₃] M₃
g : M₁ →ₛₗ[σ₁₃] M₃
⊢ LinearMap.comp g ↑(symm e₁₂) = f → g = LinearMap.comp f ↑e₁₂
[PROOFSTEP]
intro H
[GOAL]
case mpr
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₂ →ₛₗ[σ₂₃] M₃
g : M₁ →ₛₗ[σ₁₃] M₃
⊢ g = LinearMap.comp f ↑e₁₂ → LinearMap.comp g ↑(symm e₁₂) = f
[PROOFSTEP]
intro H
[GOAL]
case mp
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₂ →ₛₗ[σ₂₃] M₃
g : M₁ →ₛₗ[σ₁₃] M₃
H : LinearMap.comp g ↑(symm e₁₂) = f
⊢ g = LinearMap.comp f ↑e₁₂
[PROOFSTEP]
ext
[GOAL]
case mpr
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₂ →ₛₗ[σ₂₃] M₃
g : M₁ →ₛₗ[σ₁₃] M₃
H : g = LinearMap.comp f ↑e₁₂
⊢ LinearMap.comp g ↑(symm e₁₂) = f
[PROOFSTEP]
ext
[GOAL]
case mp.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₂ →ₛₗ[σ₂₃] M₃
g : M₁ →ₛₗ[σ₁₃] M₃
H : LinearMap.comp g ↑(symm e₁₂) = f
x✝ : M₁
⊢ ↑g x✝ = ↑(LinearMap.comp f ↑e₁₂) x✝
[PROOFSTEP]
simp [← H, ← e₁₂.toEquiv.comp_symm_eq f g]
[GOAL]
case mpr.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₂ →ₛₗ[σ₂₃] M₃
g : M₁ →ₛₗ[σ₁₃] M₃
H : g = LinearMap.comp f ↑e₁₂
x✝ : M₂
⊢ ↑(LinearMap.comp g ↑(symm e₁₂)) x✝ = ↑f x✝
[PROOFSTEP]
simp [H, e₁₂.toEquiv.comp_symm_eq f g]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₃ →ₛₗ[σ₃₁] M₁
g : M₃ →ₛₗ[σ₃₂] M₂
⊢ f = LinearMap.comp (↑(symm e₁₂)) g ↔ LinearMap.comp (↑e₁₂) f = g
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₃ →ₛₗ[σ₃₁] M₁
g : M₃ →ₛₗ[σ₃₂] M₂
⊢ f = LinearMap.comp (↑(symm e₁₂)) g → LinearMap.comp (↑e₁₂) f = g
[PROOFSTEP]
intro H
[GOAL]
case mpr
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₃ →ₛₗ[σ₃₁] M₁
g : M₃ →ₛₗ[σ₃₂] M₂
⊢ LinearMap.comp (↑e₁₂) f = g → f = LinearMap.comp (↑(symm e₁₂)) g
[PROOFSTEP]
intro H
[GOAL]
case mp
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₃ →ₛₗ[σ₃₁] M₁
g : M₃ →ₛₗ[σ₃₂] M₂
H : f = LinearMap.comp (↑(symm e₁₂)) g
⊢ LinearMap.comp (↑e₁₂) f = g
[PROOFSTEP]
ext
[GOAL]
case mpr
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₃ →ₛₗ[σ₃₁] M₁
g : M₃ →ₛₗ[σ₃₂] M₂
H : LinearMap.comp (↑e₁₂) f = g
⊢ f = LinearMap.comp (↑(symm e₁₂)) g
[PROOFSTEP]
ext
[GOAL]
case mp.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₃ →ₛₗ[σ₃₁] M₁
g : M₃ →ₛₗ[σ₃₂] M₂
H : f = LinearMap.comp (↑(symm e₁₂)) g
x✝ : M₃
⊢ ↑(LinearMap.comp (↑e₁₂) f) x✝ = ↑g x✝
[PROOFSTEP]
simp [H, e₁₂.toEquiv.eq_symm_comp f g]
[GOAL]
case mpr.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₃ →ₛₗ[σ₃₁] M₁
g : M₃ →ₛₗ[σ₃₂] M₂
H : LinearMap.comp (↑e₁₂) f = g
x✝ : M₃
⊢ ↑f x✝ = ↑(LinearMap.comp (↑(symm e₁₂)) g) x✝
[PROOFSTEP]
simp [← H, ← e₁₂.toEquiv.eq_symm_comp f g]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₃ →ₛₗ[σ₃₁] M₁
g : M₃ →ₛₗ[σ₃₂] M₂
⊢ LinearMap.comp (↑(symm e₁₂)) g = f ↔ g = LinearMap.comp (↑e₁₂) f
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₃ →ₛₗ[σ₃₁] M₁
g : M₃ →ₛₗ[σ₃₂] M₂
⊢ LinearMap.comp (↑(symm e₁₂)) g = f → g = LinearMap.comp (↑e₁₂) f
[PROOFSTEP]
intro H
[GOAL]
case mpr
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₃ →ₛₗ[σ₃₁] M₁
g : M₃ →ₛₗ[σ₃₂] M₂
⊢ g = LinearMap.comp (↑e₁₂) f → LinearMap.comp (↑(symm e₁₂)) g = f
[PROOFSTEP]
intro H
[GOAL]
case mp
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₃ →ₛₗ[σ₃₁] M₁
g : M₃ →ₛₗ[σ₃₂] M₂
H : LinearMap.comp (↑(symm e₁₂)) g = f
⊢ g = LinearMap.comp (↑e₁₂) f
[PROOFSTEP]
ext
[GOAL]
case mpr
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₃ →ₛₗ[σ₃₁] M₁
g : M₃ →ₛₗ[σ₃₂] M₂
H : g = LinearMap.comp (↑e₁₂) f
⊢ LinearMap.comp (↑(symm e₁₂)) g = f
[PROOFSTEP]
ext
[GOAL]
case mp.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₃ →ₛₗ[σ₃₁] M₁
g : M₃ →ₛₗ[σ₃₂] M₂
H : LinearMap.comp (↑(symm e₁₂)) g = f
x✝ : M₃
⊢ ↑g x✝ = ↑(LinearMap.comp (↑e₁₂) f) x✝
[PROOFSTEP]
simp [← H, ← e₁₂.toEquiv.symm_comp_eq f g]
[GOAL]
case mpr.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₃ →ₛₗ[σ₃₁] M₁
g : M₃ →ₛₗ[σ₃₂] M₂
H : g = LinearMap.comp (↑e₁₂) f
x✝ : M₃
⊢ ↑(LinearMap.comp (↑(symm e₁₂)) g) x✝ = ↑f x✝
[PROOFSTEP]
simp [H, e₁₂.toEquiv.symm_comp_eq f g]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₁ ≃ₛₗ[σ₁₂] M₂
⊢ trans f (symm f) = refl R₁ M₁
[PROOFSTEP]
ext x
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₁ ≃ₛₗ[σ₁₂] M₂
x : M₁
⊢ ↑(trans f (symm f)) x = ↑(refl R₁ M₁) x
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₁ ≃ₛₗ[σ₁₂] M₂
⊢ trans (symm f) f = refl R₂ M₂
[PROOFSTEP]
ext x
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
f : M₁ ≃ₛₗ[σ₁₂] M₂
x : M₂
⊢ ↑(trans (symm f) f) x = ↑(refl R₂ M₂) x
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e✝ e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
e : M ≃ₛₗ[σ] M₂
⊢ symm (symm e) = e
[PROOFSTEP]
cases e
[GOAL]
case mk
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹⁷ : Semiring R
inst✝¹⁶ : Semiring S
inst✝¹⁵ : Semiring R₁
inst✝¹⁴ : Semiring R₂
inst✝¹³ : Semiring R₃
inst✝¹² : AddCommMonoid M
inst✝¹¹ : AddCommMonoid M₁
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : AddCommMonoid M₄
inst✝⁷ : AddCommMonoid N₁
inst✝⁶ : AddCommMonoid N₂
module_M : Module R M
module_S_M₂ : Module S M₂
σ : R →+* S
σ' : S →+* R
re₁ : RingHomInvPair σ σ'
re₂ : RingHomInvPair σ' σ
e e' : M ≃ₛₗ[σ] M₂
module_M₁ : Module R₁ M₁
module_M₂ : Module R₂ M₂
module_M₃ : Module R₃ M₃
module_N₁ : Module R₁ N₁
module_N₂ : Module R₁ N₂
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
σ₂₁ : R₂ →+* R₁
σ₃₂ : R₃ →+* R₂
σ₃₁ : R₃ →+* R₁
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
re₁₂ : RingHomInvPair σ₁₂ σ₂₁
re₂₃ : RingHomInvPair σ₂₃ σ₃₂
inst✝³ : RingHomInvPair σ₁₃ σ₃₁
re₂₁ : RingHomInvPair σ₂₁ σ₁₂
re₃₂ : RingHomInvPair σ₃₂ σ₂₃
inst✝² : RingHomInvPair σ₃₁ σ₁₃
e₁₂ : M₁ ≃ₛₗ[σ₁₂] M₂
e₂₃ : M₂ ≃ₛₗ[σ₂₃] M₃
inst✝¹ : RingHomCompTriple σ₂₁ σ₁₃ σ₂₃
inst✝ : RingHomCompTriple σ₃₁ σ₁₂ σ₃₂
toLinearMap✝ : M →ₛₗ[σ] M₂
invFun✝ : M₂ → M
left_inv✝ : LeftInverse invFun✝ toLinearMap✝.toFun
right_inv✝ : Function.RightInverse invFun✝ toLinearMap✝.toFun
⊢ symm (symm { toLinearMap := toLinearMap✝, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ }) =
    { toLinearMap := toLinearMap✝, invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ }
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring S
inst✝⁹ : Semiring R₁
inst✝⁸ : Semiring R₂
inst✝⁷ : Semiring R₃
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M₁
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M
inst✝² : Module R M₂
inst✝¹ : Subsingleton M
inst✝ : Subsingleton M₂
⊢ ofSubsingleton M M = refl R M
[PROOFSTEP]
ext
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
M₄ : Type u_16
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring S
inst✝⁹ : Semiring R₁
inst✝⁸ : Semiring R₂
inst✝⁷ : Semiring R₃
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M₁
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M
inst✝² : Module R M₂
inst✝¹ : Subsingleton M
inst✝ : Subsingleton M₂
x✝ : M
⊢ ↑(ofSubsingleton M M) x✝ = ↑(refl R M) x✝
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : AddCommMonoid M₂
inst✝² : AddCommMonoid M₃
inst✝¹ : Module R M
inst✝ : Module R M₂
e : M ≃+ M₂
c : ℕ
a : M
⊢ ↑e (c • a) = c • ↑e a
[PROOFSTEP]
erw [e.toAddMonoidHom.map_nsmul]
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : AddCommMonoid M₂
inst✝² : AddCommMonoid M₃
inst✝¹ : Module R M
inst✝ : Module R M₂
e : M ≃+ M₂
c : ℕ
a : M
⊢ c • ↑(toAddMonoidHom e) a = c • ↑e a
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : AddCommMonoid M₂
inst✝² : AddCommMonoid M₃
inst✝¹ : Module R M
inst✝ : Module R M₂
e : M ≃+ M₂
⊢ ↑(toNatLinearEquiv e) = e
[PROOFSTEP]
ext
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : AddCommMonoid M₂
inst✝² : AddCommMonoid M₃
inst✝¹ : Module R M
inst✝ : Module R M₂
e : M ≃+ M₂
x✝ : M
⊢ ↑↑(toNatLinearEquiv e) x✝ = ↑e x✝
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
inst✝² : AddCommGroup M
inst✝¹ : AddCommGroup M₂
inst✝ : AddCommGroup M₃
e : M ≃+ M₂
⊢ ↑(toIntLinearEquiv e) = e
[PROOFSTEP]
ext
[GOAL]
case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
M : Type u_7
M₁ : Type u_8
M₂ : Type u_9
M₃ : Type u_10
N₁ : Type u_11
N₂ : Type u_12
N₃ : Type u_13
N₄ : Type u_14
ι : Type u_15
inst✝² : AddCommGroup M
inst✝¹ : AddCommGroup M₂
inst✝ : AddCommGroup M₃
e : M ≃+ M₂
x✝ : M
⊢ ↑↑(toIntLinearEquiv e) x✝ = ↑e x✝
[PROOFSTEP]
rfl


[GOAL]
R : Type u_1
ι : Type u_2
inst✝¹ : Semiring R
inst✝ : CharP R 2
⊢ 2 = 0
[PROOFSTEP]
rw [← Nat.cast_two, CharP.cast_eq_zero]
[GOAL]
R : Type u_1
ι : Type u_2
inst✝¹ : Semiring R
inst✝ : CharP R 2
x : R
⊢ x + x = 0
[PROOFSTEP]
rw [← two_smul R x, two_eq_zero, zero_smul]
[GOAL]
R : Type u_1
ι : Type u_2
inst✝¹ : Semiring R
inst✝ : CharP R 2
⊢ bit0 = 0
[PROOFSTEP]
funext
[GOAL]
case h
R : Type u_1
ι : Type u_2
inst✝¹ : Semiring R
inst✝ : CharP R 2
x✝ : R
⊢ bit0 x✝ = OfNat.ofNat 0 x✝
[PROOFSTEP]
exact add_self_eq_zero _
[GOAL]
R : Type u_1
ι : Type u_2
inst✝¹ : Semiring R
inst✝ : CharP R 2
x : R
⊢ bit0 x = 0
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
ι : Type u_2
inst✝¹ : Semiring R
inst✝ : CharP R 2
⊢ bit1 = 1
[PROOFSTEP]
funext
[GOAL]
case h
R : Type u_1
ι : Type u_2
inst✝¹ : Semiring R
inst✝ : CharP R 2
x✝ : R
⊢ bit1 x✝ = OfNat.ofNat 1 x✝
[PROOFSTEP]
simp [bit1]
[GOAL]
R : Type u_1
ι : Type u_2
inst✝¹ : Semiring R
inst✝ : CharP R 2
x : R
⊢ bit1 x = 1
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
ι : Type u_2
inst✝¹ : Ring R
inst✝ : CharP R 2
x : R
⊢ -x = x
[PROOFSTEP]
rw [neg_eq_iff_add_eq_zero, ← two_smul R x, two_eq_zero, zero_smul]
[GOAL]
R : Type u_1
ι : Type u_2
inst✝¹ : Ring R
inst✝ : CharP R 2
x y : R
⊢ x - y = x + y
[PROOFSTEP]
rw [sub_eq_add_neg, neg_eq]
[GOAL]
R : Type u_1
ι : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CharP R 2
x y : R
⊢ (x + y) * (x + y) = x * x + y * y
[PROOFSTEP]
rw [← pow_two, ← pow_two, ← pow_two, add_sq]
[GOAL]
R : Type u_1
ι : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CharP R 2
l : List R
⊢ List.sum l * List.sum l = List.sum (List.map (fun x => x * x) l)
[PROOFSTEP]
simp_rw [← pow_two, list_sum_sq]
[GOAL]
R : Type u_1
ι : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CharP R 2
l : Multiset R
⊢ Multiset.sum l * Multiset.sum l = Multiset.sum (Multiset.map (fun x => x * x) l)
[PROOFSTEP]
simp_rw [← pow_two, multiset_sum_sq]
[GOAL]
R : Type u_1
ι : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CharP R 2
s : Finset ι
f : ι → R
⊢ (∑ i in s, f i) * ∑ i in s, f i = ∑ i in s, f i * f i
[PROOFSTEP]
simp_rw [← pow_two, sum_sq]
[GOAL]
R : Type u_1
ι : Type u_2
inst✝¹ : Ring R
inst✝ : Nontrivial R
⊢ -1 = 1 ↔ ringChar R = 2
[PROOFSTEP]
refine' ⟨fun h => _, fun h => @CharTwo.neg_eq _ _ (ringChar.of_eq h) 1⟩
[GOAL]
R : Type u_1
ι : Type u_2
inst✝¹ : Ring R
inst✝ : Nontrivial R
h : -1 = 1
⊢ ringChar R = 2
[PROOFSTEP]
rw [eq_comm, ← sub_eq_zero, sub_neg_eq_add, ← Nat.cast_one, ← Nat.cast_add] at h
[GOAL]
R : Type u_1
ι : Type u_2
inst✝¹ : Ring R
inst✝ : Nontrivial R
h✝ : 1 = -1
h : ↑(1 + 1) = 0
⊢ ringChar R = 2
[PROOFSTEP]
exact ((Nat.dvd_prime Nat.prime_two).mp (ringChar.dvd h)).resolve_left CharP.ringChar_ne_one
[GOAL]
R : Type u_1
ι : Type u_2
inst✝¹ : Ring R
inst✝ : Nontrivial R
⊢ orderOf (-1) = if ringChar R = 2 then 1 else 2
[PROOFSTEP]
split_ifs with h
[GOAL]
case pos
R : Type u_1
ι : Type u_2
inst✝¹ : Ring R
inst✝ : Nontrivial R
h : ringChar R = 2
⊢ orderOf (-1) = 1
[PROOFSTEP]
rw [neg_one_eq_one_iff.2 h, orderOf_one]
[GOAL]
case neg
R : Type u_1
ι : Type u_2
inst✝¹ : Ring R
inst✝ : Nontrivial R
h : ¬ringChar R = 2
⊢ orderOf (-1) = 2
[PROOFSTEP]
apply orderOf_eq_prime
[GOAL]
case neg.hg
R : Type u_1
ι : Type u_2
inst✝¹ : Ring R
inst✝ : Nontrivial R
h : ¬ringChar R = 2
⊢ (-1) ^ 2 = 1
[PROOFSTEP]
simp
[GOAL]
case neg.hg1
R : Type u_1
ι : Type u_2
inst✝¹ : Ring R
inst✝ : Nontrivial R
h : ¬ringChar R = 2
⊢ -1 ≠ 1
[PROOFSTEP]
simpa [neg_one_eq_one_iff] using h