Theorem: algebra.lex_le_trans (Diploma/Order/MonomialOrder.lean)

State before:
n : ℕ
⊢ ∀ (a b c : Variables n order.Lex), Order.lex a b → Order.lex b c → Order.lex a c
Tactic:
intros v₁ v₂ v₃ h₁ h₂
State after:
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
⊢ Order.lex v₁ v₃

State before:
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
⊢ Order.lex v₁ v₃
Tactic:
exact aux n v₁ v₂ v₃ h₁ h₂
State after:
no goals

State before:
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
ab : Order.lex_impl a b
bc : Order.lex_impl b c
⊢ Order.lex_impl a c
Tactic:
match a, b, c with
  | ⟨[], p⟩,    ⟨[], q⟩,    ⟨[], l⟩    => rw [Order.lex_impl]
                                          split
                                          simp
                                          simp at *
  | ⟨x::xs, p⟩, ⟨y::ys, q⟩, ⟨z::zs, l⟩ => rw [Order.lex_impl] 
                                          rw [Order.lex_impl] at ab bc
                                          split at ab
                                          split at bc
                                          split <;> simp at *
                                          split at bc
                                          split
                                          repeat (first 
                                            | rename_i heq₁ heq₂ _ _ _ _ _ _ _ _ heq₃ heq₄ _ _
                                              rw [heq₂] at heq₃
                                              simp at heq₃ 
                                            | split)
                                          split at ab
                                          split at bc
                                          rename_i heq₁ heq₂ _ _ _ _ _ _ heq₃ heq₄
                                          rw [heq₂] at heq₃
                                          simp at heq₃
                                          split at bc
                                          apply aux (m-1) (tail ⟨x::xs, p⟩) (tail ⟨y::ys, q⟩) (tail ⟨z::zs, l⟩) ab bc
                                          simp at *
                                          rename_i eq₁ eq₂ _ _ _ _ _  _ _ _ hneq heq₁ heq₂ heq₃ heq₄ 
                                          have x_cross_one_eq_x := Eq.symm (heq₁.left)
                                          have y_cross_one_eq_y := Eq.symm (heq₂.left)
                                          have x_cross_eq_x     := Eq.symm (heq₃.left)
                                          have y_cross_eq_x     := Eq.symm (heq₄.left)
                                          rw [x_cross_eq_x, y_cross_eq_x] at hneq
                                          rw [x_cross_one_eq_x, y_cross_one_eq_y] at eq₂
                                          rw [eq₂] at eq₁
                                          contradiction
                                          split at bc
                                          simp at *
                                          repeat (first | rename_i heq₁ heq₂ eq₁ neq₁ _ _ _ _ _ _ _ _ heq₃ heq₄ eq₂
                                                          simp at heq₁ heq₂ heq₃ heq₄
                                                          have x_cross_one_eq_x := Eq.symm (heq₁.left)
                                                          have y_cross_one_eq_y := Eq.symm (heq₂.left)
                                                          have x_cross_eq_x     := Eq.symm (heq₃.left)
                                                          have y_cross_eq_x     := Eq.symm (heq₄.left)
                                                          rw [x_cross_eq_x, y_cross_eq_x] at eq₂
                                                          rw [x_cross_one_eq_x, y_cross_one_eq_y] at neq₁
                                                          rw [eq₂] at neq₁
                                                          contradiction
                                                        | split at bc)
                                          rename_i heq₁ heq₂ eq₁ neq₁ _ _ _ _ _ _ _ _ heq₃ heq₄ neq₂ 
                                          simp at heq₁ heq₂ heq₃ heq₄
                                          have x_cross_one_eq_x := Eq.symm (heq₁.left)
                                          have y_cross_one_eq_y := Eq.symm (heq₂.left)
                                          have x_cross_eq_x     := Eq.symm (heq₃.left)
                                          have y_cross_eq_x     := Eq.symm (heq₄.left)
                                          rw [x_cross_eq_x, y_cross_eq_x] at neq₂ bc
                                          rw [x_cross_one_eq_x, y_cross_one_eq_y] at neq₁ ab
                                          rw [eq₁] at ab
                                          have eq_eq := Nat.le_antisymm bc ab
                                          contradiction 
                                          split at ab
                                          split at bc
                                          simp at *
                                          split at bc
                                          simp at *
                                          rename_i neq₁ eq₁ _ _ _ _ _ _ _ _ eq₂ heq₁ heq₂ heq₃ heq₄
                                          have x_cross_one_eq_x := Eq.symm (heq₁.left)
                                          have y_cross_one_eq_y := Eq.symm (heq₂.left)
                                          have x_cross_eq_x     := Eq.symm (heq₃.left)
                                          have y_cross_eq_x     := Eq.symm (heq₄.left)
                                          rw [x_cross_one_eq_x, y_cross_one_eq_y] at eq₁
                                          rw [x_cross_eq_x, y_cross_eq_x] at eq₂
                                          rw [eq₂] at eq₁
                                          contradiction
                                          repeat (first | simp at *
                                                          rename_i neq₁ eq₁ _ _ _ _ _ _ _ _ eq₂ heq₁ heq₂ heq₃ heq₄
                                                          have x_cross_one_eq_x := Eq.symm (heq₁.left)
                                                          have y_cross_one_eq_y := Eq.symm (heq₂.left)
                                                          have x_cross_eq_x     := Eq.symm (heq₃.left)
                                                          have y_cross_eq_x     := Eq.symm (heq₄.left)
                                                          rw [x_cross_one_eq_x, y_cross_one_eq_y] at eq₁
                                                          rw [x_cross_eq_x, y_cross_eq_x] at bc
                                                          rw [eq₁]
                                                          exact bc
                                                        | split at bc)
                                          simp at *
                                          split at bc <;> (simp at *
                                                           rename_i neq₁ neq₂ _ _ _ _ _ _ _ _ _ heq₁ heq₂ heq₃ heq₄
                                                           have x_cross_one_eq_x := Eq.symm (heq₁.left)
                                                           have y_cross_one_eq_y := Eq.symm (heq₂.left)
                                                           have x_cross_eq_x     := Eq.symm (heq₃.left)
                                                           have y_cross_eq_x     := Eq.symm (heq₄.left))
                                          rename_i eq
                                          rw [x_cross_one_eq_x, y_cross_one_eq_y] at neq₂ ab
                                          rw [x_cross_eq_x, y_cross_eq_x] at eq
                                          rw [eq] at ab
                                          exact ab
                                          rename_i neq₃
                                          rw [x_cross_one_eq_x, y_cross_one_eq_y] at neq₂ ab
                                          rw [x_cross_eq_x, y_cross_eq_x] at neq₃ bc
                                          have le_le := Nat.le_trans ab bc
                                          exact le_le
