cf cg : Code
a k : ℕ
⊢ Nat.rec (eval cf (a, Nat.succ k).fst)
      (fun y IH => do
        let i ← IH
        eval cg (Nat.pair (a, Nat.succ k).fst (Nat.pair y i)))
      (a, Nat.succ k).snd =
    Part.bind
      (unpaired
        (fun a n =>
          Nat.rec (eval cf a)
            (fun y IH => do
              let i ← IH
              eval cg (Nat.pair a (Nat.pair y i)))
            n)
        (Nat.pair a k))
      fun ih => eval cg (Nat.pair a (Nat.pair k ih))
cf cg : Code
a k : ℕ
⊢ eval (prec cf cg) (Nat.pair a (Nat.succ k)) = do
    let ih ← eval (prec cf cg) (Nat.pair a k)
    eval cg (Nat.pair a (Nat.pair k ih))
rw [eval, Nat.unpaired, Part.bind_eq_bind, Nat.unpair_pair]
no goals
cf cg : Code
a k : ℕ
⊢ Nat.rec (eval cf (a, Nat.succ k).fst)
      (fun y IH => do
        let i ← IH
        eval cg (Nat.pair (a, Nat.succ k).fst (Nat.pair y i)))
      (a, Nat.succ k).snd =
    Part.bind
      (unpaired
        (fun a n =>
          Nat.rec (eval cf a)
            (fun y IH => do
              let i ← IH
              eval cg (Nat.pair a (Nat.pair y i)))
            n)
        (Nat.pair a k))
      fun ih => eval cg (Nat.pair a (Nat.pair k ih))
simp