(** A library of Bellantoni-Cook functions on bitstrings without numerical interpretation *)

Require Import Bool Arith Even List.
Require Import BellantoniCook.Lib BellantoniCook.Bitstring BellantoniCook.BC.

(** * Swapping of two arguments

  - arities: (2, 0)
*)

Definition inv_e (e : BC) : BC :=
  comp 2 0 e (proj 2 0 1 :: proj 2 0 0 :: nil) nil.

(** * Conversion from arities (1, 1) to (2, 0) *)

Definition from_11_to_20 (e : BC) : BC :=
  comp 2 0 e (proj 2 0 0 :: nil) (proj 2 0 1 :: nil).

Lemma from_11_to_20_correct e v1 v2 :
  sem e [v1] [v2] = sem (from_11_to_20 e) [v1 ; v2] nil.
Proof.
(* Goal: @eq nat (bs2nat (sem (false_e n s) l1 l2)) O *)
 intros; simpl; trivial.
Qed.

(** * Concatenation of bitstrings

  - arities: (1, 1)
*)

Definition app_e : BC :=
  rec (proj 0 1 0)
      (comp 1 2 (succ false) nil ((proj 1 2 1) :: nil))
      (comp 1 2 (succ true) nil ((proj 1 2 1) :: nil)).

Lemma app_correct v1 v2 :
  sem app_e [v1] [v2] = v1 ++ v2.
Proof.
(* Goal: @eq (list bool) (sem app_e (@cons (list bool) v1 (@nil (list bool))) (@cons (list bool) v2 (@nil (list bool)))) (@app bool v1 v2) *)
 induction v1; simpl in *; trivial.
(* Goal: @eq (list bool) (if a then @cons bool true (sem_rec (fun _ vsl : list (list bool) => @nth (list bool) O vsl (@nil bool)) (fun _ vsl : list (list bool) => @cons bool false (@nth (list bool) O vsl (@nil bool))) (fun _ vsl : list (list bool) => @cons bool true (@nth (list bool) O vsl (@nil bool))) v1 (@nil (list bool)) (@cons (list bool) v2 (@nil (list bool)))) else @cons bool false (sem_rec (fun _ vsl : list (list bool) => @nth (list bool) O vsl (@nil bool)) (fun _ vsl : list (list bool) => @cons bool false (@nth (list bool) O vsl (@nil bool))) (fun _ vsl : list (list bool) => @cons bool true (@nth (list bool) O vsl (@nil bool))) v1 (@nil (list bool)) (@cons (list bool) v2 (@nil (list bool))))) (@cons bool a (@app bool v1 v2)) *)
 intros; rewrite IHv1.
(* Goal: @eq (list bool) (if a then @cons bool true (@app bool v1 v2) else @cons bool false (@app bool v1 v2)) (@cons bool a (@app bool v1 v2)) *)
 case a; trivial.
Qed.

(** * constant function *)

Program Fixpoint constant (v:bs) : { e : BC | arities e = ok_arities 0 0 /\ sem e nil nil = v } :=
  match v with
  | nil => BC.zero
  | b :: v' => BC.comp 0 0 (BC.succ b) nil [constant v']
  end.

Next Obligation.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: and (@eq Arities (if andb (aeq (ok_arities O O) (ok_arities O O)) true then ok_arities O O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities O O) (@nil Arities))) (ok_arities O O)) (@eq (list bool) (@cons bool b v') (@cons bool b v')) *)
tauto.
Qed.

