import Lean

open Lean
open Lean.Meta
def tst (declName : Name) : MetaM Unit := do
  IO.println (← getUnfoldEqnFor? declName)

mutual
def g (i j : Nat) : Nat :=
  if i < 5 then 0 else
  match j with
  | Nat.zero => 1
  | Nat.succ j => h i j
def h (i j : Nat) : Nat :=
  match j with
  | 0 => g i 0
  | Nat.succ j => g i j
end
termination_by
 invImage
    (fun
      | Sum.inl ⟨_, n⟩ => (n, 0)
      | Sum.inr ⟨_, n⟩ => (n, 1))
    (Prod.lex sizeOfWFRel sizeOfWFRel)
decreasing_by
  simp [invImage, InvImage, Prod.lex, sizeOfWFRel, measure, Nat.lt_wfRel]
  first
  | apply Prod.Lex.left
    apply Nat.lt_succ_self
  | apply Prod.Lex.right
    decide

#eval tst ``g
#check g._eq_1
#check g._eq_2
#check g._eq_3
#check g._unfold
#eval tst ``h
#check h._eq_1
#check h._eq_2
#check h._unfold
