Goal:
  
  ============================
   (forall x y z : t,
    compare x y = Lt -> compare y z = Lt -> compare x z = Lt)


DEBUG:Going to execute:
induction x

Goals:
  
  ============================
   (forall y z : t,
    compare "" y = Lt -> compare y z = Lt -> compare "" z = Lt)

  
  b : Byte.byte
  x : string
  IHx : forall y z : t,
        compare x y = Lt -> compare y z = Lt -> compare x z = Lt
  ============================
   (forall y z : t,
    compare (String b x) y = Lt ->
    compare y z = Lt -> compare (String b x) z = Lt)


DEBUG:Going to execute:
destruct y

Goals:
  
  ============================
   (forall z : t,
    compare "" "" = Lt -> compare "" z = Lt -> compare "" z = Lt)

    b : Byte.byte  y : string
  ============================
   (forall z : t,
    compare "" (String b y) = Lt ->
    compare (String b y) z = Lt -> compare "" z = Lt)

  
  b : Byte.byte
  x : string
  IHx : forall y z : t,
        compare x y = Lt -> compare y z = Lt -> compare x z = Lt
  ============================
   (forall z : t,
    compare (String b x) "" = Lt ->
    compare "" z = Lt -> compare (String b x) z = Lt)

  
  b : Byte.byte
  x : string
  IHx : forall y z : t,
        compare x y = Lt -> compare y z = Lt -> compare x z = Lt
  b0 : Byte.byte
  y : string
  ============================
   (forall z : t,
    compare (String b x) (String b0 y) = Lt ->
    compare (String b0 y) z = Lt -> compare (String b x) z = Lt)


DEBUG:Going to execute:
simpl

Goals:
  
  ============================
   (forall z : t,
    Eq = Lt ->
    match z with
    | ""%bs => Eq
    | String _ _ => Lt
    end = Lt -> match z with
                | ""%bs => Eq
                | String _ _ => Lt
                end = Lt)

    b : Byte.byte  y : string
  ============================
   (forall z : t,
    Lt = Lt ->
    match z with
    | ""%bs => Gt
    | String y0 ys =>
        match ByteCompare.compare b y0 with
        | Eq => compare y ys
        | Lt => Lt
        | Gt => Gt
        end
    end = Lt -> match z with
                | ""%bs => Eq
                | String _ _ => Lt
                end = Lt)

  
  b : Byte.byte
  x : string
  IHx : forall y z : t,
        compare x y = Lt -> compare y z = Lt -> compare x z = Lt
  ============================
   (forall z : t,
    Gt = Lt ->
    match z with
    | ""%bs => Eq
    | String _ _ => Lt
    end = Lt ->
    match z with
    | ""%bs => Gt
    | String y ys =>
        match ByteCompare.compare b y with
        | Eq => compare x ys
        | Lt => Lt
        | Gt => Gt
        end
    end = Lt)

  
  b : Byte.byte
  x : string
  IHx : forall y z : t,
        compare x y = Lt -> compare y z = Lt -> compare x z = Lt
  b0 : Byte.byte
  y : string
  ============================
   (forall z : t,
    match ByteCompare.compare b b0 with
    | Eq => compare x y
    | Lt => Lt
    | Gt => Gt
    end = Lt ->
    match z with
    | ""%bs => Gt
    | String y0 ys =>
        match ByteCompare.compare b0 y0 with
        | Eq => compare y ys
        | Lt => Lt
        | Gt => Gt
        end
    end = Lt ->
    match z with
    | ""%bs => Gt
    | String y ys =>
        match ByteCompare.compare b y with
        | Eq => compare x ys
        | Lt => Lt
        | Gt => Gt
        end
    end = Lt)


DEBUG:Going to execute:
try congruence