State after:
no goals

State before:
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
p q l : List.length [] = m
ab : Order.lex_impl { val := [], property := p } { val := [], property := q }
bc : Order.lex_impl { val := [], property := q } { val := [], property := l }
⊢ Order.lex_impl { val := [], property := p } { val := [], property := l }
Tactic:
rw [Order.lex_impl]
State after:
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
p q l : List.length [] = m
ab : Order.lex_impl { val := [], property := p } { val := [], property := q }
bc : Order.lex_impl { val := [], property := q } { val := [], property := l }
⊢ match { val := [], property := p }, { val := [], property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y :: tail_1, property := property_1 } =>
    if x = y then Order.lex_impl (Vector.tail { val := [], property := p }) (Vector.tail { val := [], property := l })
    else x ≤ y

State before:
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
p q l : List.length [] = m
ab : Order.lex_impl { val := [], property := p } { val := [], property := q }
bc : Order.lex_impl { val := [], property := q } { val := [], property := l }
⊢ match { val := [], property := p }, { val := [], property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y :: tail_1, property := property_1 } =>
    if x = y then Order.lex_impl (Vector.tail { val := [], property := p }) (Vector.tail { val := [], property := l })
    else x ≤ y
Tactic:
split
State after:
case h_1
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
p q l : List.length [] = m
ab : Order.lex_impl { val := [], property := p } { val := [], property := q }
bc : Order.lex_impl { val := [], property := q } { val := [], property := l }
v₁✝ v₂✝ : Vector ℕ m
property✝¹ property✝ : List.length [] = m
heq✝¹ : { val := [], property := p } = { val := [], property := property✝¹ }
heq✝ : { val := [], property := l } = { val := [], property := property✝ }
⊢ True

case h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
p q l : List.length [] = m
ab : Order.lex_impl { val := [], property := p } { val := [], property := q }
bc : Order.lex_impl { val := [], property := q } { val := [], property := l }
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := [], property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := [], property := l } = { val := y✝ :: tail✝, property := property✝ }
⊢ if x✝ = y✝ then Order.lex_impl (tail { val := [], property := p }) (tail { val := [], property := l }) else x✝ ≤ y✝

State before:
case h_1
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
p q l : List.length [] = m
ab : Order.lex_impl { val := [], property := p } { val := [], property := q }
bc : Order.lex_impl { val := [], property := q } { val := [], property := l }
v₁✝ v₂✝ : Vector ℕ m
property✝¹ property✝ : List.length [] = m
heq✝¹ : { val := [], property := p } = { val := [], property := property✝¹ }
heq✝ : { val := [], property := l } = { val := [], property := property✝ }
⊢ True

