Theorem: LinearMap.isCompl_range_inl_inr
File: Mathlib/LinearAlgebra/Prod.lean

tactic: constructor
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.179116
M₆ : Type ?u.179119
inst✝⁸ : Semiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R M
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Module R M₄
⊢ IsCompl (range (inl R M M₂)) (range (inr R M M₂))

tactic: rw [disjoint_def]
state_before: case disjoint
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.179116
M₆ : Type ?u.179119
inst✝⁸ : Semiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R M
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Module R M₄
⊢ Disjoint (range (inl R M M₂)) (range (inr R M M₂))

tactic: rintro ⟨_, _⟩ ⟨x, hx⟩ ⟨y, hy⟩
state_before: case disjoint
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.179116
M₆ : Type ?u.179119
inst✝⁸ : Semiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R M
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Module R M₄
⊢ ∀ (x : M × M₂), x ∈ range (inl R M M₂) → x ∈ range (inr R M M₂) → x = 0

tactic: simp only [Prod.ext_iff, inl_apply, inr_apply, mem_bot] at hx hy⊢
state_before: case disjoint.mk.intro.intro
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.179116
M₆ : Type ?u.179119
inst✝⁸ : Semiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R M
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Module R M₄
fst✝ : M
snd✝ : M₂
x : M
hx : ↑(inl R M M₂) x = (fst✝, snd✝)
y : M₂
hy : ↑(inr R M M₂) y = (fst✝, snd✝)
⊢ (fst✝, snd✝) = 0

tactic: exact ⟨hy.1.symm, hx.2.symm⟩
state_before: case disjoint.mk.intro.intro
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.179116
M₆ : Type ?u.179119
inst✝⁸ : Semiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R M
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Module R M₄
fst✝ : M
snd✝ : M₂
x : M
y : M₂
hx : x = fst✝ ∧ 0 = snd✝
hy : 0 = fst✝ ∧ y = snd✝
⊢ fst✝ = 0.fst ∧ snd✝ = 0.snd

tactic: rw [codisjoint_iff_le_sup]
state_before: case codisjoint
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.179116
M₆ : Type ?u.179119
inst✝⁸ : Semiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R M
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Module R M₄
⊢ Codisjoint (range (inl R M M₂)) (range (inr R M M₂))

tactic: rintro ⟨x, y⟩ -
state_before: case codisjoint
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.179116
M₆ : Type ?u.179119
inst✝⁸ : Semiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R M
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Module R M₄
⊢ ⊤ ≤ range (inl R M M₂) ⊔ range (inr R M M₂)

tactic: simp only [mem_sup, mem_range, exists_prop]
state_before: case codisjoint.mk
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.179116
M₆ : Type ?u.179119
inst✝⁸ : Semiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R M
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Module R M₄
x : M
y : M₂
⊢ (x, y) ∈ range (inl R M M₂) ⊔ range (inr R M M₂)

tactic: refine' ⟨(x, 0), ⟨x, rfl⟩, (0, y), ⟨y, rfl⟩, _⟩
state_before: case codisjoint.mk
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.179116
M₆ : Type ?u.179119
inst✝⁸ : Semiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R M
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Module R M₄
x : M
y : M₂
⊢ ∃ y_1, (∃ y, ↑(inl R M M₂) y = y_1) ∧ ∃ z, (∃ y, ↑(inr R M M₂) y = z) ∧ y_1 + z = (x, y)

tactic: simp
state_before: case codisjoint.mk
R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type ?u.179116
M₆ : Type ?u.179119
inst✝⁸ : Semiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R M
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Module R M₄
x : M
y : M₂
⊢ (x, 0) + (0, y) = (x, y)