Theorem: algebra.Order.lex_true_of_ble_lex_true
Proof state before:
case h_2.inr
n✝ : ℕ
v₁ v₂ : Vector ℕ n✝
h✝ : algebra.Order.ble_lex_impl v₁ v₂ = true
m : ℕ
a b : Vector ℕ m
x : ℕ
xs : List ℕ
property✝³ : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
property✝² : List.length (y :: ys) = m
h :
  (match { val := x :: xs, property := property✝³ }, { val := y :: ys, property := property✝² } 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) = true then
        algebra.Order.ble_lex_impl (Vector.tail { val := x :: xs, property := property✝³ })
          (Vector.tail { val := y :: ys, property := property✝² })
      else decide (x_1 ≤ y_1)) =
    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 := x :: xs, property := property✝³ } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq₂ : { val := y :: ys, property := property✝² } = { val := y✝ :: tail✝, property := property✝ }
hneq₁ : ¬x✝ = y✝
⊢ x✝ ≤ y✝
Tactic:
split at h
Proof state after:
case h_2.inr.h_1
n✝ : ℕ
v₁ v₂ : Vector ℕ n✝
h✝ : algebra.Order.ble_lex_impl v₁ v₂ = true
m : ℕ
a b : Vector ℕ m
x : ℕ
xs : List ℕ
property✝⁵ : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
property✝⁴ : List.length (y :: ys) = 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 := property✝⁵ } = { val := x✝ :: tail✝¹, property := property✝³ }
heq₂ : { val := y :: ys, property := property✝⁴ } = { val := y✝ :: tail✝, property := property✝² }
hneq₁ : ¬x✝ = y✝
v₁✝ v₂✝ : Vector ℕ m
property✝¹ property✝ : List.length [] = m
heq✝¹ : { val := x :: xs, property := property✝⁵ } = { val := [], property := property✝¹ }
heq✝ : { val := y :: ys, property := property✝⁴ } = { val := [], property := property✝ }
h : true = true
⊢ x✝ ≤ y✝

case h_2.inr.h_2
n✝ : ℕ
v₁ v₂ : Vector ℕ n✝
h✝ : algebra.Order.ble_lex_impl v₁ v₂ = true
m : ℕ
a b : Vector ℕ m
x : ℕ
xs : List ℕ
property✝⁵ : List.length (x :: xs) = m
y : ℕ
ys : List ℕ
property✝⁴ : List.length (y :: ys) = 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 := property✝⁵ } = { val := x✝¹ :: tail✝³, property := property✝³ }
heq₂ : { val := y :: ys, property := property✝⁴ } = { val := y✝¹ :: tail✝², property := property✝² }
hneq₁ : ¬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 := x :: xs, property := property✝⁵ } = { val := x✝ :: tail✝¹, property := property✝¹ }
heq✝ : { val := y :: ys, property := property✝⁴ } = { val := y✝ :: tail✝, property := property✝ }
h :
  (if (x✝ == y✝) = true then
      algebra.Order.ble_lex_impl (tail { val := x :: xs, property := property✝⁵ })
        (tail { val := y :: ys, property := property✝⁴ })
    else decide (x✝ ≤ y✝)) =
    true
⊢ x✝¹ ≤ y✝¹