case h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
p q l : List.length [] = m
ab : Order.lex_impl { val := [], property := p } { val := [], property := q }
bc : Order.lex_impl { val := [], property := q } { val := [], property := l }
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := [], property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := [], property := l } = { val := y✝ :: tail✝, property := property✝ }
⊢ if x✝ = y✝ then Order.lex_impl (tail { val := [], property := p }) (tail { val := [], property := l }) else x✝ ≤ y✝
Tactic:
simp
State after:
case h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
p q l : List.length [] = m
ab : Order.lex_impl { val := [], property := p } { val := [], property := q }
bc : Order.lex_impl { val := [], property := q } { val := [], property := l }
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := [], property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := [], property := l } = { val := y✝ :: tail✝, property := property✝ }
⊢ if x✝ = y✝ then Order.lex_impl (tail { val := [], property := p }) (tail { val := [], property := l }) else x✝ ≤ y✝

State before:
case h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
p q l : List.length [] = m
ab : Order.lex_impl { val := [], property := p } { val := [], property := q }
bc : Order.lex_impl { val := [], property := q } { val := [], property := l }
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := [], property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := [], property := l } = { val := y✝ :: tail✝, property := property✝ }
⊢ if x✝ = y✝ then Order.lex_impl (tail { val := [], property := p }) (tail { val := [], property := l }) else x✝ ≤ y✝
Tactic:
simp at *
State after:
no goals

State before:
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
ab : Order.lex_impl { val := x :: xs, property := p } { val := y :: ys, property := q }
bc : Order.lex_impl { val := y :: ys, property := q } { val := z :: zs, property := l }
⊢ Order.lex_impl { val := x :: xs, property := p } { val := z :: zs, property := l }
Tactic:
rw [Order.lex_impl]
State after:
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
ab : Order.lex_impl { val := x :: xs, property := p } { val := y :: ys, property := q }
bc : Order.lex_impl { val := y :: ys, property := q } { val := z :: zs, property := l }
⊢ match { val := x :: xs, property := p }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x_1 :: tail, property := property }, { val := y :: tail_1, property := property_1 } =>
    if x_1 = y then
      Order.lex_impl (Vector.tail { val := x :: xs, property := p }) (Vector.tail { val := z :: zs, property := l })
    else x_1 ≤ y

State before:
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
ab : Order.lex_impl { val := x :: xs, property := p } { val := y :: ys, property := q }
bc : Order.lex_impl { val := y :: ys, property := q } { val := z :: zs, property := l }
⊢ match { val := x :: xs, property := p }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x_1 :: tail, property := property }, { val := y :: tail_1, property := property_1 } =>
    if x_1 = y then
      Order.lex_impl (Vector.tail { val := x :: xs, property := p }) (Vector.tail { val := z :: zs, property := l })
    else x_1 ≤ y
Tactic:
rw [Order.lex_impl] at ab bc
State after:
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
ab :
  match { val := x :: xs, property := p }, { val := y :: ys, property := q } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x_1 :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x_1 = y_1 then
      Order.lex_impl (Vector.tail { val := x :: xs, property := p }) (Vector.tail { val := y :: ys, property := q })
    else x_1 ≤ y_1
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
⊢ match { val := x :: xs, property := p }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x_1 :: tail, property := property }, { val := y :: tail_1, property := property_1 } =>
    if x_1 = y then
      Order.lex_impl (Vector.tail { val := x :: xs, property := p }) (Vector.tail { val := z :: zs, property := l })
    else x_1 ≤ y

State before:
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
ab :
  match { val := x :: xs, property := p }, { val := y :: ys, property := q } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x_1 :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x_1 = y_1 then
      Order.lex_impl (Vector.tail { val := x :: xs, property := p }) (Vector.tail { val := y :: ys, property := q })
    else x_1 ≤ y_1
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
⊢ match { val := x :: xs, property := p }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x_1 :: tail, property := property }, { val := y :: tail_1, property := property_1 } =>
    if x_1 = y then
      Order.lex_impl (Vector.tail { val := x :: xs, property := p }) (Vector.tail { val := z :: zs, property := l })
    else x_1 ≤ y
Tactic:
split at ab
State after:
case h_1
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
property✝¹ property✝ : List.length [] = m
heq✝¹ : { val := x :: xs, property := p } = { val := [], property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := [], property := property✝ }
ab : True
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

case h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

State before:
case h_1
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
property✝¹ property✝ : List.length [] = m
heq✝¹ : { val := x :: xs, property := p } = { val := [], property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := [], property := property✝ }
ab : True
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

case h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z
Tactic:
split at bc
State after:
case h_1.h_1
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
property✝³ property✝² : List.length [] = m
heq✝³ : { val := x :: xs, property := p } = { val := [], property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := [], property := property✝² }
ab : True
v₁✝ v₂✝ : Vector ℕ m
property✝¹ property✝ : List.length [] = m
heq✝¹ : { val := y :: ys, property := q } = { val := [], property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := [], property := property✝ }
bc : True
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

