Zulip Chat Archive

Stream: lean4

Topic: Unable to simplify due to dependent types


Op From The Start (Aug 19 2025 at 02:28):

I have the tactics:

rename_i x y
  rw [hx, hy]
  simp [Ordinal.nadd_comm]
  let ryyr : right y = yR := by
    rw [hy]
    simp [right]
  let yr2 := yr
  rw [ryyr] at yr2
  let hb := birthday_right_child_lt y yr2

and state:

**x y** : PreNo
**xL xR** : Type
**xLS** : xL  PreNo
**xRS** : xR  PreNo
**yL yR** : Type
**yLS** : yL  PreNo
**yRS** : yR  PreNo
**hx** : x = PreNo.mk xL xR xLS xRS
**hy** : y = PreNo.mk yL yR yLS yRS
**yr** : yR
**ryyr** : right y = yR
**yr2** : right y
**hb** : birthday (rightm y yr2) < birthday y
**⊢** birthday (yRS yr) < birthday y

By definition yRS = rightm y and yr=yr2, but as they have differing types I am unable to simplify them to solve the goal. What should I do?

Op From The Start (Aug 19 2025 at 04:03):

I've reduced it a bit to

**x y** : PreNo
**xL xR** : Type
**xLS** : xL  PreNo
**xRS** : xR  PreNo
**yL yR** : Type
**yLS** : yL  PreNo
**yRS** : yR  PreNo
**hx** : x = PreNo.mk xL xR xLS xRS
**hy** : y = PreNo.mk yL yR yLS yRS
**yr** : yR
**ryyr** : right y = yR
**yr2** : right y
**hb** : birthday (rightm y yr2) < birthday y
**⊢** yRS yr = rightm y yr2

Op From The Start (Aug 19 2025 at 04:05):

def rightm (x: PreNo) : right x  PreNo :=
  match x with
  | PreNo.mk _ _ _ xRS => xRS
let yr2 := yr
rw [ryyr] at yr2

So they are both definitionally equal


Last updated: Dec 20 2025 at 21:32 UTC