example (h : (fun (_ : Unit) => x = 1) = (fun _ => True)) : x = 1 := by
  grind

example
    (h₁ : f = fun (_ : Unit) => x = 1)
    (h₂ : g = fun (_ : Unit) => True)
    (h₃ : f = g)
    : x = 1 := by
  grind

example
    (h₁ : f = fun (_ : Unit × Unit) => x = 1)
    (h₂ : g = fun (_ : Unit × Unit) => True)
    (h₃ : f = g)
    : x = 1 := by
  grind

example (h : (fun (_ : True → Unit) (_ : Unit) => x + 1) = (fun _ _ => 1 + y)) : x = y := by
  grind

example (h : (fun (_ : Unit) => x + 1) = (fun _ => 1 + y)) : x = y := by
  grind

example (h : (fun (_ : Unit → Unit) => x + 1) = (fun _ => 1 + y)) : x = y := by
  grind

example
    (x y z : Nat)
    (h₁ : f = fun (_ : Unit × Unit) => x + y)
    (h₂ : g = fun (_ : Unit × Unit) => w)
    (h₃ : f = g)
    (h₄ : f = fun (_ : Unit × Unit) => y + z)
    : x = z ∧ x + y = w := by
  grind

example [Inhabited α] : ((fun (_ : α) => x = a + 1) = fun (_ : α) => True) → x = a + 1 := by
  grind

example : c = 5 → ((fun (_ : Nat × Nat) => { down := a + c = b + 5 : ULift Prop }) = fun (_ : Nat × Nat) => { down := c < 10 : ULift Prop }) → a = b := by
  grind