case h_1.h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
property✝³ property✝² : List.length [] = m
heq✝³ : { val := x :: xs, property := p } = { val := [], property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := [], property := property✝² }
ab : True
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
bc :
  if x✝ = y✝ then Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
  else x✝ ≤ y✝
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

case h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

State before:
case h_1.h_1
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
property✝³ property✝² : List.length [] = m
heq✝³ : { val := x :: xs, property := p } = { val := [], property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := [], property := property✝² }
ab : True
v₁✝ v₂✝ : Vector ℕ m
property✝¹ property✝ : List.length [] = m
heq✝¹ : { val := y :: ys, property := q } = { val := [], property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := [], property := property✝ }
bc : True
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

case h_1.h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
property✝³ property✝² : List.length [] = m
heq✝³ : { val := x :: xs, property := p } = { val := [], property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := [], property := property✝² }
ab : True
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
bc :
  if x✝ = y✝ then Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
  else x✝ ≤ y✝
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

case h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z
Tactic:
split <;> simp at *
State after:
case h_1.h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
property✝³ property✝² : List.length [] = m
heq✝³ : { val := x :: xs, property := p } = { val := [], property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := [], property := property✝² }
ab : True
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
bc :
  if x✝ = y✝ then Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
  else x✝ ≤ y✝
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

case h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

State before:
case h_1.h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
property✝³ property✝² : List.length [] = m
heq✝³ : { val := x :: xs, property := p } = { val := [], property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := [], property := property✝² }
ab : True
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
bc :
  if x✝ = y✝ then Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
  else x✝ ≤ y✝
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

case h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z
Tactic:
split at bc
State after:
case h_1.h_2.inl
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
property✝³ property✝² : List.length [] = m
heq✝³ : { val := x :: xs, property := p } = { val := [], property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := [], property := property✝² }
ab : True
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
h✝ : x✝ = y✝
bc : Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

case h_1.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
property✝³ property✝² : List.length [] = m
heq✝³ : { val := x :: xs, property := p } = { val := [], property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := [], property := property✝² }
ab : True
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
h✝ : ¬x✝ = y✝
bc : x✝ ≤ y✝
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

case h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

State before:
case h_1.h_2.inl
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
property✝³ property✝² : List.length [] = m
heq✝³ : { val := x :: xs, property := p } = { val := [], property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := [], property := property✝² }
ab : True
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
h✝ : x✝ = y✝
bc : Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

case h_1.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
property✝³ property✝² : List.length [] = m
heq✝³ : { val := x :: xs, property := p } = { val := [], property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := [], property := property✝² }
ab : True
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
h✝ : ¬x✝ = y✝
bc : x✝ ≤ y✝
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

case h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z
Tactic:
split
State after:
case h_1.h_2.inl.inl
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
property✝³ property✝² : List.length [] = m
heq✝³ : { val := x :: xs, property := p } = { val := [], property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := [], property := property✝² }
ab : True
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x✝ = y✝
bc : Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
h✝ : x = z
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_1.h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
property✝³ property✝² : List.length [] = m
heq✝³ : { val := x :: xs, property := p } = { val := [], property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := [], property := property✝² }
ab : True
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x✝ = y✝
bc : Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
h✝ : ¬x = z
⊢ x ≤ z

case h_1.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
property✝³ property✝² : List.length [] = m
heq✝³ : { val := x :: xs, property := p } = { val := [], property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := [], property := property✝² }
ab : True
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
h✝ : ¬x✝ = y✝
bc : x✝ ≤ y✝
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

case h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

State before:
case h_1.h_2.inl.inl
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
property✝³ property✝² : List.length [] = m
heq✝³ : { val := x :: xs, property := p } = { val := [], property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := [], property := property✝² }
ab : True
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x✝ = y✝
bc : Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
h✝ : x = z
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_1.h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
property✝³ property✝² : List.length [] = m
heq✝³ : { val := x :: xs, property := p } = { val := [], property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := [], property := property✝² }
ab : True
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x✝ = y✝
bc : Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
h✝ : ¬x = z
⊢ x ≤ z

case h_1.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
property✝³ property✝² : List.length [] = m
heq✝³ : { val := x :: xs, property := p } = { val := [], property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := [], property := property✝² }
ab : True
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
h✝ : ¬x✝ = y✝
bc : x✝ ≤ y✝
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z

case h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
⊢ if x = z then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })
  else x ≤ z
Tactic:
repeat (first 
  | rename_i heq₁ heq₂ _ _ _ _ _ _ _ _ heq₃ heq₄ _ _
    rw [heq₂] at heq₃
    simp at heq₃ 
  | split)
