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

tactic: induction' n with n ih
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_1
M₆ : Type u_2
inst✝⁴ : Ring R
N : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : M × N →ₗ[R] M
i : Injective ⇑f
n : ℕ
⊢ Disjoint (f.tailings i n) (OrderDual.ofDual ((f.tunnel i) (n + 1)))
state_after: case zero
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_1
M₆ : Type u_2
inst✝⁴ : Ring R
N : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : M × N →ₗ[R] M
i : Injective ⇑f
⊢ Disjoint (f.tailings i 0) (OrderDual.ofDual ((f.tunnel i) (0 + 1)))

case succ
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_1
M₆ : Type u_2
inst✝⁴ : Ring R
N : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : M × N →ₗ[R] M
i : Injective ⇑f
n : ℕ
ih : Disjoint (f.tailings i n) (OrderDual.ofDual ((f.tunnel i) (n + 1)))
⊢ Disjoint (f.tailings i (n + 1)) (OrderDual.ofDual ((f.tunnel i) (n + 1 + 1)))

tactic: simp only [tailings_zero]
state_before: case zero
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_1
M₆ : Type u_2
inst✝⁴ : Ring R
N : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : M × N →ₗ[R] M
i : Injective ⇑f
⊢ Disjoint (f.tailings i 0) (OrderDual.ofDual ((f.tunnel i) (0 + 1)))
state_after: case zero
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_1
M₆ : Type u_2
inst✝⁴ : Ring R
N : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : M × N →ₗ[R] M
i : Injective ⇑f
⊢ Disjoint (f.tailing i 0) (OrderDual.ofDual ((f.tunnel i) (0 + 1)))

tactic: apply tailing_disjoint_tunnel_succ
state_before: case zero
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_1
M₆ : Type u_2
inst✝⁴ : Ring R
N : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : M × N →ₗ[R] M
i : Injective ⇑f
⊢ Disjoint (f.tailing i 0) (OrderDual.ofDual ((f.tunnel i) (0 + 1)))
state_after: no goals

tactic: simp only [tailings_succ]
state_before: case succ
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_1
M₆ : Type u_2
inst✝⁴ : Ring R
N : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : M × N →ₗ[R] M
i : Injective ⇑f
n : ℕ
ih : Disjoint (f.tailings i n) (OrderDual.ofDual ((f.tunnel i) (n + 1)))
⊢ Disjoint (f.tailings i (n + 1)) (OrderDual.ofDual ((f.tunnel i) (n + 1 + 1)))
state_after: case succ
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_1
M₆ : Type u_2
inst✝⁴ : Ring R
N : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : M × N →ₗ[R] M
i : Injective ⇑f
n : ℕ
ih : Disjoint (f.tailings i n) (OrderDual.ofDual ((f.tunnel i) (n + 1)))
⊢ Disjoint (f.tailings i n ⊔ f.tailing i (n + 1)) (OrderDual.ofDual ((f.tunnel i) (n + 1 + 1)))

tactic: refine Disjoint.disjoint_sup_left_of_disjoint_sup_right ?_ ?_
state_before: case succ
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_1
M₆ : Type u_2
inst✝⁴ : Ring R
N : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : M × N →ₗ[R] M
i : Injective ⇑f
n : ℕ
ih : Disjoint (f.tailings i n) (OrderDual.ofDual ((f.tunnel i) (n + 1)))
⊢ Disjoint (f.tailings i n ⊔ f.tailing i (n + 1)) (OrderDual.ofDual ((f.tunnel i) (n + 1 + 1)))
state_after: case succ.refine_1
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_1
M₆ : Type u_2
inst✝⁴ : Ring R
N : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : M × N →ₗ[R] M
i : Injective ⇑f
n : ℕ
ih : Disjoint (f.tailings i n) (OrderDual.ofDual ((f.tunnel i) (n + 1)))
⊢ Disjoint (f.tailing i (n + 1)) (OrderDual.ofDual ((f.tunnel i) (n + 1 + 1)))

case succ.refine_2
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_1
M₆ : Type u_2
inst✝⁴ : Ring R
N : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : M × N →ₗ[R] M
i : Injective ⇑f
n : ℕ
ih : Disjoint (f.tailings i n) (OrderDual.ofDual ((f.tunnel i) (n + 1)))
⊢ Disjoint (f.tailings i n) (f.tailing i (n + 1) ⊔ OrderDual.ofDual ((f.tunnel i) (n + 1 + 1)))

tactic: apply tailing_disjoint_tunnel_succ
state_before: case succ.refine_1
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_1
M₆ : Type u_2
inst✝⁴ : Ring R
N : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : M × N →ₗ[R] M
i : Injective ⇑f
n : ℕ
ih : Disjoint (f.tailings i n) (OrderDual.ofDual ((f.tunnel i) (n + 1)))
⊢ Disjoint (f.tailing i (n + 1)) (OrderDual.ofDual ((f.tunnel i) (n + 1 + 1)))
state_after: no goals

tactic: apply Disjoint.mono_right _ ih
state_before: case succ.refine_2
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_1
M₆ : Type u_2
inst✝⁴ : Ring R
N : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : M × N →ₗ[R] M
i : Injective ⇑f
n : ℕ
ih : Disjoint (f.tailings i n) (OrderDual.ofDual ((f.tunnel i) (n + 1)))
⊢ Disjoint (f.tailings i n) (f.tailing i (n + 1) ⊔ OrderDual.ofDual ((f.tunnel i) (n + 1 + 1)))
state_after: 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_1
M₆ : Type u_2
inst✝⁴ : Ring R
N : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : M × N →ₗ[R] M
i : Injective ⇑f
n : ℕ
ih : Disjoint (f.tailings i n) (OrderDual.ofDual ((f.tunnel i) (n + 1)))
⊢ f.tailing i (n + 1) ⊔ OrderDual.ofDual ((f.tunnel i) (n + 1 + 1)) ≤ OrderDual.ofDual ((f.tunnel i) (n + 1))

tactic: apply tailing_sup_tunnel_succ_le_tunnel
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_1
M₆ : Type u_2
inst✝⁴ : Ring R
N : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : M × N →ₗ[R] M
i : Injective ⇑f
n : ℕ
ih : Disjoint (f.tailings i n) (OrderDual.ofDual ((f.tunnel i) (n + 1)))
⊢ f.tailing i (n + 1) ⊔ OrderDual.ofDual ((f.tunnel i) (n + 1 + 1)) ≤ OrderDual.ofDual ((f.tunnel i) (n + 1))
state_after: no goals