Goal:
  
  A : Type
  P : tree A -> Type
  empty : P Empty
  node : forall l : tree A,
         P l ->
         forall (o : option A) (r : tree A),
         P r -> not_trivially_empty l o r -> P (Node l o r)
  x : A
  ============================
   True


DEBUG:Going to execute:
match H with
           | H' => fail 2
           | _ => unify X Y; clear H' || clear H
           end
Level 4: Backtrace:

In environment
A : Type
P : tree A -> Type
empty : P Empty
node : forall l : tree A,
       P l ->
       forall (o : option A) (r : tree A),
       P r -> not_trivially_empty l o r -> P (Node l o r)
x : A
Unable to unify "P Empty" with "A".
Level 4: Backtrace:

In environment
A : Type
P : tree A -> Type
empty : P Empty
node : forall l : tree A,
       P l ->
       forall (o : option A) (r : tree A),
       P r -> not_trivially_empty l o r -> P (Node l o r)
x : A
Unable to unify "P Empty" with "A".
Level 4: Backtrace:

In environment
A : Type
P : tree A -> Type
empty : P Empty
node : forall l : tree A,
       P l ->
       forall (o : option A) (r : tree A),
       P r -> not_trivially_empty l o r -> P (Node l o r)
x : A
Unable to unify "P Empty" with "A".
Level 4: Backtrace:

In environment
A : Type
P : tree A -> Type
empty : P Empty
node : forall l : tree A,
       P l ->
       forall (o : option A) (r : tree A),
       P r -> not_trivially_empty l o r -> P (Node l o r)
x : A
Unable to unify "P Empty" with "A".
Level 3: Backtrace:

In environment
A : Type
P : tree A -> Type
empty : P Empty
node : forall l : tree A,
       P l ->
       forall (o : option A) (r : tree A),
       P r -> not_trivially_empty l o r -> P (Node l o r)
x : A
Unable to unify "P Empty" with "A".