State after:
case h_2.inl
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : x = z
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : x = z
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
split at ab
State after:
case h_2.inl.inl
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : x✝ = y✝
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inl
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : x✝ = y✝
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
split at bc
State after:
case h_2.inl.inl.h_1
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝³ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝² : List.length (y✝ :: tail✝) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝² }
h✝¹ : x = z
h✝ : x✝ = y✝
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
property✝¹ property✝ : List.length [] = m
heq✝¹ : { val := y :: ys, property := q } = { val := [], property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := [], property := property✝ }
bc : True
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inl.h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝¹ : x = z
h✝ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
bc :
  if x✝ = y✝ then Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
  else x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inl.h_1
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝³ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝² : List.length (y✝ :: tail✝) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝² }
h✝¹ : x = z
h✝ : x✝ = y✝
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
property✝¹ property✝ : List.length [] = m
heq✝¹ : { val := y :: ys, property := q } = { val := [], property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := [], property := property✝ }
bc : True
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inl.h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝¹ : x = z
h✝ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
bc :
  if x✝ = y✝ then Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
  else x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
rename_i heq₁ heq₂ _ _ _ _ _ _ heq₃ heq₄
State after:
case h_2.inl.inl.h_1
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝³ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝² : List.length (y✝ :: tail✝) = m
heq₁ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝³ }
heq₂ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝² }
h✝¹ : x = z
h✝ : x✝ = y✝
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
property✝¹ property✝ : List.length [] = m
heq₃ : { val := y :: ys, property := q } = { val := [], property := property✝¹ }
heq₄ : { val := z :: zs, property := l } = { val := [], property := property✝ }
bc : True
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inl.h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝¹ : x = z
h✝ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
bc :
  if x✝ = y✝ then Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
  else x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inl.h_1
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝³ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝² : List.length (y✝ :: tail✝) = m
heq₁ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝³ }
heq₂ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝² }
h✝¹ : x = z
h✝ : x✝ = y✝
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
property✝¹ property✝ : List.length [] = m
heq₃ : { val := y :: ys, property := q } = { val := [], property := property✝¹ }
heq₄ : { val := z :: zs, property := l } = { val := [], property := property✝ }
bc : True
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inl.h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝¹ : x = z
h✝ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
bc :
  if x✝ = y✝ then Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
  else x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
rw [heq₂] at heq₃
State after:
case h_2.inl.inl.h_1
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝³ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝² : List.length (y✝ :: tail✝) = m
heq₁ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝³ }
heq₂ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝² }
h✝¹ : x = z
h✝ : x✝ = y✝
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
property✝¹ property✝ : List.length [] = m
heq₃ : { val := y✝ :: tail✝, property := property✝² } = { val := [], property := property✝¹ }
heq₄ : { val := z :: zs, property := l } = { val := [], property := property✝ }
bc : True
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inl.h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝¹ : x = z
h✝ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
bc :
  if x✝ = y✝ then Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
  else x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inl.h_1
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝³ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝² : List.length (y✝ :: tail✝) = m
heq₁ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝³ }
heq₂ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝² }
h✝¹ : x = z
h✝ : x✝ = y✝
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
property✝¹ property✝ : List.length [] = m
heq₃ : { val := y✝ :: tail✝, property := property✝² } = { val := [], property := property✝¹ }
heq₄ : { val := z :: zs, property := l } = { val := [], property := property✝ }
bc : True
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inl.h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝¹ : x = z
h✝ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
bc :
  if x✝ = y✝ then Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
  else x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
simp at heq₃
State after:
case h_2.inl.inl.h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝¹ : x = z
h✝ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
bc :
  if x✝ = y✝ then Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
  else x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inl.h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝¹ : x = z
h✝ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
bc :
  if x✝ = y✝ then Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
  else x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
