[GOAL]
m n : ℕ
⊢ (fun b => bif b then 1 else 0) (Matrix.vecCons false ![true] 0) = 0 ∧
    (fun b => bif b then 1 else 0) (Matrix.vecCons false ![true] 1) = 1
[PROOFSTEP]
simp
[GOAL]
m n : ℕ
⊢ Matrix.vecCons false ![true] ((fun b => bif b then 1 else 0) false) = false ∧
    Matrix.vecCons false ![true] ((fun b => bif b then 1 else 0) true) = true
[PROOFSTEP]
simp
[GOAL]
m n : ℕ
α : Fin 2 → Type u
s : Set (α 0)
t : Set (α 1)
⊢ (fun f => (f 0, f 1)) ⁻¹' s ×ˢ t = Set.pi Set.univ (cons s (cons t finZeroElim))
[PROOFSTEP]
ext f
[GOAL]
case h
m n : ℕ
α : Fin 2 → Type u
s : Set (α 0)
t : Set (α 1)
f : (i : Fin 2) → α i
⊢ f ∈ (fun f => (f 0, f 1)) ⁻¹' s ×ˢ t ↔ f ∈ Set.pi Set.univ (cons s (cons t finZeroElim))
[PROOFSTEP]
simp [Fin.forall_fin_two]
[GOAL]
m n : ℕ
i x : Fin (n + 1)
⊢ (fun x => Option.casesOn' x i (Fin.succAbove i)) (Fin.insertNth i none some i) = i
[PROOFSTEP]
simp
[GOAL]
m n : ℕ
i x : Fin (n + 1)
j : Fin n
⊢ (fun x => Option.casesOn' x i (Fin.succAbove i)) (Fin.insertNth i none some (Fin.succAbove i j)) = Fin.succAbove i j
[PROOFSTEP]
simp
[GOAL]
m n : ℕ
i : Fin (n + 1)
x : Option (Fin n)
⊢ Fin.insertNth i none some ((fun x => Option.casesOn' x i (Fin.succAbove i)) x) = x
[PROOFSTEP]
cases x
[GOAL]
case none
m n : ℕ
i : Fin (n + 1)
⊢ Fin.insertNth i none some ((fun x => Option.casesOn' x i (Fin.succAbove i)) none) = none
[PROOFSTEP]
dsimp
[GOAL]
case some
m n : ℕ
i : Fin (n + 1)
val✝ : Fin n
⊢ Fin.insertNth i none some ((fun x => Option.casesOn' x i (Fin.succAbove i)) (some val✝)) = some val✝
[PROOFSTEP]
dsimp
[GOAL]
case none
m n : ℕ
i : Fin (n + 1)
⊢ Fin.insertNth i none some i = none
[PROOFSTEP]
simp
[GOAL]
case some
m n : ℕ
i : Fin (n + 1)
val✝ : Fin n
⊢ Fin.insertNth i none some (Fin.succAbove i val✝) = some val✝
[PROOFSTEP]
simp
[GOAL]
m n : ℕ
i : Fin (n + 1)
⊢ ↑(finSuccEquiv' i) i = none
[PROOFSTEP]
simp [finSuccEquiv']
[GOAL]
m✝ n : ℕ
i : Fin (n + 1)
m : Fin n
h : Fin.castSucc m < i
⊢ ↑(finSuccEquiv' i) (Fin.castSucc m) = some m
[PROOFSTEP]
rw [← Fin.succAbove_below _ _ h, finSuccEquiv'_succAbove]
[GOAL]
m✝ n : ℕ
i : Fin (n + 1)
m : Fin n
h : i ≤ Fin.castSucc m
⊢ ↑(finSuccEquiv' i) (Fin.succ m) = some m
[PROOFSTEP]
rw [← Fin.succAbove_above _ _ h, finSuccEquiv'_succAbove]
[GOAL]
m n : ℕ
i : Fin n
⊢ ↑(finSuccEquiv' (Fin.last n)) (Fin.castSucc i) = some i
[PROOFSTEP]
rw [← Fin.succAbove_last, finSuccEquiv'_succAbove]
[GOAL]
m n : ℕ
i : Fin (n + 1)
h : i ≠ Fin.last n
⊢ ↑(finSuccEquiv' (Fin.last n)) i = some (Fin.castLT i (_ : ↑i < n))
[PROOFSTEP]
rcases Fin.exists_castSucc_eq.2 h with ⟨i, rfl⟩
[GOAL]
case intro
m n : ℕ
i : Fin n
h : Fin.castSucc i ≠ Fin.last n
⊢ ↑(finSuccEquiv' (Fin.last n)) (Fin.castSucc i) = some (Fin.castLT (Fin.castSucc i) (_ : ↑(Fin.castSucc i) < n))
[PROOFSTEP]
rw [finSuccEquiv'_last_apply_castSucc]
[GOAL]
case intro
m n : ℕ
i : Fin n
h : Fin.castSucc i ≠ Fin.last n
⊢ some i = some (Fin.castLT (Fin.castSucc i) (_ : ↑(Fin.castSucc i) < n))
[PROOFSTEP]
rfl
[GOAL]
m n : ℕ
i j : Fin (n + 1)
hi : i ≠ Fin.last n
hj : j ≠ i
⊢ ↑(finSuccEquiv' i) j = some (Fin.predAbove (Fin.castLT i (_ : ↑i < n)) j)
[PROOFSTEP]
rcases Fin.exists_succAbove_eq hj with ⟨j, rfl⟩
[GOAL]
case intro
m n : ℕ
i : Fin (n + 1)
hi : i ≠ Fin.last n
j : Fin n
hj : Fin.succAbove i j ≠ i
⊢ ↑(finSuccEquiv' i) (Fin.succAbove i j) = some (Fin.predAbove (Fin.castLT i (_ : ↑i < n)) (Fin.succAbove i j))
[PROOFSTEP]
rcases Fin.exists_castSucc_eq.2 hi with ⟨i, rfl⟩
[GOAL]
case intro.intro
m n : ℕ
j i : Fin n
hi : Fin.castSucc i ≠ Fin.last n
hj : Fin.succAbove (Fin.castSucc i) j ≠ Fin.castSucc i
⊢ ↑(finSuccEquiv' (Fin.castSucc i)) (Fin.succAbove (Fin.castSucc i) j) =
    some (Fin.predAbove (Fin.castLT (Fin.castSucc i) (_ : ↑(Fin.castSucc i) < n)) (Fin.succAbove (Fin.castSucc i) j))
[PROOFSTEP]
simp
[GOAL]
m n : ℕ
x : { x // x ≠ Fin.last n }
⊢ ↑(OrderIso.symm (finSuccAboveEquiv (Fin.last n))) x = Fin.castLT ↑x (_ : ↑↑x < n)
[PROOFSTEP]
rw [← Option.some_inj]
[GOAL]
m n : ℕ
x : { x // x ≠ Fin.last n }
⊢ some (↑(OrderIso.symm (finSuccAboveEquiv (Fin.last n))) x) = some (Fin.castLT ↑x (_ : ↑↑x < n))
[PROOFSTEP]
simpa [finSuccAboveEquiv, OrderIso.symm] using finSuccEquiv'_last_apply x.property
[GOAL]
m n : ℕ
p : Fin (n + 1)
h : p ≠ Fin.last n
x : { x // x ≠ p }
⊢ ↑(OrderIso.symm (finSuccAboveEquiv p)) x = Fin.predAbove (Fin.castLT p (_ : ↑p < n)) ↑x
[PROOFSTEP]
rw [← Option.some_inj]
[GOAL]
m n : ℕ
p : Fin (n + 1)
h : p ≠ Fin.last n
x : { x // x ≠ p }
⊢ some (↑(OrderIso.symm (finSuccAboveEquiv p)) x) = some (Fin.predAbove (Fin.castLT p (_ : ↑p < n)) ↑x)
[PROOFSTEP]
simpa [finSuccAboveEquiv, OrderIso.symm] using finSuccEquiv'_ne_last_apply h x.property
[GOAL]
m n : ℕ
⊢ ↑finSuccEquivLast (Fin.last n) = none
[PROOFSTEP]
simp [finSuccEquivLast]
[GOAL]
m n : ℕ
α : Fin (n + 1) → Type u
i : Fin (n + 1)
f : (j : Fin (n + 1)) → α j
⊢ (fun f => Fin.insertNth i f.fst f.snd) ((fun f => (f i, fun j => f (Fin.succAbove i j))) f) = f
[PROOFSTEP]
simp [Fin.insertNth_eq_iff]
[GOAL]
m n : ℕ
α : Fin (n + 1) → Type u
i : Fin (n + 1)
f : α i × ((j : Fin n) → α (Fin.succAbove i j))
⊢ (fun f => (f i, fun j => f (Fin.succAbove i j))) ((fun f => Fin.insertNth i f.fst f.snd) f) = f
[PROOFSTEP]
simp
[GOAL]
m n : ℕ
x : Fin m ⊕ Fin n
⊢ (fun i => Fin.addCases Sum.inl Sum.inr i) (Sum.elim (Fin.castAdd n) (Fin.natAdd m) x) = x
[PROOFSTEP]
cases' x with y y
[GOAL]
case inl
m n : ℕ
y : Fin m
⊢ (fun i => Fin.addCases Sum.inl Sum.inr i) (Sum.elim (Fin.castAdd n) (Fin.natAdd m) (Sum.inl y)) = Sum.inl y
[PROOFSTEP]
dsimp
[GOAL]
case inr
m n : ℕ
y : Fin n
⊢ (fun i => Fin.addCases Sum.inl Sum.inr i) (Sum.elim (Fin.castAdd n) (Fin.natAdd m) (Sum.inr y)) = Sum.inr y
[PROOFSTEP]
dsimp
[GOAL]
case inl
m n : ℕ
y : Fin m
⊢ Fin.addCases Sum.inl Sum.inr (Fin.castAdd n y) = Sum.inl y
[PROOFSTEP]
simp
[GOAL]
case inr
m n : ℕ
y : Fin n
⊢ Fin.addCases Sum.inl Sum.inr (Fin.natAdd m y) = Sum.inr y
[PROOFSTEP]
simp
[GOAL]
m n : ℕ
x : Fin (m + n)
⊢ Sum.elim (Fin.castAdd n) (Fin.natAdd m) ((fun i => Fin.addCases Sum.inl Sum.inr i) x) = x
[PROOFSTEP]
refine' Fin.addCases (fun i => _) (fun i => _) x
[GOAL]
case refine'_1
m n : ℕ
x : Fin (m + n)
i : Fin m
⊢ Sum.elim (Fin.castAdd n) (Fin.natAdd m) ((fun i => Fin.addCases Sum.inl Sum.inr i) (Fin.castAdd n i)) =
    Fin.castAdd n i
[PROOFSTEP]
simp
[GOAL]
case refine'_2
m n : ℕ
x : Fin (m + n)
i : Fin n
⊢ Sum.elim (Fin.castAdd n) (Fin.natAdd m) ((fun i => Fin.addCases Sum.inl Sum.inr i) (Fin.natAdd m i)) = Fin.natAdd m i
[PROOFSTEP]
simp
[GOAL]
m n✝ : ℕ
k : Fin m
n : ℕ
⊢ ↑finAddFlip (Fin.castAdd n k) = Fin.natAdd n k
[PROOFSTEP]
simp [finAddFlip]
[GOAL]
m✝ n : ℕ
k : Fin n
m : ℕ
⊢ ↑finAddFlip (Fin.natAdd m k) = Fin.castAdd m k
[PROOFSTEP]
simp [finAddFlip]
[GOAL]
m n k : ℕ
h : k < m
hk : optParam (k < m + n) (_ : k < m + n)
hnk : optParam (n + k < n + m) (_ : n + k < n + m)
⊢ ↑finAddFlip { val := k, isLt := hk } = { val := n + k, isLt := hnk }
[PROOFSTEP]
convert finAddFlip_apply_castAdd ⟨k, h⟩ n
[GOAL]
m n k : ℕ
h₁ : m ≤ k
h₂ : k < m + n
⊢ ↑finAddFlip { val := k, isLt := h₂ } = { val := k - m, isLt := (_ : k - m < n + m) }
[PROOFSTEP]
convert @finAddFlip_apply_natAdd n ⟨k - m, (tsub_lt_iff_right h₁).2 ?_⟩ m
[GOAL]
case h.e'_2.h.e'_6.h.e'_2
m n k : ℕ
h₁ : m ≤ k
h₂ : k < m + n
⊢ k = ↑(Fin.natAdd m { val := k - m, isLt := (_ : k - m < n) })
[PROOFSTEP]
simp [add_tsub_cancel_of_le h₁]
[GOAL]
m n k : ℕ
h₁ : m ≤ k
h₂ : k < m + n
⊢ k < n + m
[PROOFSTEP]
rwa [add_comm]
[GOAL]
m n k : ℕ
h : k < n
⊢ ↑(finRotate (n + 1)) { val := k, isLt := (_ : k < n + 1) } = { val := k + 1, isLt := (_ : Nat.succ k < Nat.succ n) }
[PROOFSTEP]
ext
[GOAL]
case h
m n k : ℕ
h : k < n
⊢ ↑(↑(finRotate (n + 1)) { val := k, isLt := (_ : k < n + 1) }) =
    ↑{ val := k + 1, isLt := (_ : Nat.succ k < Nat.succ n) }
[PROOFSTEP]
dsimp [finRotate_succ]
[GOAL]
case h
m n k : ℕ
h : k < n
⊢ ↑(↑finAddFlip { val := k, isLt := (_ : k < n + 1) }) = k + 1
[PROOFSTEP]
simp [finAddFlip_apply_mk_left h, add_comm]
[GOAL]
m n : ℕ
⊢ ↑(finRotate (n + 1)) { val := n, isLt := (_ : n < n + 1) } = { val := 0, isLt := (_ : 0 < Nat.succ n) }
[PROOFSTEP]
dsimp [finRotate_succ]
[GOAL]
m n : ℕ
⊢ ↑(finCongr (_ : 1 + n = n + 1)) (↑finAddFlip { val := n, isLt := (_ : n < n + 1) }) = 0
[PROOFSTEP]
rw [finAddFlip_apply_mk_right le_rfl]
[GOAL]
m n : ℕ
⊢ ↑(finCongr (_ : 1 + n = n + 1)) { val := n - n, isLt := (_ : n - n < 1 + n) } = 0
[PROOFSTEP]
simp
[GOAL]
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
⊢ snoc v a = fun i => cons a v (↑(finRotate (n + 1)) i)
[PROOFSTEP]
ext ⟨i, h⟩
[GOAL]
case h.mk
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
⊢ snoc v a { val := i, isLt := h } = cons a v (↑(finRotate (n + 1)) { val := i, isLt := h })
[PROOFSTEP]
by_cases h' : i < n
[GOAL]
case pos
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
h' : i < n
⊢ snoc v a { val := i, isLt := h } = cons a v (↑(finRotate (n + 1)) { val := i, isLt := h })
[PROOFSTEP]
rw [finRotate_of_lt h', Fin.snoc, Fin.cons, dif_pos h']
[GOAL]
case pos
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
h' : i < n
⊢ _root_.cast (_ : α = α) (v (castLT { val := i, isLt := h } h')) =
    cases a v { val := i + 1, isLt := (_ : Nat.succ i < Nat.succ n) }
[PROOFSTEP]
rfl
[GOAL]
case neg
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
h' : ¬i < n
⊢ snoc v a { val := i, isLt := h } = cons a v (↑(finRotate (n + 1)) { val := i, isLt := h })
[PROOFSTEP]
have h'' : n = i := by
  simp only [not_lt] at h'
  exact (Nat.eq_of_le_of_lt_succ h' h).symm
[GOAL]
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
h' : ¬i < n
⊢ n = i
[PROOFSTEP]
simp only [not_lt] at h'
[GOAL]
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
h' : n ≤ i
⊢ n = i
[PROOFSTEP]
exact (Nat.eq_of_le_of_lt_succ h' h).symm
[GOAL]
case neg
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
h' : ¬i < n
h'' : n = i
⊢ snoc v a { val := i, isLt := h } = cons a v (↑(finRotate (n + 1)) { val := i, isLt := h })
[PROOFSTEP]
subst h''
[GOAL]
case neg
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
h : n < n + 1
h' : ¬n < n
⊢ snoc v a { val := n, isLt := h } = cons a v (↑(finRotate (n + 1)) { val := n, isLt := h })
[PROOFSTEP]
rw [finRotate_last', Fin.snoc, Fin.cons, dif_neg (lt_irrefl _)]
[GOAL]
case neg
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
h : n < n + 1
h' : ¬n < n
⊢ _root_.cast (_ : α = α) a = cases a v { val := 0, isLt := (_ : 0 < Nat.succ n) }
[PROOFSTEP]
rfl
[GOAL]
m n : ℕ
i : Fin (n + 1)
⊢ ↑(finRotate (n + 1)) i = i + 1
[PROOFSTEP]
cases n
[GOAL]
case zero
m : ℕ
i : Fin (Nat.zero + 1)
⊢ ↑(finRotate (Nat.zero + 1)) i = i + 1
[PROOFSTEP]
exact @Subsingleton.elim (Fin 1) _ _ _
[GOAL]
case succ
m n✝ : ℕ
i : Fin (Nat.succ n✝ + 1)
⊢ ↑(finRotate (Nat.succ n✝ + 1)) i = i + 1
[PROOFSTEP]
rcases i.le_last.eq_or_lt with (rfl | h)
[GOAL]
case succ.inl
m n✝ : ℕ
⊢ ↑(finRotate (Nat.succ n✝ + 1)) (Fin.last (n✝ + 1)) = Fin.last (n✝ + 1) + 1
[PROOFSTEP]
simp [finRotate_last]
[GOAL]
case succ.inr
m n✝ : ℕ
i : Fin (Nat.succ n✝ + 1)
h : i < Fin.last (n✝ + 1)
⊢ ↑(finRotate (Nat.succ n✝ + 1)) i = i + 1
[PROOFSTEP]
cases i
[GOAL]
case succ.inr.mk
m n✝ val✝ : ℕ
isLt✝ : val✝ < Nat.succ n✝ + 1
h : { val := val✝, isLt := isLt✝ } < Fin.last (n✝ + 1)
⊢ ↑(finRotate (Nat.succ n✝ + 1)) { val := val✝, isLt := isLt✝ } = { val := val✝, isLt := isLt✝ } + 1
[PROOFSTEP]
simp only [Fin.lt_iff_val_lt_val, Fin.val_last, Fin.val_mk] at h
[GOAL]
case succ.inr.mk
m n✝ val✝ : ℕ
isLt✝ : val✝ < Nat.succ n✝ + 1
h : val✝ < n✝ + 1
⊢ ↑(finRotate (Nat.succ n✝ + 1)) { val := val✝, isLt := isLt✝ } = { val := val✝, isLt := isLt✝ } + 1
[PROOFSTEP]
simp [finRotate_of_lt h, Fin.eq_iff_veq, Fin.add_def, Nat.mod_eq_of_lt (Nat.succ_lt_succ h)]
[GOAL]
m n : ℕ
⊢ ↑(finRotate (Nat.succ n)) 0 = 1
[PROOFSTEP]
rw [finRotate_succ_apply, zero_add]
[GOAL]
m n : ℕ
i : Fin (Nat.succ n)
h : i ≠ Fin.last n
⊢ ↑(↑(finRotate (n + 1)) i) = ↑i + 1
[PROOFSTEP]
rw [finRotate_succ_apply]
[GOAL]
m n : ℕ
i : Fin (Nat.succ n)
h : i ≠ Fin.last n
⊢ ↑(i + 1) = ↑i + 1
[PROOFSTEP]
have : (i : ℕ) < n := Fin.val_lt_last h
[GOAL]
m n : ℕ
i : Fin (Nat.succ n)
h : i ≠ Fin.last n
this : ↑i < n
⊢ ↑(i + 1) = ↑i + 1
[PROOFSTEP]
exact Fin.val_add_one_of_lt this
[GOAL]
m n : ℕ
i : Fin (Nat.succ n)
⊢ ↑(↑(finRotate (Nat.succ n)) i) = if i = Fin.last n then 0 else ↑i + 1
[PROOFSTEP]
rw [finRotate_succ_apply, Fin.val_add_one i]
[GOAL]
m n : ℕ
x : Fin m × Fin n
⊢ ↑x.snd + n * ↑x.fst + 1 = ↑x.fst * n + ↑x.snd + 1
[PROOFSTEP]
ac_rfl
[GOAL]
m n : ℕ
x✝ : Fin m × Fin n
x : Fin m
y : Fin n
H : 0 < n
⊢ ↑y / n + ↑x = 0 + ↑x
[PROOFSTEP]
rw [Nat.div_eq_of_lt y.2]
[GOAL]
m n✝ n : ℕ
inst✝ : NeZero n
p : ℕ × Fin n
⊢ (fun a => (a / n, ↑a)) ((fun p => p.fst * n + ↑p.snd) p) = p
[PROOFSTEP]
refine' Prod.ext _ (Fin.ext <| Nat.mul_add_mod_of_lt p.2.is_lt)
[GOAL]
m n✝ n : ℕ
inst✝ : NeZero n
p : ℕ × Fin n
⊢ ((fun a => (a / n, ↑a)) ((fun p => p.fst * n + ↑p.snd) p)).fst = p.fst
[PROOFSTEP]
dsimp only
[GOAL]
m n✝ n : ℕ
inst✝ : NeZero n
p : ℕ × Fin n
⊢ (p.fst * n + ↑p.snd) / n = p.fst
[PROOFSTEP]
rw [add_comm, Nat.add_mul_div_right _ _ (NeZero.pos n), Nat.div_eq_of_lt p.2.is_lt, zero_add]
[GOAL]
m n✝ n : ℕ
inst✝ : NeZero n
a : ℤ
⊢ (fun p => p.fst * ↑n + ↑↑p.snd) ((fun a => (a / ↑n, ↑(natMod a ↑n))) a) = a
[PROOFSTEP]
simp_rw [Fin.coe_ofNat_eq_mod, Int.coe_nat_mod, Int.natMod, Int.toNat_of_nonneg (Int.emod_nonneg _ <| NeZero.ne ↑n),
  Int.emod_emod, Int.ediv_add_emod']
[GOAL]
m n✝ n : ℕ
inst✝ : NeZero n
x✝ : ℤ × Fin n
q : ℤ
r : ℕ
hrn : r < n
⊢ (fun a => (a / ↑n, ↑(natMod a ↑n))) ((fun p => p.fst * ↑n + ↑↑p.snd) (q, { val := r, isLt := hrn })) =
    (q, { val := r, isLt := hrn })
[PROOFSTEP]
simp only [Fin.val_mk, Prod.mk.inj_iff, Fin.ext_iff]
[GOAL]
m n✝ n : ℕ
inst✝ : NeZero n
x✝ : ℤ × Fin n
q : ℤ
r : ℕ
hrn : r < n
⊢ (q * ↑n + ↑r) / ↑n = q ∧ ↑↑(natMod (q * ↑n + ↑r) ↑n) = r
[PROOFSTEP]
obtain ⟨h1, h2⟩ := Int.coe_nat_nonneg r, Int.ofNat_lt.2 hrn
[GOAL]
m n✝ n : ℕ
inst✝ : NeZero n
x✝ : ℤ × Fin n
q : ℤ
r : ℕ
hrn : r < n
h1 : 0 ≤ ↑r
h2 : ↑r < ↑n
⊢ (q * ↑n + ↑r) / ↑n = q ∧ ↑↑(natMod (q * ↑n + ↑r) ↑n) = r
[PROOFSTEP]
rw [add_comm, Int.add_mul_ediv_right _ _ (NeZero.ne ↑n), Int.ediv_eq_zero_of_lt h1 h2, Int.natMod,
  Int.add_mul_emod_self, Int.emod_eq_of_lt h1 h2, Int.toNat_coe_nat]
[GOAL]
m n✝ n : ℕ
inst✝ : NeZero n
x✝ : ℤ × Fin n
q : ℤ
r : ℕ
hrn : r < n
h1 : 0 ≤ ↑r
h2 : ↑r < ↑n
⊢ 0 + q = q ∧ ↑↑r = r
[PROOFSTEP]
exact ⟨zero_add q, Fin.val_cast_of_lt hrn⟩
[GOAL]
m✝ n✝ n m : ℕ
h : n ≤ m
i : Fin n
⊢ ↑(castLE h i) < n
[PROOFSTEP]
simp
[GOAL]
m✝ n✝ n m : ℕ
h : n ≤ m
x✝ : Fin n
⊢ (fun i => { val := ↑↑i, isLt := (_ : ↑↑i < n) }) ((fun i => { val := castLE h i, property := (_ : ↑i < n) }) x✝) = x✝
[PROOFSTEP]
simp
[GOAL]
m✝ n✝ n m : ℕ
h : n ≤ m
x✝ : { i // ↑i < n }
⊢ (fun i => { val := castLE h i, property := (_ : ↑i < n) }) ((fun i => { val := ↑↑i, isLt := (_ : ↑↑i < n) }) x✝) = x✝
[PROOFSTEP]
simp
[GOAL]
m✝ n✝ n m : ℕ
h : n ≤ m
⊢ ∀ {a b : Fin n},
    ↑{ toFun := fun i => { val := castLE h i, property := (_ : ↑i < n) },
              invFun := fun i => { val := ↑↑i, isLt := (_ : ↑↑i < n) },
              left_inv := (_ : ∀ (x : Fin n), { val := ↑x, isLt := (_ : ↑x < n) } = x),
              right_inv :=
                (_ :
                  ∀ (x : { i // ↑i < n }),
                    { val := castLE h ((fun i => { val := ↑↑i, isLt := (_ : ↑↑i < n) }) x),
                        property := (_ : ↑((fun i => { val := ↑↑i, isLt := (_ : ↑↑i < n) }) x) < n) } =
                      x) }
          a ≤
        ↑{ toFun := fun i => { val := castLE h i, property := (_ : ↑i < n) },
              invFun := fun i => { val := ↑↑i, isLt := (_ : ↑↑i < n) },
              left_inv := (_ : ∀ (x : Fin n), { val := ↑x, isLt := (_ : ↑x < n) } = x),
              right_inv :=
                (_ :
                  ∀ (x : { i // ↑i < n }),
                    { val := castLE h ((fun i => { val := ↑↑i, isLt := (_ : ↑↑i < n) }) x),
                        property := (_ : ↑((fun i => { val := ↑↑i, isLt := (_ : ↑↑i < n) }) x) < n) } =
                      x) }
          b ↔
      a ≤ b
[PROOFSTEP]
simp [(strictMono_castLE h).le_iff_le]


[GOAL]
J : Type v₁
⊢ IsConnected (WidePullbackShape J)
[PROOFSTEP]
apply IsConnected.of_induct
[GOAL]
case h
J : Type v₁
⊢ ∀ (p : Set (WidePullbackShape J)),
    ?j₀ ∈ p → (∀ {j₁ j₂ : WidePullbackShape J}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)) → ∀ (j : WidePullbackShape J), j ∈ p
case j₀ J : Type v₁ ⊢ WidePullbackShape J
[PROOFSTEP]
introv hp t
[GOAL]
case h
J : Type v₁
p : Set (WidePullbackShape J)
hp : ?j₀ ∈ p
t : ∀ {j₁ j₂ : WidePullbackShape J}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)
j : WidePullbackShape J
⊢ j ∈ p
case j₀ J : Type v₁ ⊢ WidePullbackShape J
[PROOFSTEP]
cases j
[GOAL]
case h.none
J : Type v₁
p : Set (WidePullbackShape J)
hp : ?j₀ ∈ p
t : ∀ {j₁ j₂ : WidePullbackShape J}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)
⊢ none ∈ p
[PROOFSTEP]
exact hp
[GOAL]
case h.some
J : Type v₁
p : Set (WidePullbackShape J)
hp : none ∈ p
t : ∀ {j₁ j₂ : WidePullbackShape J}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)
val✝ : J
⊢ some val✝ ∈ p
[PROOFSTEP]
rwa [t (WidePullbackShape.Hom.term _)]
[GOAL]
J : Type v₁
⊢ IsConnected (WidePushoutShape J)
[PROOFSTEP]
apply IsConnected.of_induct
[GOAL]
case h
J : Type v₁
⊢ ∀ (p : Set (WidePushoutShape J)),
    ?j₀ ∈ p → (∀ {j₁ j₂ : WidePushoutShape J}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)) → ∀ (j : WidePushoutShape J), j ∈ p
case j₀ J : Type v₁ ⊢ WidePushoutShape J
[PROOFSTEP]
introv hp t
[GOAL]
case h
J : Type v₁
p : Set (WidePushoutShape J)
hp : ?j₀ ∈ p
t : ∀ {j₁ j₂ : WidePushoutShape J}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)
j : WidePushoutShape J
⊢ j ∈ p
case j₀ J : Type v₁ ⊢ WidePushoutShape J
[PROOFSTEP]
cases j
[GOAL]
case h.none
J : Type v₁
p : Set (WidePushoutShape J)
hp : ?j₀ ∈ p
t : ∀ {j₁ j₂ : WidePushoutShape J}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)
⊢ none ∈ p
[PROOFSTEP]
exact hp
[GOAL]
case h.some
J : Type v₁
p : Set (WidePushoutShape J)
hp : none ∈ p
t : ∀ {j₁ j₂ : WidePushoutShape J}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)
val✝ : J
⊢ some val✝ ∈ p
[PROOFSTEP]
rwa [← t (WidePushoutShape.Hom.init _)]
[GOAL]
⊢ IsConnected WalkingParallelPair
[PROOFSTEP]
apply IsConnected.of_induct
[GOAL]
case h
⊢ ∀ (p : Set WalkingParallelPair),
    ?j₀ ∈ p → (∀ {j₁ j₂ : WalkingParallelPair}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)) → ∀ (j : WalkingParallelPair), j ∈ p
case j₀ ⊢ WalkingParallelPair
[PROOFSTEP]
introv _ t
[GOAL]
case h
p : Set WalkingParallelPair
a✝ : ?j₀ ∈ p
t : ∀ {j₁ j₂ : WalkingParallelPair}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)
j : WalkingParallelPair
⊢ j ∈ p
case j₀ ⊢ WalkingParallelPair
[PROOFSTEP]
cases j
[GOAL]
case h.zero
p : Set WalkingParallelPair
a✝ : ?j₀ ∈ p
t : ∀ {j₁ j₂ : WalkingParallelPair}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)
⊢ WalkingParallelPair.zero ∈ p
[PROOFSTEP]
rwa [t WalkingParallelPairHom.left]
[GOAL]
case h.one
p : Set WalkingParallelPair
a✝ : WalkingParallelPair.one ∈ p
t : ∀ {j₁ j₂ : WalkingParallelPair}, (j₁ ⟶ j₂) → (j₁ ∈ p ↔ j₂ ∈ p)
⊢ WalkingParallelPair.one ∈ p
[PROOFSTEP]
assumption
[GOAL]
C : Type u₂
inst✝³ : Category.{v₂, u₂} C
inst✝² : HasBinaryProducts C
J : Type v₂
inst✝¹ : SmallCategory J
inst✝ : IsConnected J
X : C
K : J ⥤ C
c : Cone K
l : IsLimit c
s : Cone (K ⋙ prod.functor.obj X)
j : J
⊢ (fun s => prod.lift (NatTrans.app s.π (Classical.arbitrary J) ≫ prod.fst) (IsLimit.lift l (forgetCone s))) s ≫
      NatTrans.app ((prod.functor.obj X).mapCone c).π j =
    NatTrans.app s.π j
[PROOFSTEP]
apply prod.hom_ext
[GOAL]
case h₁
C : Type u₂
inst✝³ : Category.{v₂, u₂} C
inst✝² : HasBinaryProducts C
J : Type v₂
inst✝¹ : SmallCategory J
inst✝ : IsConnected J
X : C
K : J ⥤ C
c : Cone K
l : IsLimit c
s : Cone (K ⋙ prod.functor.obj X)
j : J
⊢ ((fun s => prod.lift (NatTrans.app s.π (Classical.arbitrary J) ≫ prod.fst) (IsLimit.lift l (forgetCone s))) s ≫
        NatTrans.app ((prod.functor.obj X).mapCone c).π j) ≫
      prod.fst =
    NatTrans.app s.π j ≫ prod.fst
[PROOFSTEP]
erw [assoc, limMap_π, comp_id, limit.lift_π]
[GOAL]
case h₁
C : Type u₂
inst✝³ : Category.{v₂, u₂} C
inst✝² : HasBinaryProducts C
J : Type v₂
inst✝¹ : SmallCategory J
inst✝ : IsConnected J
X : C
K : J ⥤ C
c : Cone K
l : IsLimit c
s : Cone (K ⋙ prod.functor.obj X)
j : J
⊢ NatTrans.app (BinaryFan.mk (NatTrans.app s.π (Classical.arbitrary J) ≫ prod.fst) (IsLimit.lift l (forgetCone s))).π
      { as := WalkingPair.left } =
    NatTrans.app s.π j ≫ prod.fst
[PROOFSTEP]
exact (nat_trans_from_is_connected (s.π ≫ γ₁ X) j (Classical.arbitrary _)).symm
[GOAL]
case h₂
C : Type u₂
inst✝³ : Category.{v₂, u₂} C
inst✝² : HasBinaryProducts C
J : Type v₂
inst✝¹ : SmallCategory J
inst✝ : IsConnected J
X : C
K : J ⥤ C
c : Cone K
l : IsLimit c
s : Cone (K ⋙ prod.functor.obj X)
j : J
⊢ ((fun s => prod.lift (NatTrans.app s.π (Classical.arbitrary J) ≫ prod.fst) (IsLimit.lift l (forgetCone s))) s ≫
        NatTrans.app ((prod.functor.obj X).mapCone c).π j) ≫
      prod.snd =
    NatTrans.app s.π j ≫ prod.snd
[PROOFSTEP]
simp [← l.fac (forgetCone s) j]
[GOAL]
C : Type u₂
inst✝³ : Category.{v₂, u₂} C
inst✝² : HasBinaryProducts C
J : Type v₂
inst✝¹ : SmallCategory J
inst✝ : IsConnected J
X : C
K : J ⥤ C
c : Cone K
l : IsLimit c
s : Cone (K ⋙ prod.functor.obj X)
m : s.pt ⟶ ((prod.functor.obj X).mapCone c).pt
L : ∀ (j : J), m ≫ NatTrans.app ((prod.functor.obj X).mapCone c).π j = NatTrans.app s.π j
⊢ m = (fun s => prod.lift (NatTrans.app s.π (Classical.arbitrary J) ≫ prod.fst) (IsLimit.lift l (forgetCone s))) s
[PROOFSTEP]
apply prod.hom_ext
[GOAL]
case h₁
C : Type u₂
inst✝³ : Category.{v₂, u₂} C
inst✝² : HasBinaryProducts C
J : Type v₂
inst✝¹ : SmallCategory J
inst✝ : IsConnected J
X : C
K : J ⥤ C
c : Cone K
l : IsLimit c
s : Cone (K ⋙ prod.functor.obj X)
m : s.pt ⟶ ((prod.functor.obj X).mapCone c).pt
L : ∀ (j : J), m ≫ NatTrans.app ((prod.functor.obj X).mapCone c).π j = NatTrans.app s.π j
⊢ m ≫ prod.fst =
    (fun s => prod.lift (NatTrans.app s.π (Classical.arbitrary J) ≫ prod.fst) (IsLimit.lift l (forgetCone s))) s ≫
      prod.fst
[PROOFSTEP]
erw [limit.lift_π, ← L (Classical.arbitrary J), assoc, limMap_π, comp_id]
[GOAL]
case h₁
C : Type u₂
inst✝³ : Category.{v₂, u₂} C
inst✝² : HasBinaryProducts C
J : Type v₂
inst✝¹ : SmallCategory J
inst✝ : IsConnected J
X : C
K : J ⥤ C
c : Cone K
l : IsLimit c
s : Cone (K ⋙ prod.functor.obj X)
m : s.pt ⟶ ((prod.functor.obj X).mapCone c).pt
L : ∀ (j : J), m ≫ NatTrans.app ((prod.functor.obj X).mapCone c).π j = NatTrans.app s.π j
⊢ m ≫ prod.fst =
    NatTrans.app (BinaryFan.mk (m ≫ limit.π (pair X c.pt) { as := WalkingPair.left }) (IsLimit.lift l (forgetCone s))).π
      { as := WalkingPair.left }
[PROOFSTEP]
rfl
[GOAL]
case h₂
C : Type u₂
inst✝³ : Category.{v₂, u₂} C
inst✝² : HasBinaryProducts C
J : Type v₂
inst✝¹ : SmallCategory J
inst✝ : IsConnected J
X : C
K : J ⥤ C
c : Cone K
l : IsLimit c
s : Cone (K ⋙ prod.functor.obj X)
m : s.pt ⟶ ((prod.functor.obj X).mapCone c).pt
L : ∀ (j : J), m ≫ NatTrans.app ((prod.functor.obj X).mapCone c).π j = NatTrans.app s.π j
⊢ m ≫ prod.snd =
    (fun s => prod.lift (NatTrans.app s.π (Classical.arbitrary J) ≫ prod.fst) (IsLimit.lift l (forgetCone s))) s ≫
      prod.snd
[PROOFSTEP]
rw [limit.lift_π]
[GOAL]
case h₂
C : Type u₂
inst✝³ : Category.{v₂, u₂} C
inst✝² : HasBinaryProducts C
J : Type v₂
inst✝¹ : SmallCategory J
inst✝ : IsConnected J
X : C
K : J ⥤ C
c : Cone K
l : IsLimit c
s : Cone (K ⋙ prod.functor.obj X)
m : s.pt ⟶ ((prod.functor.obj X).mapCone c).pt
L : ∀ (j : J), m ≫ NatTrans.app ((prod.functor.obj X).mapCone c).π j = NatTrans.app s.π j
⊢ m ≫ prod.snd =
    NatTrans.app (BinaryFan.mk (NatTrans.app s.π (Classical.arbitrary J) ≫ prod.fst) (IsLimit.lift l (forgetCone s))).π
      { as := WalkingPair.right }
[PROOFSTEP]
apply l.uniq (forgetCone s)
[GOAL]
case h₂.x
C : Type u₂
inst✝³ : Category.{v₂, u₂} C
inst✝² : HasBinaryProducts C
J : Type v₂
inst✝¹ : SmallCategory J
inst✝ : IsConnected J
X : C
K : J ⥤ C
c : Cone K
l : IsLimit c
s : Cone (K ⋙ prod.functor.obj X)
m : s.pt ⟶ ((prod.functor.obj X).mapCone c).pt
L : ∀ (j : J), m ≫ NatTrans.app ((prod.functor.obj X).mapCone c).π j = NatTrans.app s.π j
⊢ ∀ (j : J), (m ≫ prod.snd) ≫ NatTrans.app c.π j = NatTrans.app (forgetCone s).π j
[PROOFSTEP]
intro j
[GOAL]
case h₂.x
C : Type u₂
inst✝³ : Category.{v₂, u₂} C
inst✝² : HasBinaryProducts C
J : Type v₂
inst✝¹ : SmallCategory J
inst✝ : IsConnected J
X : C
K : J ⥤ C
c : Cone K
l : IsLimit c
s : Cone (K ⋙ prod.functor.obj X)
m : s.pt ⟶ ((prod.functor.obj X).mapCone c).pt
L : ∀ (j : J), m ≫ NatTrans.app ((prod.functor.obj X).mapCone c).π j = NatTrans.app s.π j
j : J
⊢ (m ≫ prod.snd) ≫ NatTrans.app c.π j = NatTrans.app (forgetCone s).π j
[PROOFSTEP]
simp [← L j]


[GOAL]
α : Type u_1
inst✝ : Encodable α
l : List α
⊢ decodeList (encodeList l) = some l
[PROOFSTEP]
induction' l with a l IH
[GOAL]
case nil
α : Type u_1
inst✝ : Encodable α
⊢ decodeList (encodeList []) = some []
[PROOFSTEP]
simp [encodeList, decodeList, unpair_pair, encodek, *]
[GOAL]
case cons
α : Type u_1
inst✝ : Encodable α
a : α
l : List α
IH : decodeList (encodeList l) = some l
⊢ decodeList (encodeList (a :: l)) = some (a :: l)
[PROOFSTEP]
simp [encodeList, decodeList, unpair_pair, encodek, *]
[GOAL]
α✝ : Type u_1
inst✝¹ : Encodable α✝
α : Type u_2
inst✝ : Countable α
⊢ Countable (List α)
[PROOFSTEP]
haveI := Encodable.ofCountable α
[GOAL]
α✝ : Type u_1
inst✝¹ : Encodable α✝
α : Type u_2
inst✝ : Countable α
this : Encodable α
⊢ Countable (List α)
[PROOFSTEP]
infer_instance
[GOAL]
α : Type u_1
inst✝ : Encodable α
⊢ decodeList 0 = some []
[PROOFSTEP]
rw [decodeList]
[GOAL]
α : Type u_1
inst✝ : Encodable α
v : ℕ
⊢ decodeList (succ v) = Seq.seq ((fun x x_1 => x :: x_1) <$> decode (unpair v).fst) fun x => decode (unpair v).snd
[PROOFSTEP]
cases' e : unpair v with v₁ v₂
[GOAL]
case mk
α : Type u_1
inst✝ : Encodable α
v v₁ v₂ : ℕ
e : unpair v = (v₁, v₂)
⊢ decodeList (succ v) = Seq.seq ((fun x x_1 => x :: x_1) <$> decode (v₁, v₂).fst) fun x => decode (v₁, v₂).snd
[PROOFSTEP]
simp [decodeList, e]
[GOAL]
case mk
α : Type u_1
inst✝ : Encodable α
v v₁ v₂ : ℕ
e : unpair v = (v₁, v₂)
⊢ (Seq.seq (Option.map (fun x x_1 => x :: x_1) (decode v₁)) fun x => decodeList v₂) =
    Seq.seq (Option.map (fun x x_1 => x :: x_1) (decode v₁)) fun x => decode v₂
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
inst✝ : Encodable α
a b : α
⊢ Decidable (Encodable.enle a b)
[PROOFSTEP]
unfold enle Order.Preimage
[GOAL]
α : Type u_1
inst✝ : Encodable α
a b : α
⊢ Decidable ((fun x x_1 => x ≤ x_1) (encode a) (encode b))
[PROOFSTEP]
infer_instance
[GOAL]
α : Type u_1
inst✝ : Encodable α
s : Multiset α
⊢ decodeMultiset (encodeMultiset s) = some s
[PROOFSTEP]
simp [encodeMultiset, decodeMultiset, encodek]
[GOAL]
α✝ : Type u_1
α : Type u_2
inst✝ : Fintype α
⊢ Encodable α
[PROOFSTEP]
classical exact (Fintype.truncEncodable α).out
[GOAL]
α✝ : Type u_1
α : Type u_2
inst✝ : Fintype α
⊢ Encodable α
[PROOFSTEP]
exact (Fintype.truncEncodable α).out
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
⊢ ∃ a, a ∈ decodeList 0 ∧ encodeList a = 0
[PROOFSTEP]
rw [decodeList]
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
⊢ ∃ a, a ∈ some [] ∧ encodeList a = 0
[PROOFSTEP]
exact ⟨_, rfl, rfl⟩
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
v : ℕ
⊢ ∃ a, a ∈ decodeList (succ v) ∧ encodeList a = succ v
[PROOFSTEP]
cases' e : unpair v with v₁ v₂
[GOAL]
case mk
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
v v₁ v₂ : ℕ
e : unpair v = (v₁, v₂)
⊢ ∃ a, a ∈ decodeList (succ v) ∧ encodeList a = succ v
[PROOFSTEP]
have h := unpair_right_le v
[GOAL]
case mk
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
v v₁ v₂ : ℕ
e : unpair v = (v₁, v₂)
h : (unpair v).snd ≤ v
⊢ ∃ a, a ∈ decodeList (succ v) ∧ encodeList a = succ v
[PROOFSTEP]
rw [e] at h
[GOAL]
case mk
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
v v₁ v₂ : ℕ
e : unpair v = (v₁, v₂)
h : (v₁, v₂).snd ≤ v
⊢ ∃ a, a ∈ decodeList (succ v) ∧ encodeList a = succ v
[PROOFSTEP]
rcases have : v₂ < succ v := lt_succ_of_le h
  denumerable_list_aux v₂ with
  ⟨a, h₁, h₂⟩
[GOAL]
case mk.intro.intro
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
v v₁ v₂ : ℕ
e : unpair v = (v₁, v₂)
h : (v₁, v₂).snd ≤ v
a : List α
h₁ : a ∈ decodeList v₂
h₂ : encodeList a = v₂
⊢ ∃ a, a ∈ decodeList (succ v) ∧ encodeList a = succ v
[PROOFSTEP]
rw [Option.mem_def] at h₁
[GOAL]
case mk.intro.intro
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
v v₁ v₂ : ℕ
e : unpair v = (v₁, v₂)
h : (v₁, v₂).snd ≤ v
a : List α
h₁ : decodeList v₂ = some a
h₂ : encodeList a = v₂
⊢ ∃ a, a ∈ decodeList (succ v) ∧ encodeList a = succ v
[PROOFSTEP]
use ofNat α v₁ :: a
[GOAL]
case h
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
v v₁ v₂ : ℕ
e : unpair v = (v₁, v₂)
h : (v₁, v₂).snd ≤ v
a : List α
h₁ : decodeList v₂ = some a
h₂ : encodeList a = v₂
⊢ ofNat α v₁ :: a ∈ decodeList (succ v) ∧ encodeList (ofNat α v₁ :: a) = succ v
[PROOFSTEP]
simp [decodeList, e, h₂, h₁, encodeList, pair_unpair' e]
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
⊢ ofNat (List α) 0 = []
[PROOFSTEP]
rw [← @encode_list_nil α, ofNat_encode]
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
v : ℕ
⊢ decodeList (succ v) = some (ofNat α (unpair v).fst :: ofNat (List α) (unpair v).snd)
[PROOFSTEP]
cases' e : unpair v with v₁ v₂
[GOAL]
case mk
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
v v₁ v₂ : ℕ
e : unpair v = (v₁, v₂)
⊢ decodeList (succ v) = some (ofNat α (v₁, v₂).fst :: ofNat (List α) (v₁, v₂).snd)
[PROOFSTEP]
simp [decodeList, e]
[GOAL]
case mk
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
v v₁ v₂ : ℕ
e : unpair v = (v₁, v₂)
⊢ (Seq.seq (some fun x => ofNat α v₁ :: x) fun x => decodeList v₂) = some (ofNat α v₁ :: ofNat (List α) v₂)
[PROOFSTEP]
rw [show decodeList v₂ = decode (α := List α) v₂ from rfl, decode_eq_ofNat, Option.seq_some, Option.some.injEq]
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
m : ℕ
l : List ℕ
n : ℕ
⊢ lower (raise (m :: l) n) n = m :: l
[PROOFSTEP]
rw [raise, lower, add_tsub_cancel_right, lower_raise l]
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
m : ℕ
l : List ℕ
n : ℕ
h : Sorted (fun x x_1 => x ≤ x_1) (n :: m :: l)
⊢ raise (lower (m :: l) n) n = m :: l
[PROOFSTEP]
have : n ≤ m := List.rel_of_sorted_cons h _ (l.mem_cons_self _)
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
m : ℕ
l : List ℕ
n : ℕ
h : Sorted (fun x x_1 => x ≤ x_1) (n :: m :: l)
this : n ≤ m
⊢ raise (lower (m :: l) n) n = m :: l
[PROOFSTEP]
simp [raise, lower, tsub_add_cancel_of_le this, raise_lower h.of_cons]
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
s : Multiset α
⊢ (fun n => Multiset.map (ofNat α) ↑(raise (ofNat (List ℕ) n) 0))
      ((fun s => encode (lower (Multiset.sort (fun x x_1 => x ≤ x_1) (Multiset.map encode s)) 0)) s) =
    s
[PROOFSTEP]
have := raise_lower (List.sorted_cons.2 ⟨fun n _ => Nat.zero_le n, (s.map encode).sort_sorted _⟩)
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
s : Multiset α
this :
  raise (lower (Multiset.sort (fun x x_1 => x ≤ x_1) (Multiset.map encode s)) 0) 0 =
    Multiset.sort (fun x x_1 => x ≤ x_1) (Multiset.map encode s)
⊢ (fun n => Multiset.map (ofNat α) ↑(raise (ofNat (List ℕ) n) 0))
      ((fun s => encode (lower (Multiset.sort (fun x x_1 => x ≤ x_1) (Multiset.map encode s)) 0)) s) =
    s
[PROOFSTEP]
simp [-Multiset.coe_map, this]
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
n : ℕ
⊢ (fun s => encode (lower (Multiset.sort (fun x x_1 => x ≤ x_1) (Multiset.map encode s)) 0))
      ((fun n => Multiset.map (ofNat α) ↑(raise (ofNat (List ℕ) n) 0)) n) =
    n
[PROOFSTEP]
simp [-Multiset.coe_map, List.mergeSort_eq_self _ (raise_sorted _ _), lower_raise]
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
m : ℕ
l : List ℕ
n : ℕ
⊢ lower' (raise' (m :: l) n) n = m :: l
[PROOFSTEP]
simp [raise', lower', add_tsub_cancel_right, lower_raise']
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
m : ℕ
l : List ℕ
n : ℕ
h₁ : ∀ (m_1 : ℕ), m_1 ∈ m :: l → n ≤ m_1
h₂ : Sorted (fun x x_1 => x < x_1) (m :: l)
⊢ raise' (lower' (m :: l) n) n = m :: l
[PROOFSTEP]
have : n ≤ m := h₁ _ (l.mem_cons_self _)
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
m : ℕ
l : List ℕ
n : ℕ
h₁ : ∀ (m_1 : ℕ), m_1 ∈ m :: l → n ≤ m_1
h₂ : Sorted (fun x x_1 => x < x_1) (m :: l)
this : n ≤ m
⊢ raise' (lower' (m :: l) n) n = m :: l
[PROOFSTEP]
simp [raise', lower', tsub_add_cancel_of_le this, raise_lower' (List.rel_of_sorted_cons h₂ : ∀ a ∈ l, m < a) h₂.of_cons]
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
s : Finset α
⊢ ((fun n => Finset.map (Equiv.toEmbedding (eqv α).symm) (raise'Finset (ofNat (List ℕ) n) 0))
        ((fun s => encode (lower' (Finset.sort (fun x x_1 => x ≤ x_1) (Finset.map (Equiv.toEmbedding (eqv α)) s)) 0))
          s)).val =
    s.val
[PROOFSTEP]
simp [-Multiset.coe_map, raise'Finset, raise_lower' (fun n _ => Nat.zero_le n) (Finset.sort_sorted_lt _)]
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : Denumerable α
inst✝ : Denumerable β
n : ℕ
⊢ (fun s => encode (lower' (Finset.sort (fun x x_1 => x ≤ x_1) (Finset.map (Equiv.toEmbedding (eqv α)) s)) 0))
      ((fun n => Finset.map (Equiv.toEmbedding (eqv α).symm) (raise'Finset (ofNat (List ℕ) n) 0)) n) =
    n
[PROOFSTEP]
simp [-Multiset.coe_map, Finset.map, raise'Finset, Finset.sort,
  List.mergeSort_eq_self (· ≤ ·) ((raise'_sorted _ _).imp (@le_of_lt _ _)), lower_raise']
[GOAL]
u : List Unit
⊢ length ((fun n => replicate n ()) (length u)) = length u
[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' 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