Next Obligation.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: forall (constant : @Tactics.fix_proto Set (forall v : list bool, @sig BC (fun e : BC => and (@eq Arities (arities e) (ok_arities O O)) (@eq (list bool) (sem e (@nil (list bool)) (@nil (list bool))) v)))) (v : list bool) (b : bool) (v' : list bool) (_ : @eq (list bool) (@cons bool b v') v), and (@eq Arities (if andb (aeq (arities (@proj1_sig BC (fun e : BC => and (@eq Arities (arities e) (ok_arities O O)) (@eq (list bool) (sem e (@nil (list bool)) (@nil (list bool))) v')) (constant v'))) (ok_arities O O)) true then ok_arities O O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities (@proj1_sig BC (fun e : BC => and (@eq Arities (arities e) (ok_arities O O)) (@eq (list bool) (sem e (@nil (list bool)) (@nil (list bool))) v')) (constant v'))) (@nil Arities))) (ok_arities O O)) (@eq (list bool) (@cons bool b (sem (@proj1_sig BC (fun e : BC => and (@eq Arities (arities e) (ok_arities O O)) (@eq (list bool) (sem e (@nil (list bool)) (@nil (list bool))) v')) (constant v')) (@nil (list bool)) (@nil (list bool)))) (@cons bool b v')) *)
intros bs_to_BC v b v' Hv.
(* Goal: and (@eq Arities (if andb (aeq (arities (@proj1_sig BC (fun e : BC => and (@eq Arities (arities e) (ok_arities O O)) (@eq (list bool) (sem e (@nil (list bool)) (@nil (list bool))) v')) (bs_to_BC v'))) (ok_arities O O)) true then ok_arities O O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities (@proj1_sig BC (fun e : BC => and (@eq Arities (arities e) (ok_arities O O)) (@eq (list bool) (sem e (@nil (list bool)) (@nil (list bool))) v')) (bs_to_BC v'))) (@nil Arities))) (ok_arities O O)) (@eq (list bool) (@cons bool b (sem (@proj1_sig BC (fun e : BC => and (@eq Arities (arities e) (ok_arities O O)) (@eq (list bool) (sem e (@nil (list bool)) (@nil (list bool))) v')) (bs_to_BC v')) (@nil (list bool)) (@nil (list bool)))) (@cons bool b v')) *)
subst v.
(* Goal: and (@eq Arities (if andb (aeq (arities (@proj1_sig BC (fun e : BC => and (@eq Arities (arities e) (ok_arities O O)) (@eq (list bool) (sem e (@nil (list bool)) (@nil (list bool))) v')) (bs_to_BC v'))) (ok_arities O O)) true then ok_arities O O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities (@proj1_sig BC (fun e : BC => and (@eq Arities (arities e) (ok_arities O O)) (@eq (list bool) (sem e (@nil (list bool)) (@nil (list bool))) v')) (bs_to_BC v'))) (@nil Arities))) (ok_arities O O)) (@eq (list bool) (@cons bool b (sem (@proj1_sig BC (fun e : BC => and (@eq Arities (arities e) (ok_arities O O)) (@eq (list bool) (sem e (@nil (list bool)) (@nil (list bool))) v')) (bs_to_BC v')) (@nil (list bool)) (@nil (list bool)))) (@cons bool b v')) *)
destruct (bs_to_BC v') as [e [H1 H2] ].
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: and (@eq Arities (if andb (aeq (arities e) (ok_arities O O)) true then ok_arities O O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities e) (@nil Arities))) (ok_arities O O)) (@eq (list bool) (@cons bool b (sem e (@nil (list bool)) (@nil (list bool)))) (@cons bool b v')) *)
rewrite H1, H2.
(* Goal: and (@eq Arities (if andb (aeq (ok_arities O O) (ok_arities O O)) true then ok_arities O O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities O O) (@nil Arities))) (ok_arities O O)) (@eq (list bool) (@cons bool b v') (@cons bool b v')) *)
tauto.
Defined.


(** * Recursion on the length of a bitstring, i.e., ignoring the value 0 or 1 of bits *)

Definition rec2 g h := rec g h h.

Lemma rec2_correct v1 v2 g h0 h1 :
  unary (hd nil v1) = true ->
  sem (rec g h0 h1) v1 v2 = sem (rec2 g h1) v1 v2.
Proof.
(* Goal: forall _ : @eq bool (unary (@hd (list bool) (@nil bool) v1)) true, @eq (list bool) (sem (rec g h0 h1) v1 v2) (sem (rec2 g h1) v1 v2) *)
 intros; simpl; revert H.
(* Goal: forall _ : @eq bool (unary (@hd (list bool) (@nil bool) v1)) true, @eq (list bool) (sem_rec (sem g) (sem h0) (sem h1) (@hd (list bool) (@nil bool) v1) (@tl (list bool) v1) v2) (sem_rec (sem g) (sem h1) (sem h1) (@hd (list bool) (@nil bool) v1) (@tl (list bool) v1) v2) *)
 induction (hd nil v1); simpl; trivial; intros.
(* Goal: @eq (list bool) (if a then sem h1 (@cons (list bool) l (@tl (list bool) v1)) (@cons (list bool) (sem_rec (sem g) (sem h0) (sem h1) l (@tl (list bool) v1) v2) v2) else sem h0 (@cons (list bool) l (@tl (list bool) v1)) (@cons (list bool) (sem_rec (sem g) (sem h0) (sem h1) l (@tl (list bool) v1) v2) v2)) (if a then sem h1 (@cons (list bool) l (@tl (list bool) v1)) (@cons (list bool) (sem_rec (sem g) (sem h1) (sem h1) l (@tl (list bool) v1) v2) v2) else sem h1 (@cons (list bool) l (@tl (list bool) v1)) (@cons (list bool) (sem_rec (sem g) (sem h1) (sem h1) l (@tl (list bool) v1) v2) v2)) *)
 rewrite andb_true_iff in H.
(* Goal: @eq (list bool) (if a then sem h1 (@cons (list bool) l (@tl (list bool) v1)) (@cons (list bool) (sem_rec (sem g) (sem h0) (sem h1) l (@tl (list bool) v1) v2) v2) else sem h0 (@cons (list bool) l (@tl (list bool) v1)) (@cons (list bool) (sem_rec (sem g) (sem h0) (sem h1) l (@tl (list bool) v1) v2) v2)) (if a then sem h1 (@cons (list bool) l (@tl (list bool) v1)) (@cons (list bool) (sem_rec (sem g) (sem h1) (sem h1) l (@tl (list bool) v1) v2) v2) else sem h1 (@cons (list bool) l (@tl (list bool) v1)) (@cons (list bool) (sem_rec (sem g) (sem h1) (sem h1) l (@tl (list bool) v1) v2) v2)) *)
 decompose [and] H; clear H.
(* Goal: @eq (list bool) (if a then sem h1 (@cons (list bool) l (@tl (list bool) v1)) (@cons (list bool) (sem_rec (sem g) (sem h0) (sem h1) l (@tl (list bool) v1) v2) v2) else sem h0 (@cons (list bool) l (@tl (list bool) v1)) (@cons (list bool) (sem_rec (sem g) (sem h0) (sem h1) l (@tl (list bool) v1) v2) v2)) (if a then sem h1 (@cons (list bool) l (@tl (list bool) v1)) (@cons (list bool) (sem_rec (sem g) (sem h1) (sem h1) l (@tl (list bool) v1) v2) v2) else sem h1 (@cons (list bool) l (@tl (list bool) v1)) (@cons (list bool) (sem_rec (sem g) (sem h1) (sem h1) l (@tl (list bool) v1) v2) v2)) *)
 destruct a.
(* Goal: and (@eq Arities (if andb (aeq (ok_arities O O) (ok_arities O O)) true then ok_arities O O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities O O) (@nil Arities))) (ok_arities O O)) (@eq (list bool) (@cons bool b v') (@cons bool b v')) *)
 rewrite IHl; trivial; tauto.
(* Goal: @eq (list bool) (sem h0 (@cons (list bool) l (@tl (list bool) v1)) (@cons (list bool) (sem_rec (sem g) (sem h0) (sem h1) l (@tl (list bool) v1) v2) v2)) (sem h1 (@cons (list bool) l (@tl (list bool) v1)) (@cons (list bool) (sem_rec (sem g) (sem h1) (sem h1) l (@tl (list bool) v1) v2) v2)) *)
 unfold id in H0; discriminate.
Qed.

Lemma rec2_simpl g h i z l1 l2 :
  sem (rec2 g h) ((i :: z) :: l1) l2 = sem h (z :: l1) (sem_rec (sem g) (sem h) (sem h) z l1 l2 :: l2).
Proof. intros; simpl; case i; trivial. Qed. 

Lemma rec2_sem_rec g h z l1 l2 :
  sem (rec2 g h) (z :: l1) l2 = sem_rec (sem g) (sem h) (sem h) z l1 l2.
(* Goal: @eq nat (bs2nat (sem (false_e n s) l1 l2)) O *)
Proof.  intros; simpl; trivial. Qed. 

Definition cond2 n s x g h0 h1 : BC :=
  comp n s
    cond nil [
      x;
      g;
      comp n s h0
        (map (proj n 0) (seq 0 n))
        (comp n s pred nil [x] :: map (proj n s) (seq n s));
      comp n s h1
        (map (proj n 0) (seq 0 n))
        (comp n s pred nil [x] :: map (proj n s) (seq n s))
    ].

Lemma arities_cond2 n s x g h0 h1
  (Hx : arities x = ok_arities n s)
  (Hg : arities g = ok_arities n s)
  (Hh0 : arities h0 = ok_arities n (S s))
  (Hh1 : arities h1 = ok_arities n (S s)) :
  arities (cond2 n s x g h0 h1) = ok_arities n s.
Proof.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq Arities (if andb (aeq (arities x) (ok_arities n s)) (andb (aeq (arities g) (ok_arities n s)) (andb (aeq match arities h0 with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) | error_comp a l l0 => error_comp (error_comp a l l0) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (@length BC (@map nat BC (proj n O) (seq O n)))) (Nat.eqb hs (S (@length BC (@map nat BC (proj n s) (seq n s)))))) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (andb (aeq (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (ok_arities n s)) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s)))) then ok_arities n s else error_comp (ok_arities hn hs) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) end (ok_arities n s)) (andb (aeq match arities h1 with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) | error_comp a l l0 => error_comp (error_comp a l l0) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (@length BC (@map nat BC (proj n O) (seq O n)))) (Nat.eqb hs (S (@length BC (@map nat BC (proj n s) (seq n s)))))) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (andb (aeq (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (ok_arities n s)) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s)))) then ok_arities n s else error_comp (ok_arities hn hs) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) end (ok_arities n s)) true))) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (arities x) (@cons Arities (arities g) (@cons Arities match arities h0 with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) | error_comp a l l0 => error_comp (error_comp a l l0) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (@length BC (@map nat BC (proj n O) (seq O n)))) (Nat.eqb hs (S (@length BC (@map nat BC (proj n s) (seq n s)))))) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (andb (aeq (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (ok_arities n s)) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s)))) then ok_arities n s else error_comp (ok_arities hn hs) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) end (@cons Arities match arities h1 with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) | error_comp a l l0 => error_comp (error_comp a l l0) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (@length BC (@map nat BC (proj n O) (seq O n)))) (Nat.eqb hs (S (@length BC (@map nat BC (proj n s) (seq n s)))))) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (andb (aeq (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (ok_arities n s)) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s)))) then ok_arities n s else error_comp (ok_arities hn hs) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (if andb (aeq (arities x) (ok_arities n s)) true then ok_arities n s else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (arities x) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) end (@nil Arities)))))) (ok_arities n s) *)
rewrite Hx, Hg, Hh0, Hh1.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq Arities (if andb (andb (andb (Nat.eqb n n) (Nat.eqb s s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
do 2 rewrite <- beq_nat_refl.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq Arities match (if andb (andb (andb (Nat.eqb n (@length BC (@map nat BC (proj (S n) O) (seq (S O) n)))) (Nat.eqb s (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (andb (andb (Nat.eqb n (@length BC (@map nat BC (proj (S n) O) (seq (S O) n)))) (Nat.eqb s (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (andb (andb (Nat.eqb n (@length BC (@map nat BC (proj (S n) O) (seq (S O) n)))) (Nat.eqb s (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (andb (andb (Nat.eqb n (@length BC (@map nat BC (proj (S n) O) (seq (S O) n)))) (Nat.eqb s (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (andb (andb (Nat.eqb n (@length BC (@map nat BC (proj (S n) O) (seq (S O) n)))) (Nat.eqb s (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end (ok_arities (S n) s) *)
do 2 rewrite map_length, seq_length.
(* Goal: @eq Arities (if andb (andb (andb (Nat.eqb n n) (Nat.eqb s s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
do 2 rewrite <- beq_nat_refl.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
match goal with
| |- context [forallb ?P ?l] => case_eq (forallb P l); intro H1
end.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
match goal with
| |- context [forallb ?P ?l] => case_eq (forallb P l); intro H2
end.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq Arities (if andb (andb (andb (Nat.eqb n n) (Nat.eqb s s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
do 2 rewrite <- beq_nat_refl.
(* Goal: @eq Arities (ok_arities n s) (ok_arities n s) *)
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
reflexivity.
(* Goal: @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
rewrite forallb_forall_conv in H2.
(* Goal: @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
destruct H2 as [e [H2 H3] ].
(* Goal: @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
rewrite in_map_iff in H2.
(* Goal: @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
destruct H2 as [p [H2 H4] ].
(* Goal: @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
rewrite in_seq_iff in H4.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
subst e.
(* Goal: @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
simpl in H3.
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
case_eq (n + s).
(* Goal: forall _ : @eq nat (Init.Nat.add n s) O, @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n s) (S n0)), @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
intro H5.
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
contradict H5.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n s) (S n0)), @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
intros q H5.
(* Goal: @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
rewrite H5 in H3.
(* Goal: @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
case_eq (leb p q); intro H6.
(* Goal: @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
rewrite H6 in H3.
(* Goal: @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
simpl in H3.
(* Goal: @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
do 2 rewrite <- beq_nat_refl in H3.
(* Goal: @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
discriminate H3.
(* Goal: @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
rewrite leb_iff_conv in H6.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n (S s)) (S n0)), @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
contradict H6.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite forallb_forall_conv in H1.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
destruct H1 as [e [H1 H2] ].
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite in_map_iff in H1.
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
destruct H1 as [p [H1 H3] ].
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite in_seq_iff in H3.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
subst e.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
simpl in H2.
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
case_eq (n + 0).
(* Goal: forall _ : @eq nat (Init.Nat.add n O) O, @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n O) (S n0)), @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
intro H4.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
contradict H4.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n O) (S n0)), @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
intros q H4.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite H4 in H2.
(* Goal: forall _ : @eq nat (Init.Nat.add n s) O, @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n s) (S n0)), @eq Arities (if andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
case_eq (leb p q); intro H5.
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
rewrite H5 in H2.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
simpl in H2.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite <- beq_nat_refl in H2.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
discriminate H2.
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
rewrite leb_iff_conv in H5.
(* Goal: @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
contradict H5.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
Qed.

Definition cond2_correct n s x g h0 h1 vnl vsl :
  length vnl = n ->
  length vsl = s ->
  sem (cond2 n s x g h0 h1) vnl vsl =
  match sem x vnl vsl with
  | nil => sem g vnl vsl
  | true  :: _ => sem h0 vnl (tl (sem x vnl vsl) :: vsl)
  | false :: _ => sem h1 vnl (tl (sem x vnl vsl) :: vsl)
  end.
Proof.
(* Goal: forall (_ : @eq nat (@length (list bool) vnl) n) (_ : @eq nat (@length (list bool) vsl) s), @eq (list bool) (sem (rec3 n s x g h) vnl vsl) (sem_rec1 g h (sem x vnl (@nil (list bool))) vnl vsl) *)
intros Hn Hs.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
destruct (sem x vnl vsl) as [ | [ | ] v]; simpl.
(* Goal: @eq Arities (ok_arities n s) (ok_arities n s) *)
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
reflexivity.
(* Goal: @eq (list (list bool)) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))) vnl *)
(* Goal: @eq (list (list bool)) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite map_proj_seq_normal.
(* Goal: @eq (list (list bool)) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite map_proj_seq_safe.
(* Goal: @eq (list bool) (@skipn bool (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) y) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
f_equal.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) n vnl) (@repeat (list bool) (Init.Nat.sub n (@length (list bool) vnl)) (@nil bool))) vnl *)
(* Goal: @eq (list (list bool)) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
subst n.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) (@length (list bool) vsl) vsl) (@repeat (list bool) (Init.Nat.sub (@length (list bool) vsl) (@length (list bool) vsl)) (@nil bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite minus_diag.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) (@length (list bool) vsl) vsl) (@nil (list bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite app_nil_r.
(* Goal: @eq (list (list bool)) (@firstn (list bool) (@length (list bool) vnl) vnl) vnl *)
(* Goal: @eq (list (list bool)) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite <- (app_nil_r vnl) at 2.
(* Goal: @eq (list (list bool)) (@firstn (list bool) (@length (list bool) vsl) (@app (list bool) vsl (@nil (list bool)))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
apply firstn_app.
(* Goal: @eq (list bool) (@skipn bool (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) y) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
f_equal.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) s vsl) (@repeat (list bool) (Init.Nat.sub s (@length (list bool) vsl)) (@nil bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
subst s.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) (@length (list bool) vsl) vsl) (@repeat (list bool) (Init.Nat.sub (@length (list bool) vsl) (@length (list bool) vsl)) (@nil bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite minus_diag.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) (@length (list bool) vsl) vsl) (@nil (list bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite app_nil_r.
(* Goal: @eq (list (list bool)) (@firstn (list bool) (@length (list bool) vsl) vsl) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite <- (app_nil_r vsl) at 2.
(* Goal: @eq (list (list bool)) (@firstn (list bool) (@length (list bool) vsl) (@app (list bool) vsl (@nil (list bool)))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
apply firstn_app.
(* Goal: @eq (list (list bool)) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))) vnl *)
(* Goal: @eq (list (list bool)) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite map_proj_seq_normal.
(* Goal: @eq (list (list bool)) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite map_proj_seq_safe.
(* Goal: @eq (list bool) (@skipn bool (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) y) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
f_equal.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) n vnl) (@repeat (list bool) (Init.Nat.sub n (@length (list bool) vnl)) (@nil bool))) vnl *)
(* Goal: @eq (list (list bool)) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
subst n.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) (@length (list bool) vsl) vsl) (@repeat (list bool) (Init.Nat.sub (@length (list bool) vsl) (@length (list bool) vsl)) (@nil bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite minus_diag.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) (@length (list bool) vsl) vsl) (@nil (list bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite app_nil_r.
(* Goal: @eq (list (list bool)) (@firstn (list bool) (@length (list bool) vnl) vnl) vnl *)
(* Goal: @eq (list (list bool)) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite <- (app_nil_r vnl) at 2.
(* Goal: @eq (list (list bool)) (@firstn (list bool) (@length (list bool) vsl) (@app (list bool) vsl (@nil (list bool)))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
apply firstn_app.
(* Goal: @eq (list bool) (@skipn bool (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) y) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
f_equal.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) s vsl) (@repeat (list bool) (Init.Nat.sub s (@length (list bool) vsl)) (@nil bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
subst s.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) (@length (list bool) vsl) vsl) (@repeat (list bool) (Init.Nat.sub (@length (list bool) vsl) (@length (list bool) vsl)) (@nil bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite minus_diag.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) (@length (list bool) vsl) vsl) (@nil (list bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite app_nil_r.
(* Goal: @eq (list (list bool)) (@firstn (list bool) (@length (list bool) vsl) vsl) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite <- (app_nil_r vsl) at 2.
(* Goal: @eq (list (list bool)) (@firstn (list bool) (@length (list bool) vsl) (@app (list bool) vsl (@nil (list bool)))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
apply firstn_app.
Qed.

(** * Recursion with one function [h] taking [i] instead of two function [h]_[i] *)

Definition rec1 n s g h :=
  rec
    g
    (comp (S n) (S s) h
      (comp (S n) 0 (succ false) nil [proj (S n) 0 0] ::
       map (proj (S n) 0)     (seq 1     n))
      (map (proj (S n) (S s)) (seq (S n) (S s))))
    (comp (S n) (S s) h
      (comp (S n) 0 (succ true) nil [proj (S n) 0 0] ::
       map (proj (S n) 0)     (seq 1     n))
      (map (proj (S n) (S s)) (seq (S n) (S s)))).

Lemma sem_rec_false g h0 h1 vnl vsl v :
  sem (rec g h0 h1) ((false :: v) :: vnl) vsl =
  sem h0 (v :: vnl) (sem (rec g h0 h1) (v :: vnl) vsl :: vsl).
Proof.
(* Goal: @eq Arities (ok_arities n s) (ok_arities n s) *)
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
reflexivity.
Qed.

Lemma sem_rec_true g h0 h1 vnl vsl v :
  sem (rec g h0 h1) ((true :: v) :: vnl) vsl =
  sem h1 (v :: vnl) (sem (rec g h0 h1) (v :: vnl) vsl :: vsl).
Proof.
(* Goal: @eq Arities (ok_arities n s) (ok_arities n s) *)
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
reflexivity.
Qed.

Lemma rec1_arities n s g h
  (Hg : arities g = ok_arities n s)
  (Hh : arities h = ok_arities (S n) (S s)) :
  arities (rec1 n s g h) = ok_arities (S n) s.
Proof.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq Arities match arities g with | error_rec a a0 a1 => error_rec (error_rec a a0 a1) match arities h with | error_rec a2 a3 a4 => error_comp (error_rec a2 a3 a4) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a2 l l0 => error_comp (error_comp a2 l l0) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end match arities h with | error_rec a2 a3 a4 => error_comp (error_rec a2 a3 a4) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a2 l l0 => error_comp (error_comp a2 l l0) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end | error_comp a l l0 => error_rec (error_comp a l l0) match arities h with | error_rec a0 a1 a2 => error_comp (error_rec a0 a1 a2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a0 l1 l2 => error_comp (error_comp a0 l1 l2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end match arities h with | error_rec a0 a1 a2 => error_comp (error_rec a0 a1 a2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a0 l1 l2 => error_comp (error_comp a0 l1 l2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end | error_proj n0 n1 n2 => error_rec (error_proj n0 n1 n2) match arities h with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n3 n4 n5 => error_comp (error_proj n3 n4 n5) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end match arities h with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n3 n4 n5 => error_comp (error_proj n3 n4 n5) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end | ok_arities gn gs => match match arities h with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end with | error_rec a a0 a1 => error_rec (ok_arities gn gs) (error_rec a a0 a1) match arities h with | error_rec a2 a3 a4 => error_comp (error_rec a2 a3 a4) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a2 l l0 => error_comp (error_comp a2 l l0) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end | error_comp a l l0 => error_rec (ok_arities gn gs) (error_comp a l l0) match arities h with | error_rec a0 a1 a2 => error_comp (error_rec a0 a1 a2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a0 l1 l2 => error_comp (error_comp a0 l1 l2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end | error_proj n0 n1 n2 => error_rec (ok_arities gn gs) (error_proj n0 n1 n2) match arities h with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n3 n4 n5 => error_comp (error_proj n3 n4 n5) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end | ok_arities h0n h0s => match match arities h with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end with | error_rec a a0 a1 => error_rec (ok_arities gn gs) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities gn gs) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n n0 n1 => error_rec (ok_arities gn gs) (ok_arities h0n h0s) (error_proj n n0 n1) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb gn m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb gs m' end) (Nat.eqb h0s h1s) then ok_arities h0n gs else error_rec (ok_arities gn gs) (ok_arities h0n h0s) (ok_arities h1n h1s) end end end (ok_arities (S n) s) *)
rewrite Hg, Hh.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq Arities match (if andb (andb (andb (Nat.eqb n (@length BC (@map nat BC (proj (S n) O) (seq (S O) n)))) (Nat.eqb s (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (andb (andb (Nat.eqb n (@length BC (@map nat BC (proj (S n) O) (seq (S O) n)))) (Nat.eqb s (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (andb (andb (Nat.eqb n (@length BC (@map nat BC (proj (S n) O) (seq (S O) n)))) (Nat.eqb s (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (andb (andb (Nat.eqb n (@length BC (@map nat BC (proj (S n) O) (seq (S O) n)))) (Nat.eqb s (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (andb (andb (Nat.eqb n (@length BC (@map nat BC (proj (S n) O) (seq (S O) n)))) (Nat.eqb s (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end (ok_arities (S n) s) *)
do 2 rewrite map_length, seq_length.
(* Goal: @eq Arities (if andb (andb (andb (Nat.eqb n n) (Nat.eqb s s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
do 2 rewrite <- beq_nat_refl.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq Arities match match (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite <- beq_nat_refl.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
match goal with
| |- context [forallb ?P ?l] => case_eq (forallb P l); intro H1
end.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
case_eq (n + S s).
(* Goal: forall _ : @eq nat (Init.Nat.add n (S s)) O, @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n (S s)) (S n0)), @eq Arities match match (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n1 n2 n3 => error_rec (ok_arities n s) (error_proj n1 n2 n3) (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n1 n2 n3 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n1 n2 n3) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n1 n2 n3 => error_comp (error_proj n1 n2 n3) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
intro H2.
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n (S s)) (S n0)), @eq Arities match match (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n1 n2 n3 => error_rec (ok_arities n s) (error_proj n1 n2 n3) (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n1 n2 n3 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n1 n2 n3) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n1 n2 n3 => error_comp (error_proj n1 n2 n3) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
contradict H2.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n (S s)) (S n0)), @eq Arities match match (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n1 n2 n3 => error_rec (ok_arities n s) (error_proj n1 n2 n3) (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n1 n2 n3 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n1 n2 n3) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n1 n2 n3 => error_comp (error_proj n1 n2 n3) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
intros p H2.
(* Goal: @eq Arities match match (if andb (aeq (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
case_eq (leb n p); intro H3.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq Arities (if andb (andb (andb (Nat.eqb n n) (Nat.eqb s s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
do 2 rewrite <- beq_nat_refl.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
match goal with
| |- context [forallb ?P ?l] => case_eq (forallb P l); intro H4
end.
(* Goal: @eq Arities match match (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
do 4 rewrite <- beq_nat_refl.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq Arities (ok_arities n s) (ok_arities n s) *)
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
reflexivity.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite forallb_forall_conv in H4.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
destruct H4 as [e [H4 H5] ].
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite in_map_iff in H4.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
destruct H4 as [q [H4 H6] ].
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite in_seq_iff in H6.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
subst e.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
simpl in H5.
(* Goal: @eq Arities (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (ok_arities (S n) s) *)
(* Goal: @eq Arities match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end (ok_arities (S n) s) *)
(* Goal: @eq Arities match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end (ok_arities (S n) s) *)
case_eq (leb q (n + S s)); intro H7.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite H7 in H5.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
simpl in H5.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
do 2 rewrite <- beq_nat_refl in H5.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
discriminate H5.
(* Goal: @eq Arities (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (ok_arities (S n) s) *)
(* Goal: @eq Arities match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end (ok_arities (S n) s) *)
(* Goal: @eq Arities match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end (ok_arities (S n) s) *)
rewrite leb_iff_conv in H7.
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n O) (S n0)), @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
contradict H7.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite leb_iff_conv in H3.
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
contradict H3.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite forallb_forall_conv in H1.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
destruct H1 as [e [H1 H2] ].
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite in_map_iff in H1.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
destruct H1 as [q [H1 H3] ].
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite in_seq_iff in H3.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
subst e.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
simpl in H2.
(* Goal: forall _ : @eq nat (Init.Nat.add n O) O, @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n O) (S n0)), @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
case_eq (leb q (n+0)); intro H4.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite H4 in H2.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
simpl in H2.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite <- beq_nat_refl in H2.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
discriminate H2.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite leb_iff_conv in H4.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
contradict H4.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
Qed.

Fixpoint sem_rec1
  (g h:BC)(v : bs)(vnl vsl : list bs) {struct v} :=
  match v with
    | nil => sem g vnl vsl
    | _::v' => sem h (v::vnl) (sem_rec1 g h v' vnl vsl :: vsl)
  end.

Lemma rec1_correct n s g h vnl vsl :
  length vnl = S n ->
  length vsl = s ->
  sem (rec1 n s g h) vnl vsl =
  sem_rec1 g h (hd nil vnl) (tl vnl) vsl.
Proof.
(* Goal: forall (_ : @eq nat (@length (list bool) vnl) n) (_ : @eq nat (@length (list bool) vsl) s), @eq (list bool) (sem (rec3 n s x g h) vnl vsl) (sem_rec1 g h (sem x vnl (@nil (list bool))) vnl vsl) *)
intros Hn Hs.
destruct vnl as [ | v vnl].
(* Goal: @eq Arities (ok_arities n s) (ok_arities n s) *)
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
reflexivity.
simpl in Hn.
induction v as [ | b v IH].
(* Goal: @eq Arities (ok_arities n s) (ok_arities n s) *)
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
reflexivity.
simpl sem_rec1.
simpl hd in IH.
simpl tl in IH.
rewrite <- IH.
clear IH.
unfold rec1.
case b.
rewrite sem_rec_true.
match goal with
| |- context [sem (rec ?g ?h0 ?h1) ?vnl ?vsl] =>
    set (e0 := sem (rec g h0 h1) vnl vsl)
end.
rewrite sem_comp, map_map.
(* Goal: @eq (list bool) (@skipn bool (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) y) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
f_equal.
rewrite map_cons.
(* Goal: @eq (list bool) (@skipn bool (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) y) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
f_equal.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
replace (S n) with (n+1) by omega.
rewrite map_proj_seq_normal_gen by (simpl; omega).
erewrite firstn_map_nth by (simpl; omega).
instantiate (1:=nil).
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
rewrite <- seq_shift, map_map; simpl.
apply map_nth_seq.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
rewrite <- (
  map_map
    (proj (S n) (S s))
    (fun e => sem e (v :: vnl) (e0 :: vsl))
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
);rewrite map_proj_seq_safe; simpl.
(* Goal: @eq (list bool) (@skipn bool (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) y) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
f_equal.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) s vsl) (@repeat (list bool) (Init.Nat.sub s (@length (list bool) vsl)) (@nil bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
subst s.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) (@length (list bool) vsl) vsl) (@repeat (list bool) (Init.Nat.sub (@length (list bool) vsl) (@length (list bool) vsl)) (@nil bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite minus_diag.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) (@length (list bool) vsl) vsl) (@nil (list bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite app_nil_r.
(* Goal: @eq (list (list bool)) (@firstn (list bool) (@length (list bool) vsl) vsl) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite <- (app_nil_r vsl) at 2.
(* Goal: @eq (list (list bool)) (@firstn (list bool) (@length (list bool) vsl) (@app (list bool) vsl (@nil (list bool)))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
apply firstn_app.
rewrite sem_rec_false.
match goal with
| |- context [sem (rec ?g ?h0 ?h1) ?vnl ?vsl] =>
    set (e0 := sem (rec g h0 h1) vnl vsl)
end.
rewrite sem_comp, map_map.
(* Goal: @eq (list bool) (@skipn bool (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) y) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
f_equal.
rewrite map_cons.
(* Goal: @eq (list bool) (@skipn bool (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) y) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
f_equal.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
replace (S n) with (n+1) by omega.
rewrite map_proj_seq_normal_gen by (simpl; omega).
erewrite firstn_map_nth by (simpl; omega).
instantiate (1:=nil).
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
rewrite <- seq_shift, map_map; simpl.
apply map_nth_seq.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
rewrite <- (
  map_map
    (proj (S n) (S s))
    (fun e => sem e (v :: vnl) (e0 :: vsl))
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
);rewrite map_proj_seq_safe; simpl.
(* Goal: @eq (list bool) (@skipn bool (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) y) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
f_equal.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) s vsl) (@repeat (list bool) (Init.Nat.sub s (@length (list bool) vsl)) (@nil bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
subst s.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) (@length (list bool) vsl) vsl) (@repeat (list bool) (Init.Nat.sub (@length (list bool) vsl) (@length (list bool) vsl)) (@nil bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite minus_diag.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) (@length (list bool) vsl) vsl) (@nil (list bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite app_nil_r.
(* Goal: @eq (list (list bool)) (@firstn (list bool) (@length (list bool) vsl) vsl) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite <- (app_nil_r vsl) at 2.
(* Goal: @eq (list (list bool)) (@firstn (list bool) (@length (list bool) vsl) (@app (list bool) vsl (@nil (list bool)))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
apply firstn_app.
Qed.

(** * Recursion on the result of the function [x],
      with one function [h] taking [i] instead of two function [h]_[i] *)

Definition rec3 n s x g h : BC :=
  comp n s
    (rec1 n s g h)
    (x ::
     map (proj n 0) (seq 0 n))
    (map (proj n s) (seq n s)).

Lemma arities_rec3 n s x g h
  (Hx : arities x = ok_arities n 0)
  (Hg : arities g = ok_arities n s)
  (Hh : arities h = ok_arities (S n) (S s)) :
  arities (rec3 n s x g h) = ok_arities n s.
Proof.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq Arities match match arities g with | error_rec a a0 a1 => error_rec (error_rec a a0 a1) match arities h with | error_rec a2 a3 a4 => error_comp (error_rec a2 a3 a4) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a2 l l0 => error_comp (error_comp a2 l l0) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end match arities h with | error_rec a2 a3 a4 => error_comp (error_rec a2 a3 a4) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a2 l l0 => error_comp (error_comp a2 l l0) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end | error_comp a l l0 => error_rec (error_comp a l l0) match arities h with | error_rec a0 a1 a2 => error_comp (error_rec a0 a1 a2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a0 l1 l2 => error_comp (error_comp a0 l1 l2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end match arities h with | error_rec a0 a1 a2 => error_comp (error_rec a0 a1 a2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a0 l1 l2 => error_comp (error_comp a0 l1 l2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end | error_proj n0 n1 n2 => error_rec (error_proj n0 n1 n2) match arities h with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n3 n4 n5 => error_comp (error_proj n3 n4 n5) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end match arities h with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n3 n4 n5 => error_comp (error_proj n3 n4 n5) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end | ok_arities gn gs => match match arities h with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end with | error_rec a a0 a1 => error_rec (ok_arities gn gs) (error_rec a a0 a1) match arities h with | error_rec a2 a3 a4 => error_comp (error_rec a2 a3 a4) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a2 l l0 => error_comp (error_comp a2 l l0) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end | error_comp a l l0 => error_rec (ok_arities gn gs) (error_comp a l l0) match arities h with | error_rec a0 a1 a2 => error_comp (error_rec a0 a1 a2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a0 l1 l2 => error_comp (error_comp a0 l1 l2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end | error_proj n0 n1 n2 => error_rec (ok_arities gn gs) (error_proj n0 n1 n2) match arities h with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n3 n4 n5 => error_comp (error_proj n3 n4 n5) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end | ok_arities h0n h0s => match match arities h with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj (S n) O) (seq (S O) n))))) (Nat.eqb hs (S (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities hn hs) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) end with | error_rec a a0 a1 => error_rec (ok_arities gn gs) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities gn gs) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n n0 n1 => error_rec (ok_arities gn gs) (ok_arities h0n h0s) (error_proj n n0 n1) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb gn m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb gs m' end) (Nat.eqb h0s h1s) then ok_arities h0n gs else error_rec (ok_arities gn gs) (ok_arities h0n h0s) (ok_arities h1n h1s) end end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (arities x) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (arities x) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (arities x) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj n O) (seq O n))))) (Nat.eqb hs (@length BC (@map nat BC (proj n s) (seq n s))))) (andb (aeq (arities x) (ok_arities n O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n))))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (arities x) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite Hx, Hg, Hh.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq Arities match match (if andb (andb (andb (Nat.eqb n (@length BC (@map nat BC (proj (S n) O) (seq (S O) n)))) (Nat.eqb s (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (andb (andb (Nat.eqb n (@length BC (@map nat BC (proj (S n) O) (seq (S O) n)))) (Nat.eqb s (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (andb (andb (Nat.eqb n (@length BC (@map nat BC (proj (S n) O) (seq (S O) n)))) (Nat.eqb s (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (andb (andb (Nat.eqb n (@length BC (@map nat BC (proj (S n) O) (seq (S O) n)))) (Nat.eqb s (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (andb (andb (Nat.eqb n (@length BC (@map nat BC (proj (S n) O) (seq (S O) n)))) (Nat.eqb s (@length BC (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (andb (aeq (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (ok_arities (S n) O)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n))))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (if andb (andb (Nat.eqb n n) true) true then ok_arities (S n) O else error_comp (ok_arities O (S O)) (@nil Arities) (@cons Arities (ok_arities (S n) O) (@nil Arities))) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S (@length BC (@map nat BC (proj n O) (seq O n))))) (Nat.eqb hs (@length BC (@map nat BC (proj n s) (seq n s))))) (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n))))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
do 4 rewrite map_length, seq_length.
(* Goal: @eq Arities (if andb (andb (andb (Nat.eqb n n) (Nat.eqb s s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
do 2 rewrite <- beq_nat_refl.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq Arities match match (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite <- beq_nat_refl.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
match goal with
| |- context [forallb ?P ?l] => case_eq (forallb P l); intro H1
end.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
case_eq (n + S s).
(* Goal: forall _ : @eq nat (Init.Nat.add n (S s)) O, @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n (S s)) (S n0)), @eq Arities match match (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n1 n2 n3 => error_rec (ok_arities n s) (error_proj n1 n2 n3) (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n1 n2 n3 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n1 n2 n3) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n1 n2 n3 => error_comp (error_proj n1 n2 n3) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
intro H2.
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n (S s)) (S n0)), @eq Arities match match (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n1 n2 n3 => error_rec (ok_arities n s) (error_proj n1 n2 n3) (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n1 n2 n3 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n1 n2 n3) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n1 n2 n3 => error_comp (error_proj n1 n2 n3) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
contradict H2.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n (S s)) (S n0)), @eq Arities match match (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n1 n2 n3 => error_rec (ok_arities n s) (error_proj n1 n2 n3) (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n n0 then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n1 n2 n3 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n1 n2 n3) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n1 n2 n3 => error_comp (error_proj n1 n2 n3) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
intros p H2.
(* Goal: @eq Arities match match (if andb (aeq (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if Nat.leb n p then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
case_eq (leb n p); intro H3.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq Arities (if andb (andb (andb (Nat.eqb n n) (Nat.eqb s s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
do 2 rewrite <- beq_nat_refl.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
match goal with
| |- context [forallb ?P ?l] => case_eq (forallb P l); intro H4
end.
(* Goal: @eq Arities match match (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (andb (andb (Nat.eqb n n) true) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities (S n) O)) (@map nat BC (proj (S n) O) (seq (S O) n)))) (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
do 4 rewrite <- beq_nat_refl.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq Arities (if andb (andb (andb (Nat.eqb n n) (Nat.eqb s s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
do 2 rewrite <- beq_nat_refl.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
match goal with
| |- context [forallb ?P ?l] => case_eq (forallb P l); intro H5
end.
match goal with
| |- context [forallb ?P ?l] => case_eq (forallb P l); intro H6
end.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq Arities (ok_arities n s) (ok_arities n s) *)
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
reflexivity.
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite forallb_forall_conv in H6.
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
destruct H6 as [e [H6 H7] ].
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite in_map_iff in H6.
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
destruct H6 as [q [H6 H8] ].
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite in_seq_iff in H8.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
subst e.
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
simpl in H7.
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
case_eq (n+s).
(* Goal: forall _ : @eq nat (Init.Nat.add n s) O, @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n s) (S n0)), @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
intro H9.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
contradict H8.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n s) (S n0)), @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
intros r H9.
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite H9 in H7.
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
case_eq (leb q r); intro H10.
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite H10 in H7.
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
simpl in H7.
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
do 2 rewrite <- beq_nat_refl in H7.
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
discriminate H7.
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite leb_iff_conv in H10.
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
contradict H10.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite forallb_forall_conv in H5.
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
destruct H5 as [e [H5 H6] ].
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite in_map_iff in H5.
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
destruct H5 as [q [H5 H7] ].
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite in_seq_iff in H7.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
subst e.
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
simpl in H6.
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
case_eq (n+0).
(* Goal: forall _ : @eq nat (Init.Nat.add n O) O, @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n O) (S n0)), @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
intro H8.
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n O) (S n0)), @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
contradict H7.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n O) (S n0)), @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
intros r H8.
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite H8 in H6.
(* Goal: forall _ : @eq nat (Init.Nat.add n s) O, @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n s) (S n0)), @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
case_eq (leb q r); intro H9.
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite H9 in H6.
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
simpl in H6.
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite <- beq_nat_refl in H6.
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
discriminate H6.
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite leb_iff_conv in H9.
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
contradict H9.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite forallb_forall_conv in H4.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
destruct H4 as [e [H4 H5] ].
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite in_map_iff in H4.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
destruct H4 as [q [H4 H6] ].
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite in_seq_iff in H6.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
subst e.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
simpl in H5.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
case_eq (n+S s).
(* Goal: forall _ : @eq nat (Init.Nat.add n (S s)) O, @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n (S s)) (S n0)), @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
intro H7.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n (S s)) (S n0)), @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
contradict H6.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n (S s)) (S n0)), @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
intros r H7.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite H7 in H5.
(* Goal: forall _ : @eq nat (Init.Nat.add n O) O, @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n O) (S n0)), @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
case_eq (leb q (S r)); intro H8.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite H8 in H5.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
simpl in H5.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
do 2 rewrite <- beq_nat_refl in H5.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
discriminate H5.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite leb_iff_conv in H8.
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
contradict H8.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite leb_iff_conv in H3.
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
contradict H3.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite forallb_forall_conv in H1.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
destruct H1 as [e [H1 H2] ].
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite in_map_iff in H1.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
destruct H1 as [q [H1 H3] ].
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite in_seq_iff in H3.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
subst e.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
simpl in H2.
(* Goal: forall _ : @eq nat (Init.Nat.add n O) O, @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
(* Goal: forall (n0 : nat) (_ : @eq nat (Init.Nat.add n O) (S n0)), @eq Arities (if andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) (andb (aeq (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (ok_arities n s)) true) then ok_arities n s else error_comp (ok_arities O (S (S (S (S O))))) (@nil Arities) (@cons Arities (ok_arities n s) (@cons Arities (ok_arities n s) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@cons Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities n (S s)) (@map BC Arities arities (@map nat BC (proj n O) (seq O n))) (@cons Arities (ok_arities n s) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))))) (@nil Arities)))))) (ok_arities n s) *)
case_eq (leb q (n+0)); intro H4.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite H4 in H2.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
simpl in H2.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite <- beq_nat_refl in H2.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
discriminate H2.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite leb_iff_conv in H4.
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
contradict H4.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
omega.
Qed.

Lemma rec3_correct n s x g h vnl vsl :
  length vnl = n ->
  length vsl = s ->
  sem (rec3 n s x g h) vnl vsl =
  sem_rec1 g h (sem x vnl nil) vnl vsl.
Proof.
(* Goal: forall (_ : @eq nat (@length (list bool) vnl) n) (_ : @eq nat (@length (list bool) vsl) s), @eq (list bool) (sem (rec3 n s x g h) vnl vsl) (sem_rec1 g h (sem x vnl (@nil (list bool))) vnl vsl) *)
intros Hn Hs.
(* Goal: @eq (list bool) (sem (rec3 n s x g h) vnl vsl) (sem_rec1 g h (sem x vnl (@nil (list bool))) vnl vsl) *)
unfold rec3.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
rewrite sem_comp, rec1_correct; simpl.
(* Goal: @eq (list bool) (@skipn bool (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) y) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
f_equal.
(* Goal: @eq (list (list bool)) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))) vnl *)
(* Goal: @eq (list (list bool)) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite map_proj_seq_normal.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) n vnl) (@repeat (list bool) (Init.Nat.sub n (@length (list bool) vnl)) (@nil bool))) vnl *)
(* Goal: @eq (list (list bool)) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
subst n.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) (@length (list bool) vsl) vsl) (@repeat (list bool) (Init.Nat.sub (@length (list bool) vsl) (@length (list bool) vsl)) (@nil bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite minus_diag.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) (@length (list bool) vsl) vsl) (@nil (list bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite app_nil_r.
(* Goal: @eq (list (list bool)) (@firstn (list bool) (@length (list bool) vnl) vnl) vnl *)
(* Goal: @eq (list (list bool)) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite <- (app_nil_r vnl) at 2.
(* Goal: @eq (list (list bool)) (@firstn (list bool) (@length (list bool) vsl) (@app (list bool) vsl (@nil (list bool)))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
apply firstn_app.
(* Goal: @eq (list (list bool)) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite map_proj_seq_safe.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) s vsl) (@repeat (list bool) (Init.Nat.sub s (@length (list bool) vsl)) (@nil bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
subst s.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) (@length (list bool) vsl) vsl) (@repeat (list bool) (Init.Nat.sub (@length (list bool) vsl) (@length (list bool) vsl)) (@nil bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite minus_diag.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
simpl.
(* Goal: @eq (list (list bool)) (@app (list bool) (@firstn (list bool) (@length (list bool) vsl) vsl) (@nil (list bool))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite app_nil_r.
(* Goal: @eq (list (list bool)) (@firstn (list bool) (@length (list bool) vsl) vsl) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
rewrite <- (app_nil_r vsl) at 2.
(* Goal: @eq (list (list bool)) (@firstn (list bool) (@length (list bool) vsl) (@app (list bool) vsl (@nil (list bool)))) vsl *)
(* Goal: @eq nat (S (@length (list bool) (@map BC (list bool) (fun ne : BC => sem ne vnl (@nil (list bool))) (@map nat BC (proj n O) (seq O n))))) (S n) *)
(* Goal: @eq nat (@length (list bool) (@map BC (list bool) (fun se : BC => sem se vnl vsl) (@map nat BC (proj n s) (seq n s)))) s *)
apply firstn_app.
(* Goal: @eq Arities (ok_arities n s) (ok_arities n s) *)
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite map_length, map_length, seq_length; reflexivity.
(* Goal: @eq Arities (ok_arities n s) (ok_arities n s) *)
(* Goal: @eq Arities (if andb true false then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (if andb false (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities (S n) s) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities (error_comp (error_rec (ok_arities n s) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) (error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (ok_arities (S n) (S s)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))))) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s)))) (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb (aeq (error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
(* Goal: @eq Arities match match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (error_rec a a0 a1) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_comp a l l0 => error_rec (ok_arities n s) (error_comp a l l0) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (error_proj n0 n1 n2) (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) | ok_arities h0n h0s => match (if andb false (andb (aeq (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (ok_arities (S n) (S s))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities (S n) (S s))) (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s)))) then ok_arities (S n) (S s) else error_comp (ok_arities (S n) (S s)) (@cons Arities (ok_arities (S n) O) (@map BC Arities arities (@map nat BC (proj (S n) O) (seq (S O) n)))) (@cons Arities (if match Init.Nat.add n (S s) with | O => false | S m' => Nat.leb n m' end then ok_arities (S n) (S s) else error_proj (S n) (S s) (S n)) (@map BC Arities arities (@map nat BC (proj (S n) (S s)) (seq (S (S n)) s))))) with | error_rec a a0 a1 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_rec a a0 a1) | error_comp a l l0 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_comp a l l0) | error_proj n0 n1 n2 => error_rec (ok_arities n s) (ok_arities h0n h0s) (error_proj n0 n1 n2) | ok_arities h1n h1s => if andb (andb (andb match h0n with | O => false | S m' => Nat.eqb n m' end (Nat.eqb h0n h1n)) match h0s with | O => false | S m' => Nat.eqb s m' end) (Nat.eqb h0s h1s) then ok_arities h0n s else error_rec (ok_arities n s) (ok_arities h0n h0s) (ok_arities h1n h1s) end end with | error_rec a a0 a1 => error_comp (error_rec a a0 a1) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_comp a l l0 => error_comp (error_comp a l l0) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | error_proj n0 n1 n2 => error_comp (error_proj n0 n1 n2) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) | ok_arities hn hs => if andb (andb (andb (Nat.eqb hn (S n)) (Nat.eqb hs s)) (@forallb BC (fun ne : BC => aeq (arities ne) (ok_arities n O)) (@map nat BC (proj n O) (seq O n)))) (@forallb BC (fun se : BC => aeq (arities se) (ok_arities n s)) (@map nat BC (proj n s) (seq n s))) then ok_arities n s else error_comp (ok_arities hn hs) (@cons Arities (ok_arities n O) (@map BC Arities arities (@map nat BC (proj n O) (seq O n)))) (@map BC Arities arities (@map nat BC (proj n s) (seq n s))) end (ok_arities n s) *)
rewrite map_length, map_length, seq_length; reflexivity.
Qed.


(** * True

  - with any arities (n, s)
*)

Definition true_e (n s:nat) : BC :=
  comp n s (comp 0 0 (succ true) nil (zero :: nil)) nil nil.

Lemma true_correct n s l1 l2: 
 bs2bool (sem (true_e n s) l1 l2) = true.
Proof.
(* Goal: @eq nat (bs2nat (sem (false_e n s) l1 l2)) O *)
 intros; simpl; trivial.
Qed.

Lemma true_correct_nat n s l1 l2: 
 bs2nat (sem (true_e n s) l1 l2) = 1.
Proof.
(* Goal: @eq nat (bs2nat (sem (false_e n s) l1 l2)) O *)
 intros; simpl; trivial.
Qed.

(** * False

  - with any arities (n, s)
*)

Definition false_e (n s:nat) : BC :=
  comp n s (comp 0 0 (succ false) nil (zero :: nil)) nil nil.

Lemma false_correct n s l1 l2: 
 bs2bool (sem (false_e n s) l1 l2) = false.
Proof.
(* Goal: @eq nat (bs2nat (sem (false_e n s) l1 l2)) O *)
 intros; simpl; trivial.
Qed.

Lemma false_correct_nat n s l1 l2: 
 bs2nat (sem (false_e n s) l1 l2) = 0.
Proof.
(* Goal: @eq nat (bs2nat (sem (false_e n s) l1 l2)) O *)
 intros; simpl; trivial.
Qed.

(** * Parity

  - arities: (0, 1)
*)

Definition parity_e : BC := (* 0 1 *)
  comp 0 1 cond nil [proj 0 1 0; false_e 0 1; true_e 0 1; false_e 0 1].

Lemma parity_correct_even v :
  bs2bool (sem parity_e nil [v]) = false ->
  even (bs2nat v).
Proof.
(* Goal: forall _ : @eq bool (bs2bool (sem parity_e (@nil (list bool)) (@cons (list bool) v (@nil (list bool))))) true, odd (bs2nat v) *)
  destruct v; simpl; intros.
(* Goal: even O *)
(* Goal: even (if b then S (Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) else Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) *)
  apply even_O.
(* Goal: even (if b then S (Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) else Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) *)
  destruct b; simpl in *.
(* Goal: odd O *)
(* Goal: odd (if b then S (Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) else Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) *)
  discriminate.
(* Goal: odd (if b then S (Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) else Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) *)
  cutrewrite (bs2nat v + (bs2nat v + 0) = 2 * (bs2nat v)).
(* Goal: even (Init.Nat.mul (S (S O)) (bs2nat v)) *)
(* Goal: odd (Init.Nat.mul (S (S O)) (bs2nat v)) *)
(* Goal: @eq nat (Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) (Init.Nat.mul (S (S O)) (bs2nat v)) *)
  auto with arith.
(* Goal: @eq nat (Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) (Init.Nat.mul (S (S O)) (bs2nat v)) *)
  ring.
Qed.

Lemma parity_correct_odd v :
  bs2bool (sem parity_e nil [v]) = true ->
  odd (bs2nat v).
Proof.
(* Goal: forall _ : @eq bool (bs2bool (sem parity_e (@nil (list bool)) (@cons (list bool) v (@nil (list bool))))) true, odd (bs2nat v) *)
  destruct v; simpl; intros.
(* Goal: odd O *)
(* Goal: odd (if b then S (Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) else Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) *)
  discriminate.
(* Goal: odd (if b then S (Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) else Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) *)
  cutrewrite (bs2nat v + (bs2nat v + 0) = (2 * (bs2nat v))).
(* Goal: odd (if b then S (Init.Nat.mul (S (S O)) (bs2nat v)) else Init.Nat.mul (S (S O)) (bs2nat v)) *)
(* Goal: @eq nat (Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) (Init.Nat.mul (S (S O)) (bs2nat v)) *)
  destruct b.
(* Goal: odd (S (Init.Nat.mul (S (S O)) (bs2nat v))) *)
(* Goal: odd (Init.Nat.mul (S (S O)) (bs2nat v)) *)
(* Goal: @eq nat (Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) (Init.Nat.mul (S (S O)) (bs2nat v)) *)
  apply odd_S.
(* Goal: even (Init.Nat.mul (S (S O)) (bs2nat v)) *)
(* Goal: odd (Init.Nat.mul (S (S O)) (bs2nat v)) *)
(* Goal: @eq nat (Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) (Init.Nat.mul (S (S O)) (bs2nat v)) *)
  auto with arith.
(* Goal: odd O *)
(* Goal: odd (if b then S (Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) else Init.Nat.add (bs2nat v) (Init.Nat.add (bs2nat v) O)) *)
  simpl in H; discriminate.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
  omega.
Qed.

(** * Functions P, P', Y and I as defined by Bellantoni and Cook

  - arities of P: (1, 1)

  - arities of P': (2, 0)

  - arities of Y: (2, 1)

  - arities of I: (2, 1)
*)

Definition P (x:bs)(y:bs) : bs := skipn (length x) y.

Lemma P_nil : forall x, P x nil = nil.
Proof.
(* Goal: forall x : list bool, @eq (list bool) (P x (@nil bool)) (@nil bool) *)
 intro x; case x; trivial.
Qed.

Definition P_e : BC :=
  rec (proj 0 1 0)
      (comp 1 2 pred nil [proj 1 2 1])
      (comp 1 2 pred nil [proj 1 2 1]).

Lemma P_correct x y :
  sem P_e [x] [y] = P x y.
Proof.
(* Goal: @eq (list bool) (sem P_e (@cons (list bool) x (@nil (list bool))) (@cons (list bool) y (@nil (list bool)))) (P x y) *)
 unfold P; induction x; simpl in *; trivial.
(* Goal: @eq (list bool) (if a then @tl bool (sem_rec (fun _ vsl : list (list bool) => @nth (list bool) O vsl (@nil bool)) (fun _ vsl : list (list bool) => @tl bool (@nth (list bool) O vsl (@nil bool))) (fun _ vsl : list (list bool) => @tl bool (@nth (list bool) O vsl (@nil bool))) x (@nil (list bool)) (@cons (list bool) y (@nil (list bool)))) else @tl bool (sem_rec (fun _ vsl : list (list bool) => @nth (list bool) O vsl (@nil bool)) (fun _ vsl : list (list bool) => @tl bool (@nth (list bool) O vsl (@nil bool))) (fun _ vsl : list (list bool) => @tl bool (@nth (list bool) O vsl (@nil bool))) x (@nil (list bool)) (@cons (list bool) y (@nil (list bool))))) match y with | nil => @nil bool | cons a l => @skipn bool (@length bool x) l end *)
 intros; case a.
(* Goal: @eq (list bool) (@tl bool (sem_rec (fun _ vsl : list (list bool) => @nth (list bool) O vsl (@nil bool)) (fun _ vsl : list (list bool) => @tl bool (@nth (list bool) O vsl (@nil bool))) (fun _ vsl : list (list bool) => @tl bool (@nth (list bool) O vsl (@nil bool))) x (@nil (list bool)) (@cons (list bool) y (@nil (list bool))))) match y with | nil => @nil bool | cons a l => @skipn bool (@length bool x) l end *)
 rewrite IHx; clear IHx. 
(* Goal: @eq (list bool) (@tl bool (@skipn bool (@length bool x) y)) match y with | nil => @nil bool | cons a l => @skipn bool (@length bool x) l end *)
 induction (length x); simpl; trivial.
(* Goal: @eq (list bool) (@tl bool match y with | nil => @nil bool | cons a l => @skipn bool n l end) match y with | nil => @nil bool | cons a (nil as l) => @nil bool | cons a (cons a0 l0 as l) => @skipn bool n l0 end *)
 rewrite <- IHn; clear IHn.
(* Goal: @eq (list bool) (@tl bool (@tl bool (@skipn bool n y))) match y with | nil => @nil bool | cons a (nil as l) => @nil bool | cons a (cons a0 l0 as l) => @skipn bool n l0 end *)
 revert y.
(* Goal: forall y : list bool, @eq (list bool) (@tl bool (@tl bool (@skipn bool n y))) match y with | nil => @nil bool | cons a (nil as l) => @nil bool | cons a (cons a0 l0 as l) => @skipn bool n l0 end *)
 induction n; simpl; trivial; intros.
(* Goal: @eq (list bool) (@tl bool (@tl bool y)) match y with | nil => @nil bool | cons a (nil as l) => @nil bool | cons a (cons a0 l0 as l) => l0 end *)
(* Goal: @eq (list bool) (@tl bool (@tl bool match y with | nil => @nil bool | cons a l => @skipn bool n l end)) match y with | nil => @nil bool | cons a (nil as l) => @nil bool | cons a (cons a0 (nil as l0) as l) => @nil bool | cons a (cons a0 (cons a1 l1 as l0) as l) => @skipn bool n l1 end *)
 case y; simpl; trivial.
(* Goal: @eq (list bool) (@tl bool (@tl bool match y with | nil => @nil bool | cons a l => @skipn bool n l end)) match y with | nil => @nil bool | cons a (nil as l) => @nil bool | cons a (cons a0 (nil as l0) as l) => @nil bool | cons a (cons a0 (cons a1 l1 as l0) as l) => @skipn bool n l1 end *)
 case y; simpl; trivial; intros.
(* Goal: @eq (list bool) (@tl bool (sem_rec (fun _ vsl : list (list bool) => @nth (list bool) O vsl (@nil bool)) (fun _ vsl : list (list bool) => @tl bool (@nth (list bool) O vsl (@nil bool))) (fun _ vsl : list (list bool) => @tl bool (@nth (list bool) O vsl (@nil bool))) x (@nil (list bool)) (@cons (list bool) y (@nil (list bool))))) match y with | nil => @nil bool | cons a l => @skipn bool (@length bool x) l end *)
 rewrite IHx; clear IHx. 
(* Goal: @eq (list bool) (@tl bool (@skipn bool (@length bool x) y)) match y with | nil => @nil bool | cons a l => @skipn bool (@length bool x) l end *)
 induction (length x); simpl; trivial.
(* Goal: @eq (list bool) (@tl bool match y with | nil => @nil bool | cons a l => @skipn bool n l end) match y with | nil => @nil bool | cons a (nil as l) => @nil bool | cons a (cons a0 l0 as l) => @skipn bool n l0 end *)
 rewrite <- IHn; clear IHn.
(* Goal: @eq (list bool) (@tl bool (@tl bool (@skipn bool n y))) match y with | nil => @nil bool | cons a (nil as l) => @nil bool | cons a (cons a0 l0 as l) => @skipn bool n l0 end *)
 revert y.
(* Goal: forall y : list bool, @eq (list bool) (@tl bool (@tl bool (@skipn bool n y))) match y with | nil => @nil bool | cons a (nil as l) => @nil bool | cons a (cons a0 l0 as l) => @skipn bool n l0 end *)
 induction n; simpl; trivial; intros.
(* Goal: @eq (list bool) (@tl bool (@tl bool y)) match y with | nil => @nil bool | cons a (nil as l) => @nil bool | cons a (cons a0 l0 as l) => l0 end *)
(* Goal: @eq (list bool) (@tl bool (@tl bool match y with | nil => @nil bool | cons a l => @skipn bool n l end)) match y with | nil => @nil bool | cons a (nil as l) => @nil bool | cons a (cons a0 (nil as l0) as l) => @nil bool | cons a (cons a0 (cons a1 l1 as l0) as l) => @skipn bool n l1 end *)
 case y; simpl; trivial.
(* Goal: @eq (list bool) (@tl bool (@tl bool match y with | nil => @nil bool | cons a l => @skipn bool n l end)) match y with | nil => @nil bool | cons a (nil as l) => @nil bool | cons a (cons a0 (nil as l0) as l) => @nil bool | cons a (cons a0 (cons a1 l1 as l0) as l) => @skipn bool n l1 end *)
 case y; simpl; trivial; intros.
Qed.

Global Opaque P_e.

Definition P'_e := from_11_to_20 P_e.

Definition Y (z w y:bs) : bs :=
  P (P z w) y. 

Definition Y_e : BC :=
  comp 2 1 P_e 
  [comp 2 0 P'_e [proj 2 0 0; proj 2 0 1] nil] 
  [proj 2 1 2].

Lemma Y_correct z w y :
  sem Y_e [z;w] [y] = Y z w y.
Proof.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
 intros; simpl.
(* Goal: @eq (list bool) (sem P_e (@cons (list bool) (sem P_e (@cons (list bool) z (@nil (list bool))) (@cons (list bool) w (@nil (list bool)))) (@nil (list bool))) (@cons (list bool) y (@nil (list bool)))) (Y z w y) *)
 rewrite P_correct, P_correct.
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
 trivial.
Qed.

Lemma Y_skipn z w y :
  Y z w y = skipn (length w - length z) y.
Proof.
(* Goal: @eq bool (@hd bool false (Y x y z)) (@nth bool (Init.Nat.sub (@length bool y) (@length bool x)) z false) *)
 unfold Y, P; intros.
(* Goal: @eq bool (@hd bool false (@skipn bool (@length bool (@skipn bool (@length bool x) y)) z)) (@nth bool (Init.Nat.sub (@length bool y) (@length bool x)) z false) *)
 rewrite length_skipn.
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
 trivial.
Qed.

Global Opaque Y_e.

Lemma Y_nth x y z :
 hd false (Y x y z) = nth (length y - length x) z false.
Proof.
(* Goal: @eq bool (@hd bool false (Y x y z)) (@nth bool (Init.Nat.sub (@length bool y) (@length bool x)) z false) *)
 unfold Y, P; intros.
(* Goal: @eq bool (@hd bool false (@skipn bool (@length bool (@skipn bool (@length bool x) y)) z)) (@nth bool (Init.Nat.sub (@length bool y) (@length bool x)) z false) *)
 rewrite length_skipn.
(* Goal: @eq bool (@hd bool false (@skipn bool (Init.Nat.sub (@length bool y) (@length bool x)) z)) (@nth bool (Init.Nat.sub (@length bool y) (@length bool x)) z false) *)
 remember (length y - length x) as n.
(* Goal: @eq bool (@hd bool false (@skipn bool n z)) (@nth bool n z false) *)
 revert x y z Heqn.
(* Goal: forall (x y z : list bool) (_ : @eq nat n (Init.Nat.sub (@length bool y) (@length bool x))), @eq bool (@hd bool false (@skipn bool n z)) (@nth bool n z false) *)
 induction n; simpl; intros.
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
 case z; trivial.
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
 destruct z; simpl in *; trivial.
(* Goal: @eq bool (@hd bool false (@skipn bool n z)) (@nth bool n z false) *)
 apply IHn with (x:=true::x) (y:=y).
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
 simpl.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
 omega.
Qed.

Lemma Y_nil x y : Y x y nil = nil.
Proof.
(* Goal: @eq (list bool) (Y (@cons bool i1 x) y z) (Y (@cons bool i2 x) y z) *)
  intros; unfold Y, P.
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
  case (length (skipn (length x) y)); simpl; trivial.
Qed.

Lemma Y_refl x y : Y x x y = y.
Proof.
(* Goal: @eq (list bool) (Y (@cons bool i1 x) y z) (Y (@cons bool i2 x) y z) *)
 intros; unfold Y, P.
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
 rewrite length_skipn, minus_diag; simpl; trivial.
Qed.

Lemma Y_nil_length x y z :
  Y x y z = nil ->
  length z <= length y - length x.
Proof.
(* Goal: forall (u w y : list bool) (_ : le (@length bool u) (@length bool w)), le (@length bool (Y u w y)) (@length bool (Y w w y)) *)
 intros.
(* Goal: le (@length bool z) (Init.Nat.sub (@length bool y) (@length bool x)) *)
 unfold Y, P in H.
(* Goal: le (@length bool z) (Init.Nat.sub (@length bool y) (@length bool x)) *)
 rewrite length_skipn in H.
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
 apply skipn_nil_length; trivial.
Qed.

Lemma Y_hd_same x y z i1 i2: Y (i1 :: x) y z = Y (i2 :: x) y z.
Proof.
(* Goal: @eq (list bool) (Y (@cons bool i1 x) y z) (Y (@cons bool i2 x) y z) *)
 intros; unfold Y, P.
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
 simpl; trivial.
Qed.

Lemma Y_le : forall u w y , length u <= length w ->
   length (Y u w y) <= length (Y w w y).
(* Goal: forall (u w y : list bool) (_ : le (@length bool u) (@length bool w)), le (@length bool (Y u w y)) (@length bool (Y w w y)) *)
 intros.
(* Goal: le (@length bool (Y u w y)) (@length bool (Y w w y)) *)
 repeat rewrite Y_skipn.
(* Goal: le (@length bool (@skipn bool (Init.Nat.sub (@length bool w) (@length bool u)) y)) (@length bool (@skipn bool (Init.Nat.sub (@length bool w) (@length bool w)) y)) *)
 repeat rewrite skipn_length.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
 omega.
Qed.

Definition I_e : BC :=
  comp 2 1 parity_e nil 
  [comp 2 1 Y_e 
    [comp 2 0 (succ true) nil [proj 2 0 0]; proj 2 0 1] 
    [proj 2 1 2] ].

Lemma I_correct (z w y : bs) :
  sem I_e [z;w] [y] = [nth (length w - S (length z)) y false].
Proof.
(* Goal: forall (u w y : list bool) (_ : le (@length bool u) (@length bool w)), le (@length bool (Y u w y)) (@length bool (Y w w y)) *)
 simpl; intros.
(* Goal: @eq (list bool) match sem Y_e (@cons (list bool) (@cons bool true z) (@cons (list bool) w (@nil (list bool)))) (@cons (list bool) y (@nil (list bool))) with | nil => @cons bool false (@nil bool) | cons (true as b) l => @cons bool true (@nil bool) | cons (false as b) l => @cons bool false (@nil bool) end (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@nil bool)) *)
 rewrite Y_correct.
(* Goal: forall (u w y : list bool) (_ : le (@length bool u) (@length bool w)), le (@length bool (Y u w y)) (@length bool (Y w w y)) *)
 case_eq (Y (true :: z) w y); intros.
(* Goal: @eq (list bool) (@cons bool false (@nil bool)) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@nil bool)) *)
(* Goal: @eq (list bool) (if b then @cons bool true (@nil bool) else @cons bool false (@nil bool)) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@nil bool)) *)
 apply Y_nil_length in H; simpl in H.
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
 rewrite nth_overflow; trivial.
(* Goal: @eq (list bool) (if b then @cons bool true (@nil bool) else @cons bool false (@nil bool)) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@nil bool)) *)
 replace (S (length z)) with (length (true :: z)).
(* Goal: @eq (list bool) (if b then @cons bool true (@nil bool) else @cons bool false (@nil bool)) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool true z))) y false) (@nil bool)) *)
(* Goal: @eq nat (@length bool (@cons bool true z)) (S (@length bool z)) *)
 rewrite <- Y_nth.
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
 rewrite H; simpl; trivial.
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
 destruct b; trivial.
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
 simpl; trivial.
Qed.

Lemma I_Y_property j z w y :
  length z < length w ->
  length w - S (length z) < length y ->  
  Y (j :: z) w y = [nth (length w - S (length z)) y false] ++ Y z w y.
Proof.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
 intros; simpl.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (Y z w y)) *)
 rewrite Y_skipn.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (Y z w y)) *)
 rewrite Y_skipn.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool (@cons bool j z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
 simpl.
(* Goal: @eq (list bool) (@skipn bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y) (@cons bool (@nth bool (Init.Nat.sub (@length bool w) (S (@length bool z))) y false) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y)) *)
 rewrite skipn_hd with (d := false).
(* Goal: @eq (list bool) (@skipn bool (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) y) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
 f_equal.
(* Goal: @eq (list bool) (@skipn bool (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) y) (@skipn bool (Init.Nat.sub (@length bool w) (@length bool z)) y) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
 f_equal.
(* Goal: @eq nat (S (Init.Nat.sub (@length bool w) (S (@length bool z)))) (Init.Nat.sub (@length bool w) (@length bool z)) *)
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
 omega.
(* Goal: lt (Init.Nat.sub (@length bool w) (S (@length bool z))) (@length bool y) *)
 trivial.
Qed.

Global Opaque I_e.