split at bc
State after:
case h_2.inl.inl.h_2.inl
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝² : x = z
h✝¹ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
h✝ : x✝ = y✝
bc : Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝² : x = z
h✝¹ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
h✝ : ¬x✝ = y✝
bc : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inl.h_2.inl
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝² : x = z
h✝¹ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
h✝ : x✝ = y✝
bc : Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝² : x = z
h✝¹ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
h✝ : ¬x✝ = y✝
bc : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
apply aux (m-1) (tail ⟨x::xs, p⟩) (tail ⟨y::ys, q⟩) (tail ⟨z::zs, l⟩) ab bc
State after:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝² : x = z
h✝¹ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
h✝ : ¬x✝ = y✝
bc : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝² : x = z
h✝¹ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
h✝ : ¬x✝ = y✝
bc : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
simp at *
State after:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
h✝² : x = z
h✝¹ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
h✝ : ¬x✝ = y✝
bc : x✝ ≤ y✝
heq✝³ : x = x✝¹ ∧ xs = tail✝³
heq✝² : y = y✝¹ ∧ ys = tail✝²
heq✝¹ : y = x✝ ∧ ys = tail✝¹
heq✝ : z = y✝ ∧ zs = tail✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
h✝² : x = z
h✝¹ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
h✝ : ¬x✝ = y✝
bc : x✝ ≤ y✝
heq✝³ : x = x✝¹ ∧ xs = tail✝³
heq✝² : y = y✝¹ ∧ ys = tail✝²
heq✝¹ : y = x✝ ∧ ys = tail✝¹
heq✝ : z = y✝ ∧ zs = tail✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
rename_i eq₁ eq₂ _ _ _ _ _  _ _ _ hneq heq₁ heq₂ heq₃ heq₄
State after:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
eq₁ : x = z
eq₂ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
hneq : ¬x✝ = y✝
bc : x✝ ≤ y✝
heq₁ : x = x✝¹ ∧ xs = tail✝³
heq₂ : y = y✝¹ ∧ ys = tail✝²
heq₃ : y = x✝ ∧ ys = tail✝¹
heq₄ : z = y✝ ∧ zs = tail✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
eq₁ : x = z
eq₂ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
hneq : ¬x✝ = y✝
bc : x✝ ≤ y✝
heq₁ : x = x✝¹ ∧ xs = tail✝³
heq₂ : y = y✝¹ ∧ ys = tail✝²
heq₃ : y = x✝ ∧ ys = tail✝¹
heq₄ : z = y✝ ∧ zs = tail✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
have x_cross_one_eq_x := Eq.symm (heq₁.left)
State after:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
eq₁ : x = z
eq₂ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
hneq : ¬x✝ = y✝
bc : x✝ ≤ y✝
heq₁ : x = x✝¹ ∧ xs = tail✝³
heq₂ : y = y✝¹ ∧ ys = tail✝²
heq₃ : y = x✝ ∧ ys = tail✝¹
heq₄ : z = y✝ ∧ zs = tail✝
x_cross_one_eq_x : x✝¹ = x
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
eq₁ : x = z
eq₂ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
hneq : ¬x✝ = y✝
bc : x✝ ≤ y✝
heq₁ : x = x✝¹ ∧ xs = tail✝³
heq₂ : y = y✝¹ ∧ ys = tail✝²
heq₃ : y = x✝ ∧ ys = tail✝¹
heq₄ : z = y✝ ∧ zs = tail✝
x_cross_one_eq_x : x✝¹ = x
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
have y_cross_one_eq_y := Eq.symm (heq₂.left)
State after:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
eq₁ : x = z
eq₂ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
hneq : ¬x✝ = y✝
bc : x✝ ≤ y✝
heq₁ : x = x✝¹ ∧ xs = tail✝³
heq₂ : y = y✝¹ ∧ ys = tail✝²
heq₃ : y = x✝ ∧ ys = tail✝¹
heq₄ : z = y✝ ∧ zs = tail✝
x_cross_one_eq_x : x✝¹ = x
y_cross_one_eq_y : y✝¹ = y
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
eq₁ : x = z
eq₂ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
hneq : ¬x✝ = y✝
bc : x✝ ≤ y✝
heq₁ : x = x✝¹ ∧ xs = tail✝³
heq₂ : y = y✝¹ ∧ ys = tail✝²
heq₃ : y = x✝ ∧ ys = tail✝¹
heq₄ : z = y✝ ∧ zs = tail✝
x_cross_one_eq_x : x✝¹ = x
y_cross_one_eq_y : y✝¹ = y
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
have x_cross_eq_x     := Eq.symm (heq₃.left)
State after:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
eq₁ : x = z
eq₂ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
hneq : ¬x✝ = y✝
bc : x✝ ≤ y✝
heq₁ : x = x✝¹ ∧ xs = tail✝³
heq₂ : y = y✝¹ ∧ ys = tail✝²
heq₃ : y = x✝ ∧ ys = tail✝¹
heq₄ : z = y✝ ∧ zs = tail✝
x_cross_one_eq_x : x✝¹ = x
y_cross_one_eq_y : y✝¹ = y
x_cross_eq_x : x✝ = y
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
eq₁ : x = z
eq₂ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
hneq : ¬x✝ = y✝
bc : x✝ ≤ y✝
heq₁ : x = x✝¹ ∧ xs = tail✝³
heq₂ : y = y✝¹ ∧ ys = tail✝²
heq₃ : y = x✝ ∧ ys = tail✝¹
heq₄ : z = y✝ ∧ zs = tail✝
x_cross_one_eq_x : x✝¹ = x
y_cross_one_eq_y : y✝¹ = y
x_cross_eq_x : x✝ = y
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
have y_cross_eq_x     := Eq.symm (heq₄.left)
State after:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
eq₁ : x = z
eq₂ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
hneq : ¬x✝ = y✝
bc : x✝ ≤ y✝
heq₁ : x = x✝¹ ∧ xs = tail✝³
heq₂ : y = y✝¹ ∧ ys = tail✝²
heq₃ : y = x✝ ∧ ys = tail✝¹
heq₄ : z = y✝ ∧ zs = tail✝
x_cross_one_eq_x : x✝¹ = x
y_cross_one_eq_y : y✝¹ = y
x_cross_eq_x : x✝ = y
y_cross_eq_x : y✝ = z
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
eq₁ : x = z
eq₂ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
hneq : ¬x✝ = y✝
bc : x✝ ≤ y✝
heq₁ : x = x✝¹ ∧ xs = tail✝³
heq₂ : y = y✝¹ ∧ ys = tail✝²
heq₃ : y = x✝ ∧ ys = tail✝¹
heq₄ : z = y✝ ∧ zs = tail✝
x_cross_one_eq_x : x✝¹ = x
y_cross_one_eq_y : y✝¹ = y
x_cross_eq_x : x✝ = y
y_cross_eq_x : y✝ = z
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
rw [x_cross_eq_x, y_cross_eq_x] at hneq
State after:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
eq₁ : x = z
eq₂ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
hneq : ¬y = z
bc : x✝ ≤ y✝
heq₁ : x = x✝¹ ∧ xs = tail✝³
heq₂ : y = y✝¹ ∧ ys = tail✝²
heq₃ : y = x✝ ∧ ys = tail✝¹
heq₄ : z = y✝ ∧ zs = tail✝
x_cross_one_eq_x : x✝¹ = x
y_cross_one_eq_y : y✝¹ = y
x_cross_eq_x : x✝ = y
y_cross_eq_x : y✝ = z
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
eq₁ : x = z
eq₂ : x✝¹ = y✝¹
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
hneq : ¬y = z
bc : x✝ ≤ y✝
heq₁ : x = x✝¹ ∧ xs = tail✝³
heq₂ : y = y✝¹ ∧ ys = tail✝²
heq₃ : y = x✝ ∧ ys = tail✝¹
heq₄ : z = y✝ ∧ zs = tail✝
x_cross_one_eq_x : x✝¹ = x
y_cross_one_eq_y : y✝¹ = y
x_cross_eq_x : x✝ = y
y_cross_eq_x : y✝ = z
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
rw [x_cross_one_eq_x, y_cross_one_eq_y] at eq₂
State after:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
eq₁ : x = z
eq₂ : x = y
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
hneq : ¬y = z
bc : x✝ ≤ y✝
heq₁ : x = x✝¹ ∧ xs = tail✝³
heq₂ : y = y✝¹ ∧ ys = tail✝²
heq₃ : y = x✝ ∧ ys = tail✝¹
heq₄ : z = y✝ ∧ zs = tail✝
x_cross_one_eq_x : x✝¹ = x
y_cross_one_eq_y : y✝¹ = y
x_cross_eq_x : x✝ = y
y_cross_eq_x : y✝ = z
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
eq₁ : x = z
eq₂ : x = y
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
hneq : ¬y = z
bc : x✝ ≤ y✝
heq₁ : x = x✝¹ ∧ xs = tail✝³
heq₂ : y = y✝¹ ∧ ys = tail✝²
heq₃ : y = x✝ ∧ ys = tail✝¹
heq₄ : z = y✝ ∧ zs = tail✝
x_cross_one_eq_x : x✝¹ = x
y_cross_one_eq_y : y✝¹ = y
x_cross_eq_x : x✝ = y
y_cross_eq_x : y✝ = z
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
rw [eq₂] at eq₁
State after:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
eq₁ : y = z
eq₂ : x = y
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
hneq : ¬y = z
bc : x✝ ≤ y✝
heq₁ : x = x✝¹ ∧ xs = tail✝³
heq₂ : y = y✝¹ ∧ ys = tail✝²
heq₃ : y = x✝ ∧ ys = tail✝¹
heq₄ : z = y✝ ∧ zs = tail✝
x_cross_one_eq_x : x✝¹ = x
y_cross_one_eq_y : y✝¹ = y
x_cross_eq_x : x✝ = y
y_cross_eq_x : y✝ = z
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inl.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
eq₁ : y = z
eq₂ : x = y
ab : Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
hneq : ¬y = z
bc : x✝ ≤ y✝
heq₁ : x = x✝¹ ∧ xs = tail✝³
heq₂ : y = y✝¹ ∧ ys = tail✝²
heq₃ : y = x✝ ∧ ys = tail✝¹
heq₄ : z = y✝ ∧ zs = tail✝
x_cross_one_eq_x : x✝¹ = x
y_cross_one_eq_y : y✝¹ = y
x_cross_eq_x : x✝ = y
y_cross_eq_x : y✝ = z
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
contradiction
State after:
case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
split at bc
State after:
case h_2.inl.inr.h_1
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝³ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝² : List.length (y✝ :: tail✝) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝² }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
v₁✝ v₂✝ : Vector ℕ m
property✝¹ property✝ : List.length [] = m
heq✝¹ : { val := y :: ys, property := q } = { val := [], property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := [], property := property✝ }
bc : True
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr.h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝¹ : x = z
h✝ : ¬x✝¹ = y✝¹
ab : x✝¹ ≤ y✝¹
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
bc :
  if x✝ = y✝ then Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
  else x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inr.h_1
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝³ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝² : List.length (y✝ :: tail✝) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝² }
h✝¹ : x = z
h✝ : ¬x✝ = y✝
ab : x✝ ≤ y✝
v₁✝ v₂✝ : Vector ℕ m
property✝¹ property✝ : List.length [] = m
heq✝¹ : { val := y :: ys, property := q } = { val := [], property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := [], property := property✝ }
bc : True
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inl.inr.h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝¹ : x = z
h✝ : ¬x✝¹ = y✝¹
ab : x✝¹ ≤ y✝¹
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
bc :
  if x✝ = y✝ then Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
  else x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
