(motive : Option Lean.Expr → Option (Lean.TSyntax `term) → Sort u_1) →
  (x : Option Lean.Expr) →
    (val : Option (Lean.TSyntax `term)) →
      ((val : Lean.TSyntax `term) → motive none (some val)) →
        ((val : Lean.Expr) → motive (some val) none) →
          ((hval : Lean.Expr) → (val : Lean.TSyntax `term) → motive (some hval) (some val)) →
            (Unit → motive none none) → motive x val