Goal:
  
  X : Type
  f : X → bool
  a : X
  xs : list X
  IHxs : BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|) (BinInt.Z.of_nat #|xs|)
  cstr : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|xs|)
  cstr0 : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|filter f xs|)
  ============================
   (BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|)
      (BinInt.Z.add (BinInt.Z.of_nat #|xs|) (BinNums.Zpos BinNums.xH)))


DEBUG:Going to execute:
idtac

Goals:
  
  X : Type
  f : X → bool
  a : X
  xs : list X
  IHxs : BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|) (BinInt.Z.of_nat #|xs|)
  cstr : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|xs|)
  cstr0 : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|filter f xs|)
  ============================
   (BinInt.Z.le
      (BinInt.Z.add (BinInt.Z.of_nat #|filter f xs|)
         (BinNums.Zpos BinNums.xH))
      (BinInt.Z.add (BinInt.Z.of_nat #|xs|) (BinNums.Zpos BinNums.xH)))

  
  X : Type
  f : X → bool
  a : X
  xs : list X
  IHxs : BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|) (BinInt.Z.of_nat #|xs|)
  cstr : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|xs|)
  cstr0 : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|filter f xs|)
  ============================
   (BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|)
      (BinInt.Z.add (BinInt.Z.of_nat #|xs|) (BinNums.Zpos BinNums.xH)))


DEBUG:Going to execute:
Zify.zify_post_hook

Goals:
  
  X : Type
  f : X → bool
  a : X
  xs : list X
  IHxs : BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|) (BinInt.Z.of_nat #|xs|)
  cstr : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|xs|)
  cstr0 : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|filter f xs|)
  ============================
   (BinInt.Z.le
      (BinInt.Z.add (BinInt.Z.of_nat #|filter f xs|)
         (BinNums.Zpos BinNums.xH))
      (BinInt.Z.add (BinInt.Z.of_nat #|xs|) (BinNums.Zpos BinNums.xH)))

  
  X : Type
  f : X → bool
  a : X
  xs : list X
  IHxs : BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|) (BinInt.Z.of_nat #|xs|)
  cstr : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|xs|)
  cstr0 : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|filter f xs|)
  ============================
   (BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|)
      (BinInt.Z.add (BinInt.Z.of_nat #|xs|) (BinNums.Zpos BinNums.xH)))


DEBUG:Going to execute:
idtac

Goals:
  
  X : Type
  f : X → bool
  a : X
  xs : list X
  IHxs : BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|) (BinInt.Z.of_nat #|xs|)
  cstr : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|xs|)
  cstr0 : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|filter f xs|)
  ============================
   (BinInt.Z.le
      (BinInt.Z.add (BinInt.Z.of_nat #|filter f xs|)
         (BinNums.Zpos BinNums.xH))
      (BinInt.Z.add (BinInt.Z.of_nat #|xs|) (BinNums.Zpos BinNums.xH)))

  
  X : Type
  f : X → bool
  a : X
  xs : list X
  IHxs : BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|) (BinInt.Z.of_nat #|xs|)
  cstr : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|xs|)
  cstr0 : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|filter f xs|)
  ============================
   (BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|)
      (BinInt.Z.add (BinInt.Z.of_nat #|xs|) (BinNums.Zpos BinNums.xH)))


DEBUG:Going to execute:
zify_saturate

Goals:
  
  X : Type
  f : X → bool
  a : X
  xs : list X
  IHxs : BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|) (BinInt.Z.of_nat #|xs|)
  cstr : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|xs|)
  cstr0 : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|filter f xs|)
  ============================
   (BinInt.Z.le
      (BinInt.Z.add (BinInt.Z.of_nat #|filter f xs|)
         (BinNums.Zpos BinNums.xH))
      (BinInt.Z.add (BinInt.Z.of_nat #|xs|) (BinNums.Zpos BinNums.xH)))

  
  X : Type
  f : X → bool
  a : X
  xs : list X
  IHxs : BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|) (BinInt.Z.of_nat #|xs|)
  cstr : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|xs|)
  cstr0 : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|filter f xs|)
  ============================
   (BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|)
      (BinInt.Z.add (BinInt.Z.of_nat #|xs|) (BinNums.Zpos BinNums.xH)))


DEBUG:Going to execute:
<coq-core.plugins.zify::TRANS@1>

Goals:
  
  X : Type
  f : X → bool
  a : X
  xs : list X
  IHxs : BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|) (BinInt.Z.of_nat #|xs|)
  cstr : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|xs|)
  cstr0 : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|filter f xs|)
  ============================
   (BinInt.Z.le
      (BinInt.Z.add (BinInt.Z.of_nat #|filter f xs|)
         (BinNums.Zpos BinNums.xH))
      (BinInt.Z.add (BinInt.Z.of_nat #|xs|) (BinNums.Zpos BinNums.xH)))

  
  X : Type
  f : X → bool
  a : X
  xs : list X
  IHxs : BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|) (BinInt.Z.of_nat #|xs|)
  cstr : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|xs|)
  cstr0 : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|filter f xs|)
  ============================
   (BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|)
      (BinInt.Z.add (BinInt.Z.of_nat #|xs|) (BinNums.Zpos BinNums.xH)))


DEBUG:Going to execute:
xlia zchecker

Goals:
  
  X : Type
  f : X → bool
  a : X
  xs : list X
  IHxs : BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|) (BinInt.Z.of_nat #|xs|)
  cstr : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|xs|)
  cstr0 : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|filter f xs|)
  ============================
   (BinInt.Z.le
      (BinInt.Z.add (BinInt.Z.of_nat #|filter f xs|)
         (BinNums.Zpos BinNums.xH))
      (BinInt.Z.add (BinInt.Z.of_nat #|xs|) (BinNums.Zpos BinNums.xH)))

  
  X : Type
  f : X → bool
  a : X
  xs : list X
  IHxs : BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|) (BinInt.Z.of_nat #|xs|)
  cstr : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|xs|)
  cstr0 : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|filter f xs|)
  ============================
   (BinInt.Z.le (BinInt.Z.of_nat #|filter f xs|)
      (BinInt.Z.add (BinInt.Z.of_nat #|xs|) (BinNums.Zpos BinNums.xH)))


DEBUG:Going to execute:
<coq-core.plugins.micromega::Lia@0> $1