simp at *
State after:
case h_2.inl.inr.h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝¹ : x = z
h✝ : ¬x✝¹ = y✝¹
ab : x✝¹ ≤ y✝¹
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
bc :
  if x✝ = y✝ then Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
  else x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z

State before:
case h_2.inl.inr.h_2
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝¹ : x = z
h✝ : ¬x✝¹ = y✝¹
ab : x✝¹ ≤ y✝¹
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
bc :
  if x✝ = y✝ then Order.lex_impl (tail { val := y :: ys, property := q }) (tail { val := z :: zs, property := l })
  else x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z
Tactic:
repeat (first | rename_i heq₁ heq₂ eq₁ neq₁ _ _ _ _ _ _ _ _ heq₃ heq₄ eq₂
                simp at heq₁ heq₂ heq₃ heq₄
                have x_cross_one_eq_x := Eq.symm (heq₁.left)
                have y_cross_one_eq_y := Eq.symm (heq₂.left)
                have x_cross_eq_x     := Eq.symm (heq₃.left)
                have y_cross_eq_x     := Eq.symm (heq₄.left)
                rw [x_cross_eq_x, y_cross_eq_x] at eq₂
                rw [x_cross_one_eq_x, y_cross_one_eq_y] at neq₁
                rw [eq₂] at neq₁
                contradiction
              | split at bc)
