Goal:
  
  ============================
   (forall (A : Type) (i : positive) (x : A) (m : tree A),
    get i (set i x m) = Some x)


DEBUG:Going to execute:
induction i

Goals:
  
  A : Type
  i : positive
  IHi : forall (x : A) (m : tree A), get i (set i x m) = Some x
  ============================
   (forall (x : A) (m : tree A), get (xI i) (set (xI i) x m) = Some x)

  
  A : Type
  i : positive
  IHi : forall (x : A) (m : tree A), get i (set i x m) = Some x
  ============================
   (forall (x : A) (m : tree A), get (xO i) (set (xO i) x m) = Some x)

    A : Type
  ============================
   (forall (x : A) (m : tree A), get xH (set xH x m) = Some x)


DEBUG:Going to execute:
induction m using tree_ind

Goals:
  
  A : Type
  i : positive
  IHi : forall (x : A) (m : tree A), get i (set i x m) = Some x
  x : A
  ============================
   (get (xI i) (set (xI i) x Empty) = Some x)

  
  A : Type
  i : positive
  IHi : forall (x : A) (m : tree A), get i (set i x m) = Some x
  x : A
  m1 : tree A
  o : option A
  m2 : tree A
  H : not_trivially_empty m1 o m2
  IHm1 : get (xI i) (set (xI i) x m1) = Some x
  IHm2 : get (xI i) (set (xI i) x m2) = Some x
  ============================
   (get (xI i) (set (xI i) x (Node m1 o m2)) = Some x)

  
  A : Type
  i : positive
  IHi : forall (x : A) (m : tree A), get i (set i x m) = Some x
  x : A
  ============================
   (get (xO i) (set (xO i) x Empty) = Some x)

  
  A : Type
  i : positive
  IHi : forall (x : A) (m : tree A), get i (set i x m) = Some x
  x : A
  m1 : tree A
  o : option A
  m2 : tree A
  H : not_trivially_empty m1 o m2
  IHm1 : get (xO i) (set (xO i) x m1) = Some x
  IHm2 : get (xO i) (set (xO i) x m2) = Some x
  ============================
   (get (xO i) (set (xO i) x (Node m1 o m2)) = Some x)

    A : Type  x : A
  ============================
   (get xH (set xH x Empty) = Some x)

  
  A : Type
  x : A
  m1 : tree A
  o : option A
  m2 : tree A
  H : not_trivially_empty m1 o m2
  IHm1 : get xH (set xH x m1) = Some x
  IHm2 : get xH (set xH x m2) = Some x
  ============================
   (get xH (set xH x (Node m1 o m2)) = Some x)


DEBUG:Going to execute:
intros
DEBUG LTAC Evaluated term: tree_ind
DEBUG LTAC Evaluated term: tree_ind
DEBUG LTAC Evaluated term: tree_ind

Goals:
  
  A : Type
  i : positive
  IHi : forall (x : A) (m : tree A), get i (set i x m) = Some x
  x : A
  ============================
   (get (xI i) (set (xI i) x Empty) = Some x)

  
  A : Type
  i : positive
  IHi : forall (x : A) (m : tree A), get i (set i x m) = Some x
  x : A
  m1 : tree A
  o : option A
  m2 : tree A
  H : not_trivially_empty m1 o m2
  IHm1 : get (xI i) (set (xI i) x m1) = Some x
  IHm2 : get (xI i) (set (xI i) x m2) = Some x
  ============================
   (get (xI i) (set (xI i) x (Node m1 o m2)) = Some x)

  
  A : Type
  i : positive
  IHi : forall (x : A) (m : tree A), get i (set i x m) = Some x
  x : A
  ============================
   (get (xO i) (set (xO i) x Empty) = Some x)

  
  A : Type
  i : positive
  IHi : forall (x : A) (m : tree A), get i (set i x m) = Some x
  x : A
  m1 : tree A
  o : option A
  m2 : tree A
  H : not_trivially_empty m1 o m2
  IHm1 : get (xO i) (set (xO i) x m1) = Some x
  IHm2 : get (xO i) (set (xO i) x m2) = Some x
  ============================
   (get (xO i) (set (xO i) x (Node m1 o m2)) = Some x)

    A : Type  x : A
  ============================
   (get xH (set xH x Empty) = Some x)

  
  A : Type
  x : A
  m1 : tree A
  o : option A
  m2 : tree A
  H : not_trivially_empty m1 o m2
  IHm1 : get xH (set xH x m1) = Some x
  IHm2 : get xH (set xH x m2) = Some x
  ============================
   (get xH (set xH x (Node m1 o m2)) = Some x)


DEBUG:Going to execute:
rewrite set_Empty || rewrite set_Node