Goal:
    x : string  y : string  z : string  c : comparison
  ============================
   (compare x y = c -> compare y z = c -> compare x z = c)


DEBUG:Going to execute:
destruct (compare_spec x y)

Goals:
    x : string  y : string  z : string  c : comparison  H : x = y
  ============================
   (Eq = c -> compare y z = c -> compare x z = c)

    x : string  y : string  z : string  c : comparison  H : lt x y
  ============================
   (Lt = c -> compare y z = c -> compare x z = c)

    x : string  y : string  z : string  c : comparison  H : lt y x
  ============================
   (Gt = c -> compare y z = c -> compare x z = c)


DEBUG:Going to execute:
subst
DEBUG LTAC Evaluated term: (compare_spec x y)

Goals:
    x : string  y : string  z : string  c : comparison  H : x = y
  ============================
   (Eq = c -> compare y z = c -> compare x z = c)

    x : string  y : string  z : string  c : comparison  H : lt x y
  ============================
   (Lt = c -> compare y z = c -> compare x z = c)

    x : string  y : string  z : string  c : comparison  H : lt y x
  ============================
   (Gt = c -> compare y z = c -> compare x z = c)


DEBUG:Going to execute:
<coq-core.plugins.ltac::subst@1>

Goals:
    y : string  z : string  c : comparison
  ============================
   (Eq = c -> compare y z = c -> compare y z = c)

    x : string  y : string  z : string  c : comparison  H : lt x y
  ============================
   (Lt = c -> compare y z = c -> compare x z = c)

    x : string  y : string  z : string  c : comparison  H : lt y x
  ============================
   (Gt = c -> compare y z = c -> compare x z = c)


DEBUG:Going to execute:
intros <-

Goals:
    y : string  z : string
  ============================
   (compare y z = Eq -> compare y z = Eq)

    x : string  y : string  z : string  H : lt x y
  ============================
   (compare y z = Lt -> compare x z = Lt)

    x : string  y : string  z : string  H : lt y x
  ============================
   (compare y z = Gt -> compare x z = Gt)


DEBUG:Going to execute:
destruct (compare_spec y z)

Goals:
    y : string  z : string  H : y = z
  ============================
   (Eq = Eq -> Eq = Eq)

    y : string  z : string  H : lt y z
  ============================
   (Lt = Eq -> Lt = Eq)

    y : string  z : string  H : lt z y
  ============================
   (Gt = Eq -> Gt = Eq)

    x : string  y : string  z : string  H : lt x y  H0 : y = z
  ============================
   (Eq = Lt -> compare x z = Lt)

    x : string  y : string  z : string  H : lt x y  H0 : lt y z
  ============================
   (Lt = Lt -> compare x z = Lt)

    x : string  y : string  z : string  H : lt x y  H0 : lt z y
  ============================
   (Gt = Lt -> compare x z = Lt)

    x : string  y : string  z : string  H : lt y x  H0 : y = z
  ============================
   (Eq = Gt -> compare x z = Gt)

    x : string  y : string  z : string  H : lt y x  H0 : lt y z
  ============================
   (Lt = Gt -> compare x z = Gt)

    x : string  y : string  z : string  H : lt y x  H0 : lt z y
  ============================
   (Gt = Gt -> compare x z = Gt)


DEBUG:Going to execute:
subst
DEBUG LTAC Evaluated term: (compare_spec y z)
DEBUG LTAC Evaluated term: (compare_spec y z)
DEBUG LTAC Evaluated term: (compare_spec y z)

Goals:
    y : string  z : string  H : y = z
  ============================
   (Eq = Eq -> Eq = Eq)

    y : string  z : string  H : lt y z
  ============================
   (Lt = Eq -> Lt = Eq)

    y : string  z : string  H : lt z y
  ============================
   (Gt = Eq -> Gt = Eq)

    x : string  y : string  z : string  H : lt x y  H0 : y = z
  ============================
   (Eq = Lt -> compare x z = Lt)

    x : string  y : string  z : string  H : lt x y  H0 : lt y z
  ============================
   (Lt = Lt -> compare x z = Lt)

    x : string  y : string  z : string  H : lt x y  H0 : lt z y
  ============================
   (Gt = Lt -> compare x z = Lt)

    x : string  y : string  z : string  H : lt y x  H0 : y = z
  ============================
   (Eq = Gt -> compare x z = Gt)

    x : string  y : string  z : string  H : lt y x  H0 : lt y z
  ============================
   (Lt = Gt -> compare x z = Gt)

    x : string  y : string  z : string  H : lt y x  H0 : lt z y
  ============================
   (Gt = Gt -> compare x z = Gt)


DEBUG:Going to execute:
<coq-core.plugins.ltac::subst@1>

Goals:
    z : string
  ============================
   (Eq = Eq -> Eq = Eq)

    y : string  z : string  H : lt y z
  ============================
   (Lt = Eq -> Lt = Eq)

    y : string  z : string  H : lt z y
  ============================
   (Gt = Eq -> Gt = Eq)

    x : string  z : string  H : lt x z
  ============================
   (Eq = Lt -> compare x z = Lt)

    x : string  y : string  z : string  H : lt x y  H0 : lt y z
  ============================
   (Lt = Lt -> compare x z = Lt)

    x : string  y : string  z : string  H : lt x y  H0 : lt z y
  ============================
   (Gt = Lt -> compare x z = Lt)

    x : string  z : string  H : lt z x
  ============================
   (Eq = Gt -> compare x z = Gt)

    x : string  y : string  z : string  H : lt y x  H0 : lt y z
  ============================
   (Lt = Gt -> compare x z = Gt)

    x : string  y : string  z : string  H : lt y x  H0 : lt z y
  ============================
   (Gt = Gt -> compare x z = Gt)


DEBUG:Going to execute:
try congruence