fact: Definition i2list2_hd {n} {As : Vector.t A n} {il1 : ilist (B := B) As} {il2 : ilist (B := B') As} (i2l : i2list2 As il1 il2) : match As return forall (il1 : ilist (B := B) As) (il2 : ilist (B := B') As), i2list2 As il1 il2 -> Type with | Vector.cons a _ As' => fun Bs Bs' i2l => C (ilist_hd Bs) (ilist_hd Bs') | Vector.nil => fun _ _ _ => unit end il1 il2 i2l := match As return forall il1 il2 i2l, match As return forall (il1 : ilist (B := B) As) (il2 : ilist (B := B') As), i2list2 As il1 il2 -> Type with | Vector.cons a _ As' => fun Bs Bs' i2l => C (ilist_hd Bs) (ilist_hd Bs') | Vector.nil => fun _ _ _ => unit end il1 il2 i2l with | Vector.cons a _ As' => fun il1 il2 i2l => prim_fst i2l | Vector.nil => fun _ _ _ => tt end il1 il2 i2l.
imports: Coq.Lists.List Coq.Strings.String Coq.Arith.Arith Fiat.Common.ilist Fiat.Common.ilist2