State after:
case h_2.inl.inr.h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
v₁✝¹ v₂✝¹ : Vector ℕ m
x✝¹ : ℕ
tail✝³ : List ℕ
property✝³ : List.length (x✝¹ :: tail✝³) = m
y✝¹ : ℕ
tail✝² : List ℕ
property✝² : List.length (y✝¹ :: tail✝²) = m
heq✝³ : { val := x :: xs, property := p } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq✝² : { val := y :: ys, property := q } = { val := y✝¹ :: tail✝², property := property✝² }
h✝² : x = z
h✝¹ : ¬x✝¹ = y✝¹
ab : x✝¹ ≤ y✝¹
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := y :: ys, property := q } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := z :: zs, property := l } = { val := y✝ :: tail✝, property := property✝ }
h✝ : ¬x✝ = y✝
bc : x✝ ≤ y✝
⊢ Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := z :: zs, property := l })

case h_2.inr
n : ℕ
v₁ v₂ v₃ : Variables n order.Lex
h₁ : Order.lex v₁ v₂
h₂ : Order.lex v₂ v₃
m : ℕ
a b c : Variables m order.Lex
x : ℕ
xs : List ℕ
p : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
q : List.length (y :: ys) = m
z : ℕ
zs : List ℕ
l : List.length (z :: zs) = m
bc :
  match { val := y :: ys, property := q }, { val := z :: zs, property := l } with
  | { val := [], property := property }, { val := [], property := property_1 } => True
  | { val := x :: tail, property := property }, { val := y_1 :: tail_1, property := property_1 } =>
    if x = y_1 then
      Order.lex_impl (Vector.tail { val := y :: ys, property := q }) (Vector.tail { val := z :: zs, property := l })
    else x ≤ y_1
v₁✝ v₂✝ : Vector ℕ m
x✝ : ℕ
tail✝¹ : List ℕ
property✝¹ : List.length (x✝ :: tail✝¹) = m
y✝ : ℕ
tail✝ : List ℕ
property✝ : List.length (y✝ :: tail✝) = m
heq✝¹ : { val := x :: xs, property := p } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := q } = { val := y✝ :: tail✝, property := property✝ }
ab :
  if x✝ = y✝ then Order.lex_impl (tail { val := x :: xs, property := p }) (tail { val := y :: ys, property := q })
  else x✝ ≤ y✝
h✝ : ¬x = z
⊢ x ≤ z