module
@[expose] public section -- TODO: remove after we fix congr_eq

def g (a : α) (as : List α) : List α :=
  match as with
  | [] => [a]
  | b::bs => a::a::b::bs

set_option trace.grind true in
set_option trace.grind.assert true in
example : ¬ (g a as).isEmpty := by
  unfold List.isEmpty
  unfold g
  grind

def h (as : List Nat) :=
  match as with
  | []      => 1
  | [_]     => 2
  | _::_::_ => 3

/--
trace: [grind] closed `grind.1`
[grind] closed `grind.2`
[grind] closed `grind.3`
-/
#guard_msgs (trace) in
set_option trace.grind true in
example : h as ≠ 0 := by
  grind [h.eq_def]

example : h as ≠ 0 := by
  unfold h
  fail_if_success grind (splitMatch := false)
  sorry
