Theory: HOFML

Parents


Type constants


Term constants


Axioms


Definitions

joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (TRP
         (\v tl.
           (v = INL one) /\ (LENGTH tl = SUC 0) \/
           (?s. v = INR (INL s)) /\ (LENGTH tl = 0) \/
           (?v. v = INR (INR (INL v))) /\ (LENGTH tl = 0) \/
           (?e. v = INR (INR (INR (INL e)))) /\ (LENGTH tl = 0) \/
           (v = INR (INR (INR (INR (INL one))))) /\ (LENGTH tl = SUC 0) \/
           (v = INR (INR (INR (INR (INR (INL one)))))) /\
           (LENGTH tl = SUC (SUC 0)) \/
           (?n. v = INR (INR (INR (INR (INR (INR (INL n))))))) /\
           (LENGTH tl = 0) \/
           (?n. v = INR (INR (INR (INR (INR (INR (INR (INL n)))))))) /\
           (LENGTH tl = 0) \/
           (v = INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))) /\
           (LENGTH tl = 0) \/
           (v =
            INR (INR (INR (INR (INR (INR (INR (INR (INR (INL one)))))))))) /\
           (LENGTH tl = SUC (SUC 0)) \/
           (?f s.
             v =
             INR
               (INR
                 (INR
                   (INR (INR (INR (INR (INR (INR (INR (INL (f,s)))))))))))) /\
           (LENGTH tl = SUC (SUC 0)) \/
           (?s.
             v =
             INR
               (INR
                 (INR
                   (INR
                     (INR (INR (INR (INR (INR (INR (INR (INL s)))))))))))) /\
           (LENGTH tl = SUC (SUC 0)) \/
           (v =
            INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR (INR (INR (INR (INR (INR (INL one))))))))))))) /\
           (LENGTH tl = 0) \/
           (v =
            INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR (INR (INR (INR (INR (INR (INR one))))))))))))) /\
           (LENGTH tl = SUC 0)))
       rep
joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_ISO_DEF
|- (!a.
     ABS_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
       (REP_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
         a) =
     a) /\
   (!r.
     TRP
       (\v tl.
         (v = INL one) /\ (LENGTH tl = SUC 0) \/
         (?s. v = INR (INL s)) /\ (LENGTH tl = 0) \/
         (?v. v = INR (INR (INL v))) /\ (LENGTH tl = 0) \/
         (?e. v = INR (INR (INR (INL e)))) /\ (LENGTH tl = 0) \/
         (v = INR (INR (INR (INR (INL one))))) /\ (LENGTH tl = SUC 0) \/
         (v = INR (INR (INR (INR (INR (INL one)))))) /\
         (LENGTH tl = SUC (SUC 0)) \/
         (?n. v = INR (INR (INR (INR (INR (INR (INL n))))))) /\
         (LENGTH tl = 0) \/
         (?n. v = INR (INR (INR (INR (INR (INR (INR (INL n)))))))) /\
         (LENGTH tl = 0) \/
         (v = INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))) /\
         (LENGTH tl = 0) \/
         (v =
          INR (INR (INR (INR (INR (INR (INR (INR (INR (INL one)))))))))) /\
         (LENGTH tl = SUC (SUC 0)) \/
         (?f s.
           v =
           INR
             (INR
               (INR
                 (INR (INR (INR (INR (INR (INR (INR (INL (f,s)))))))))))) /\
         (LENGTH tl = SUC (SUC 0)) \/
         (?s.
           v =
           INR
             (INR
               (INR
                 (INR (INR (INR (INR (INR (INR (INR (INR (INL s)))))))))))) /\
         (LENGTH tl = SUC (SUC 0)) \/
         (v =
          INR
            (INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR (INR (INR (INR (INR (INR (INL one))))))))))))) /\
         (LENGTH tl = 0) \/
         (v =
          INR
            (INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR (INR (INR (INR (INR (INR (INR one))))))))))))) /\
         (LENGTH tl = SUC 0))
       r =
     REP_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
       (ABS_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
         r) =
     r)
JOINT_int_SIGsigexp_h_DEF
|- !j.
     JOINT_int_SIGsigexp_h j =
     ABS_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
       (Node (INL one)
         [REP_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
            j])
JOINT_int_SIGIDsigexp_h_DEF
|- !s.
     JOINT_int_SIGIDsigexp_h s =
     ABS_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
       (Node (INR (INL s)) [])
JOINT_int_VALspec_h_DEF
|- !v'.
     JOINT_int_VALspec_h v' =
     ABS_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
       (Node (INR (INR (INL v'))) [])
JOINT_int_EXCEPTIONspec_h_DEF
|- !e.
     JOINT_int_EXCEPTIONspec_h e =
     ABS_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
       (Node (INR (INR (INR (INL e)))) [])
JOINT_int_STRUCTUREspec_h_DEF
|- !j.
     JOINT_int_STRUCTUREspec_h j =
     ABS_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
       (Node (INR (INR (INR (INR (INL one)))))
         [REP_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
            j])
JOINT_int_LOCALspec_h_DEF
|- !j1 j2.
     JOINT_int_LOCALspec_h j1 j2 =
     ABS_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
       (Node (INR (INR (INR (INR (INR (INL one))))))
         [REP_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
            j1;
          REP_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
            j2])
JOINT_int_OPENspec_h_DEF
|- !n.
     JOINT_int_OPENspec_h n =
     ABS_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
       (Node (INR (INR (INR (INR (INR (INR (INL n))))))) [])
JOINT_int_INCLUDEspec_h_DEF
|- !n.
     JOINT_int_INCLUDEspec_h n =
     ABS_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
       (Node (INR (INR (INR (INR (INR (INR (INR (INL n)))))))) [])
JOINT_int_EMPTYspec_h_DEF
|- JOINT_int_EMPTYspec_h =
   ABS_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
     (Node (INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))) [])
JOINT_int_SEQspec_h_DEF
|- !j1 j2.
     JOINT_int_SEQspec_h j1 j2 =
     ABS_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
       (Node (INR (INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))))
         [REP_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
            j1;
          REP_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
            j2])
JOINT_int_FUNCTORspec_h_DEF
|- !f' s j1 j2.
     JOINT_int_FUNCTORspec_h f' s j1 j2 =
     ABS_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
       (Node
          (INR
            (INR
              (INR (INR (INR (INR (INR (INR (INR (INR (INL (f',s))))))))))))
         [REP_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
            j1;
          REP_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
            j2])
JOINT_int_STRIDstrdesc_h_DEF
|- !s j1 j2.
     JOINT_int_STRIDstrdesc_h s j1 j2 =
     ABS_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
       (Node
          (INR
            (INR
              (INR (INR (INR (INR (INR (INR (INR (INR (INR (INL s))))))))))))
         [REP_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
            j1;
          REP_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
            j2])
JOINT_int_sigexp_h_spec_h_strdesc_h_NONE_strdesc_h_DEF
|- JOINT_int_sigexp_h_spec_h_strdesc_h_NONE_strdesc_h =
   ABS_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
     (Node
        (INR
          (INR
            (INR
              (INR
                (INR (INR (INR (INR (INR (INR (INR (INR (INL one)))))))))))))
       [])
JOINT_int_sigexp_h_spec_h_strdesc_h_SOME_strdesc_h_DEF
|- !j.
     JOINT_int_sigexp_h_spec_h_strdesc_h_SOME_strdesc_h j =
     ABS_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
       (Node
          (INR
            (INR
              (INR
                (INR
                  (INR
                    (INR (INR (INR (INR (INR (INR (INR (INR one)))))))))))))
         [REP_joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h
            j])
joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select_DEF
|- (!j.
     joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
       (JOINT_int_SIGsigexp_h j) =
     ((joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
         j =
       2)
      => 1
      | 0)) /\
   (!s.
     joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
       (JOINT_int_SIGIDsigexp_h s) =
     1) /\
   (!v'.
     joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
       (JOINT_int_VALspec_h v') =
     2) /\
   (!e.
     joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
       (JOINT_int_EXCEPTIONspec_h e) =
     2) /\
   (!j.
     joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
       (JOINT_int_STRUCTUREspec_h j) =
     ((joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
         j =
       3)
      => 2
      | 0)) /\
   (!j1 j2.
     joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
       (JOINT_int_LOCALspec_h j1 j2) =
     (((joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
          j1 =
        2) /\
       (joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
          j2 =
        2))
      => 2
      | 0)) /\
   (!n.
     joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
       (JOINT_int_OPENspec_h n) =
     2) /\
   (!n.
     joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
       (JOINT_int_INCLUDEspec_h n) =
     2) /\
   (joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
      JOINT_int_EMPTYspec_h =
    2) /\
   (!j1 j2.
     joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
       (JOINT_int_SEQspec_h j1 j2) =
     (((joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
          j1 =
        2) /\
       (joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
          j2 =
        2))
      => 2
      | 0)) /\
   (!f' s j1 j2.
     joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
       (JOINT_int_FUNCTORspec_h f' s j1 j2) =
     (((joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
          j1 =
        1) /\
       (joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
          j2 =
        1))
      => 2
      | 0)) /\
   (!s j1 j2.
     joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
       (JOINT_int_STRIDstrdesc_h s j1 j2) =
     (((joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
          j1 =
        1) /\
       (joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
          j2 =
        4))
      => 3
      | 0)) /\
   (joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
      JOINT_int_sigexp_h_spec_h_strdesc_h_NONE_strdesc_h =
    4) /\
   (!j.
     joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
       (JOINT_int_sigexp_h_spec_h_strdesc_h_SOME_strdesc_h j) =
     ((joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
         j =
       3)
      => 4
      | 0))
strdesc_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
           x =
         3)
       rep
strdesc_h_REP_ABS
|- (!a. strdesc_h_abs (strdesc_h_rep a) = a) /\
   (!r.
     (\x.
       joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
         x =
       3)
       r =
     strdesc_h_rep (strdesc_h_abs r) =
     r)
strdesc_h_option_sigexp_h_spec_h_strdesc_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
           x =
         4)
       rep
strdesc_h_option_sigexp_h_spec_h_strdesc_h_REP_ABS
|- (!a.
     strdesc_h_option_sigexp_h_spec_h_strdesc_h_abs
       (strdesc_h_option_sigexp_h_spec_h_strdesc_h_rep a) =
     a) /\
   (!r.
     (\x.
       joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
         x =
       4)
       r =
     strdesc_h_option_sigexp_h_spec_h_strdesc_h_rep
       (strdesc_h_option_sigexp_h_spec_h_strdesc_h_abs r) =
     r)
spec_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
           x =
         2)
       rep
spec_h_REP_ABS
|- (!a. spec_h_abs (spec_h_rep a) = a) /\
   (!r.
     (\x.
       joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
         x =
       2)
       r =
     spec_h_rep (spec_h_abs r) =
     r)
sigexp_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
           x =
         1)
       rep
sigexp_h_REP_ABS
|- (!a. sigexp_h_abs (sigexp_h_rep a) = a) /\
   (!r.
     (\x.
       joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_select
         x =
       1)
       r =
     sigexp_h_rep (sigexp_h_abs r) =
     r)
int_SIGsigexp_h_DEF
|- !x1.
     int_SIGsigexp_h x1 = sigexp_h_abs (JOINT_int_SIGsigexp_h (spec_h_rep x1))
int_SIGIDsigexp_h_DEF
|- !x1. int_SIGIDsigexp_h x1 = sigexp_h_abs (JOINT_int_SIGIDsigexp_h x1)
int_VALspec_h_DEF
|- !x1. int_VALspec_h x1 = spec_h_abs (JOINT_int_VALspec_h x1)
int_EXCEPTIONspec_h_DEF
|- !x1. int_EXCEPTIONspec_h x1 = spec_h_abs (JOINT_int_EXCEPTIONspec_h x1)
int_STRUCTUREspec_h_DEF
|- !x1.
     int_STRUCTUREspec_h x1 =
     spec_h_abs (JOINT_int_STRUCTUREspec_h (strdesc_h_rep x1))
int_LOCALspec_h_DEF
|- !x1 x2.
     int_LOCALspec_h x1 x2 =
     spec_h_abs (JOINT_int_LOCALspec_h (spec_h_rep x1) (spec_h_rep x2))
int_OPENspec_h_DEF
|- !x1. int_OPENspec_h x1 = spec_h_abs (JOINT_int_OPENspec_h x1)
int_INCLUDEspec_h_DEF
|- !x1. int_INCLUDEspec_h x1 = spec_h_abs (JOINT_int_INCLUDEspec_h x1)
int_EMPTYspec_h_DEF
|- int_EMPTYspec_h = spec_h_abs JOINT_int_EMPTYspec_h
int_SEQspec_h_DEF
|- !x1 x2.
     int_SEQspec_h x1 x2 =
     spec_h_abs (JOINT_int_SEQspec_h (spec_h_rep x1) (spec_h_rep x2))
int_FUNCTORspec_h_DEF
|- !x1 x2 x3 x4.
     int_FUNCTORspec_h x1 x2 x3 x4 =
     spec_h_abs
       (JOINT_int_FUNCTORspec_h x1 x2 (sigexp_h_rep x3) (sigexp_h_rep x4))
int_STRIDstrdesc_h_DEF
|- !x1 x2 x3.
     int_STRIDstrdesc_h x1 x2 x3 =
     strdesc_h_abs
       (JOINT_int_STRIDstrdesc_h x1 (sigexp_h_rep x2)
         (strdesc_h_option_sigexp_h_spec_h_strdesc_h_rep x3))
int_sigexp_h_spec_h_strdesc_h_NONE_strdesc_h_DEF
|- int_sigexp_h_spec_h_strdesc_h_NONE_strdesc_h =
   strdesc_h_option_sigexp_h_spec_h_strdesc_h_abs
     JOINT_int_sigexp_h_spec_h_strdesc_h_NONE_strdesc_h
int_sigexp_h_spec_h_strdesc_h_SOME_strdesc_h_DEF
|- !x1.
     int_sigexp_h_spec_h_strdesc_h_SOME_strdesc_h x1 =
     strdesc_h_option_sigexp_h_spec_h_strdesc_h_abs
       (JOINT_int_sigexp_h_spec_h_strdesc_h_SOME_strdesc_h (strdesc_h_rep x1))
SIGsigexp_h
|- SIGsigexp_h = (\x0. int_SIGsigexp_h x0)
SIGIDsigexp_h
|- SIGIDsigexp_h = (\x0. int_SIGIDsigexp_h x0)
VALspec_h
|- VALspec_h = (\x0. int_VALspec_h x0)
EXCEPTIONspec_h
|- EXCEPTIONspec_h = (\x0. int_EXCEPTIONspec_h x0)
STRUCTUREspec_h
|- STRUCTUREspec_h = (\x0. int_STRUCTUREspec_h x0)
LOCALspec_h
|- LOCALspec_h = (\x0 x1. int_LOCALspec_h x0 x1)
OPENspec_h
|- OPENspec_h = (\x0. int_OPENspec_h x0)
INCLUDEspec_h
|- INCLUDEspec_h = (\x0. int_INCLUDEspec_h x0)
EMPTYspec_h
|- EMPTYspec_h = int_EMPTYspec_h
SEQspec_h
|- SEQspec_h = (\x0 x1. int_SEQspec_h x0 x1)
FUNCTORspec_h
|- FUNCTORspec_h = (\x0 x1 x2 x3. int_FUNCTORspec_h x0 x1 x2 x3)
int_inj_strdesc_h_option_sigexp_h_spec_h_strdesc_h
|- (int_inj_strdesc_h_option_sigexp_h_spec_h_strdesc_h NONE =
    int_sigexp_h_spec_h_strdesc_h_NONE_strdesc_h) /\
   (!x0.
     int_inj_strdesc_h_option_sigexp_h_spec_h_strdesc_h (SOME x0) =
     int_sigexp_h_spec_h_strdesc_h_SOME_strdesc_h x0)
int_inv_strdesc_h_option_sigexp_h_spec_h_strdesc_h
|- (int_inv_strdesc_h_option_sigexp_h_spec_h_strdesc_h
      int_sigexp_h_spec_h_strdesc_h_NONE_strdesc_h =
    NONE) /\
   (!x1.
     int_inv_strdesc_h_option_sigexp_h_spec_h_strdesc_h
       (int_sigexp_h_spec_h_strdesc_h_SOME_strdesc_h x1) =
     SOME x1)
STRIDstrdesc_h
|- STRIDstrdesc_h =
   (\x0 x1 x2.
     int_STRIDstrdesc_h x0 x1
       (int_inj_strdesc_h_option_sigexp_h_spec_h_strdesc_h x2))
dist_aux_ftn_sigexp_h_DEF
|- (!x1. dist_aux_ftn_sigexp_h (int_SIGsigexp_h x1) = 0) /\
   (!x1. dist_aux_ftn_sigexp_h (int_SIGIDsigexp_h x1) = 1) /\
   (!x1. dist_aux_ftn_spec_h (int_VALspec_h x1) = 2) /\
   (!x1. dist_aux_ftn_spec_h (int_EXCEPTIONspec_h x1) = 3) /\
   (!x1. dist_aux_ftn_spec_h (int_STRUCTUREspec_h x1) = 4) /\
   (!x1 x2. dist_aux_ftn_spec_h (int_LOCALspec_h x1 x2) = 5) /\
   (!x1. dist_aux_ftn_spec_h (int_OPENspec_h x1) = 6) /\
   (!x1. dist_aux_ftn_spec_h (int_INCLUDEspec_h x1) = 7) /\
   (dist_aux_ftn_spec_h int_EMPTYspec_h = 8) /\
   (!x1 x2. dist_aux_ftn_spec_h (int_SEQspec_h x1 x2) = 9) /\
   (!x1 x2 x3 x4. dist_aux_ftn_spec_h (int_FUNCTORspec_h x1 x2 x3 x4) = 10) /\
   (!x1 x2 x3. dist_aux_ftn_strdesc_h (int_STRIDstrdesc_h x1 x2 x3) = 11) /\
   (dist_aux_ftn_strdesc_h_option_sigexp_h_spec_h_strdesc_h
      int_sigexp_h_spec_h_strdesc_h_NONE_strdesc_h =
    12) /\
   (!x1.
     dist_aux_ftn_strdesc_h_option_sigexp_h_spec_h_strdesc_h
       (int_sigexp_h_spec_h_strdesc_h_SOME_strdesc_h x1) =
     13)
int_SIGsigexp_h_arg_DEF
|- (!x1. int_SIGsigexp_h_arg (int_SIGsigexp_h x1) = x1) /\
   (!x1. int_SIGsigexp_h_arg (int_SIGIDsigexp_h x1) = (@x. T))
int_SIGIDsigexp_h_arg_DEF
|- (!x1. int_SIGIDsigexp_h_arg (int_SIGIDsigexp_h x1) = x1) /\
   (!x1. int_SIGIDsigexp_h_arg (int_SIGsigexp_h x1) = (@x. T))
int_VALspec_h_arg_DEF
|- (!x1. int_VALspec_h_arg (int_VALspec_h x1) = x1) /\
   (!x1. int_VALspec_h_arg (int_EXCEPTIONspec_h x1) = (@x. T)) /\
   (!x1. int_VALspec_h_arg (int_STRUCTUREspec_h x1) = (@x. T)) /\
   (!x1 x2. int_VALspec_h_arg (int_LOCALspec_h x1 x2) = (@x. T)) /\
   (!x1. int_VALspec_h_arg (int_OPENspec_h x1) = (@x. T)) /\
   (!x1. int_VALspec_h_arg (int_INCLUDEspec_h x1) = (@x. T)) /\
   (int_VALspec_h_arg int_EMPTYspec_h = (@x. T)) /\
   (!x1 x2. int_VALspec_h_arg (int_SEQspec_h x1 x2) = (@x. T)) /\
   (!x1 x2 x3 x4. int_VALspec_h_arg (int_FUNCTORspec_h x1 x2 x3 x4) = (@x. T))
int_EXCEPTIONspec_h_arg_DEF
|- (!x1. int_EXCEPTIONspec_h_arg (int_EXCEPTIONspec_h x1) = x1) /\
   (!x1. int_EXCEPTIONspec_h_arg (int_VALspec_h x1) = (@x. T)) /\
   (!x1. int_EXCEPTIONspec_h_arg (int_STRUCTUREspec_h x1) = (@x. T)) /\
   (!x1 x2. int_EXCEPTIONspec_h_arg (int_LOCALspec_h x1 x2) = (@x. T)) /\
   (!x1. int_EXCEPTIONspec_h_arg (int_OPENspec_h x1) = (@x. T)) /\
   (!x1. int_EXCEPTIONspec_h_arg (int_INCLUDEspec_h x1) = (@x. T)) /\
   (int_EXCEPTIONspec_h_arg int_EMPTYspec_h = (@x. T)) /\
   (!x1 x2. int_EXCEPTIONspec_h_arg (int_SEQspec_h x1 x2) = (@x. T)) /\
   (!x1 x2 x3 x4.
     int_EXCEPTIONspec_h_arg (int_FUNCTORspec_h x1 x2 x3 x4) = (@x. T))
int_STRUCTUREspec_h_arg_DEF
|- (!x1. int_STRUCTUREspec_h_arg (int_STRUCTUREspec_h x1) = x1) /\
   (!x1. int_STRUCTUREspec_h_arg (int_VALspec_h x1) = (@x. T)) /\
   (!x1. int_STRUCTUREspec_h_arg (int_EXCEPTIONspec_h x1) = (@x. T)) /\
   (!x1 x2. int_STRUCTUREspec_h_arg (int_LOCALspec_h x1 x2) = (@x. T)) /\
   (!x1. int_STRUCTUREspec_h_arg (int_OPENspec_h x1) = (@x. T)) /\
   (!x1. int_STRUCTUREspec_h_arg (int_INCLUDEspec_h x1) = (@x. T)) /\
   (int_STRUCTUREspec_h_arg int_EMPTYspec_h = (@x. T)) /\
   (!x1 x2. int_STRUCTUREspec_h_arg (int_SEQspec_h x1 x2) = (@x. T)) /\
   (!x1 x2 x3 x4.
     int_STRUCTUREspec_h_arg (int_FUNCTORspec_h x1 x2 x3 x4) = (@x. T))
int_LOCALspec_h_arg1_DEF
|- (!x1 x2. int_LOCALspec_h_arg1 (int_LOCALspec_h x1 x2) = x1) /\
   (!x1. int_LOCALspec_h_arg1 (int_VALspec_h x1) = (@x. T)) /\
   (!x1. int_LOCALspec_h_arg1 (int_EXCEPTIONspec_h x1) = (@x. T)) /\
   (!x1. int_LOCALspec_h_arg1 (int_STRUCTUREspec_h x1) = (@x. T)) /\
   (!x1. int_LOCALspec_h_arg1 (int_OPENspec_h x1) = (@x. T)) /\
   (!x1. int_LOCALspec_h_arg1 (int_INCLUDEspec_h x1) = (@x. T)) /\
   (int_LOCALspec_h_arg1 int_EMPTYspec_h = (@x. T)) /\
   (!x1 x2. int_LOCALspec_h_arg1 (int_SEQspec_h x1 x2) = (@x. T)) /\
   (!x1 x2 x3 x4.
     int_LOCALspec_h_arg1 (int_FUNCTORspec_h x1 x2 x3 x4) = (@x. T))
int_LOCALspec_h_arg2_DEF
|- (!x1 x2. int_LOCALspec_h_arg2 (int_LOCALspec_h x1 x2) = x2) /\
   (!x1. int_LOCALspec_h_arg2 (int_VALspec_h x1) = (@x. T)) /\
   (!x1. int_LOCALspec_h_arg2 (int_EXCEPTIONspec_h x1) = (@x. T)) /\
   (!x1. int_LOCALspec_h_arg2 (int_STRUCTUREspec_h x1) = (@x. T)) /\
   (!x1. int_LOCALspec_h_arg2 (int_OPENspec_h x1) = (@x. T)) /\
   (!x1. int_LOCALspec_h_arg2 (int_INCLUDEspec_h x1) = (@x. T)) /\
   (int_LOCALspec_h_arg2 int_EMPTYspec_h = (@x. T)) /\
   (!x1 x2. int_LOCALspec_h_arg2 (int_SEQspec_h x1 x2) = (@x. T)) /\
   (!x1 x2 x3 x4.
     int_LOCALspec_h_arg2 (int_FUNCTORspec_h x1 x2 x3 x4) = (@x. T))
int_OPENspec_h_arg_DEF
|- (!x1. int_OPENspec_h_arg (int_OPENspec_h x1) = x1) /\
   (!x1. int_OPENspec_h_arg (int_VALspec_h x1) = (@x. T)) /\
   (!x1. int_OPENspec_h_arg (int_EXCEPTIONspec_h x1) = (@x. T)) /\
   (!x1. int_OPENspec_h_arg (int_STRUCTUREspec_h x1) = (@x. T)) /\
   (!x1 x2. int_OPENspec_h_arg (int_LOCALspec_h x1 x2) = (@x. T)) /\
   (!x1. int_OPENspec_h_arg (int_INCLUDEspec_h x1) = (@x. T)) /\
   (int_OPENspec_h_arg int_EMPTYspec_h = (@x. T)) /\
   (!x1 x2. int_OPENspec_h_arg (int_SEQspec_h x1 x2) = (@x. T)) /\
   (!x1 x2 x3 x4.
     int_OPENspec_h_arg (int_FUNCTORspec_h x1 x2 x3 x4) = (@x. T))
int_INCLUDEspec_h_arg_DEF
|- (!x1. int_INCLUDEspec_h_arg (int_INCLUDEspec_h x1) = x1) /\
   (!x1. int_INCLUDEspec_h_arg (int_VALspec_h x1) = (@x. T)) /\
   (!x1. int_INCLUDEspec_h_arg (int_EXCEPTIONspec_h x1) = (@x. T)) /\
   (!x1. int_INCLUDEspec_h_arg (int_STRUCTUREspec_h x1) = (@x. T)) /\
   (!x1 x2. int_INCLUDEspec_h_arg (int_LOCALspec_h x1 x2) = (@x. T)) /\
   (!x1. int_INCLUDEspec_h_arg (int_OPENspec_h x1) = (@x. T)) /\
   (int_INCLUDEspec_h_arg int_EMPTYspec_h = (@x. T)) /\
   (!x1 x2. int_INCLUDEspec_h_arg (int_SEQspec_h x1 x2) = (@x. T)) /\
   (!x1 x2 x3 x4.
     int_INCLUDEspec_h_arg (int_FUNCTORspec_h x1 x2 x3 x4) = (@x. T))
int_SEQspec_h_arg1_DEF
|- (!x1 x2. int_SEQspec_h_arg1 (int_SEQspec_h x1 x2) = x1) /\
   (!x1. int_SEQspec_h_arg1 (int_VALspec_h x1) = (@x. T)) /\
   (!x1. int_SEQspec_h_arg1 (int_EXCEPTIONspec_h x1) = (@x. T)) /\
   (!x1. int_SEQspec_h_arg1 (int_STRUCTUREspec_h x1) = (@x. T)) /\
   (!x1 x2. int_SEQspec_h_arg1 (int_LOCALspec_h x1 x2) = (@x. T)) /\
   (!x1. int_SEQspec_h_arg1 (int_OPENspec_h x1) = (@x. T)) /\
   (!x1. int_SEQspec_h_arg1 (int_INCLUDEspec_h x1) = (@x. T)) /\
   (int_SEQspec_h_arg1 int_EMPTYspec_h = (@x. T)) /\
   (!x1 x2 x3 x4.
     int_SEQspec_h_arg1 (int_FUNCTORspec_h x1 x2 x3 x4) = (@x. T))
int_SEQspec_h_arg2_DEF
|- (!x1 x2. int_SEQspec_h_arg2 (int_SEQspec_h x1 x2) = x2) /\
   (!x1. int_SEQspec_h_arg2 (int_VALspec_h x1) = (@x. T)) /\
   (!x1. int_SEQspec_h_arg2 (int_EXCEPTIONspec_h x1) = (@x. T)) /\
   (!x1. int_SEQspec_h_arg2 (int_STRUCTUREspec_h x1) = (@x. T)) /\
   (!x1 x2. int_SEQspec_h_arg2 (int_LOCALspec_h x1 x2) = (@x. T)) /\
   (!x1. int_SEQspec_h_arg2 (int_OPENspec_h x1) = (@x. T)) /\
   (!x1. int_SEQspec_h_arg2 (int_INCLUDEspec_h x1) = (@x. T)) /\
   (int_SEQspec_h_arg2 int_EMPTYspec_h = (@x. T)) /\
   (!x1 x2 x3 x4.
     int_SEQspec_h_arg2 (int_FUNCTORspec_h x1 x2 x3 x4) = (@x. T))
int_FUNCTORspec_h_arg1_DEF
|- (!x1 x2 x3 x4.
     int_FUNCTORspec_h_arg1 (int_FUNCTORspec_h x1 x2 x3 x4) = x1) /\
   (!x1. int_FUNCTORspec_h_arg1 (int_VALspec_h x1) = (@x. T)) /\
   (!x1. int_FUNCTORspec_h_arg1 (int_EXCEPTIONspec_h x1) = (@x. T)) /\
   (!x1. int_FUNCTORspec_h_arg1 (int_STRUCTUREspec_h x1) = (@x. T)) /\
   (!x1 x2. int_FUNCTORspec_h_arg1 (int_LOCALspec_h x1 x2) = (@x. T)) /\
   (!x1. int_FUNCTORspec_h_arg1 (int_OPENspec_h x1) = (@x. T)) /\
   (!x1. int_FUNCTORspec_h_arg1 (int_INCLUDEspec_h x1) = (@x. T)) /\
   (int_FUNCTORspec_h_arg1 int_EMPTYspec_h = (@x. T)) /\
   (!x1 x2. int_FUNCTORspec_h_arg1 (int_SEQspec_h x1 x2) = (@x. T))
int_FUNCTORspec_h_arg2_DEF
|- (!x1 x2 x3 x4.
     int_FUNCTORspec_h_arg2 (int_FUNCTORspec_h x1 x2 x3 x4) = x2) /\
   (!x1. int_FUNCTORspec_h_arg2 (int_VALspec_h x1) = (@x. T)) /\
   (!x1. int_FUNCTORspec_h_arg2 (int_EXCEPTIONspec_h x1) = (@x. T)) /\
   (!x1. int_FUNCTORspec_h_arg2 (int_STRUCTUREspec_h x1) = (@x. T)) /\
   (!x1 x2. int_FUNCTORspec_h_arg2 (int_LOCALspec_h x1 x2) = (@x. T)) /\
   (!x1. int_FUNCTORspec_h_arg2 (int_OPENspec_h x1) = (@x. T)) /\
   (!x1. int_FUNCTORspec_h_arg2 (int_INCLUDEspec_h x1) = (@x. T)) /\
   (int_FUNCTORspec_h_arg2 int_EMPTYspec_h = (@x. T)) /\
   (!x1 x2. int_FUNCTORspec_h_arg2 (int_SEQspec_h x1 x2) = (@x. T))
int_FUNCTORspec_h_arg3_DEF
|- (!x1 x2 x3 x4.
     int_FUNCTORspec_h_arg3 (int_FUNCTORspec_h x1 x2 x3 x4) = x3) /\
   (!x1. int_FUNCTORspec_h_arg3 (int_VALspec_h x1) = (@x. T)) /\
   (!x1. int_FUNCTORspec_h_arg3 (int_EXCEPTIONspec_h x1) = (@x. T)) /\
   (!x1. int_FUNCTORspec_h_arg3 (int_STRUCTUREspec_h x1) = (@x. T)) /\
   (!x1 x2. int_FUNCTORspec_h_arg3 (int_LOCALspec_h x1 x2) = (@x. T)) /\
   (!x1. int_FUNCTORspec_h_arg3 (int_OPENspec_h x1) = (@x. T)) /\
   (!x1. int_FUNCTORspec_h_arg3 (int_INCLUDEspec_h x1) = (@x. T)) /\
   (int_FUNCTORspec_h_arg3 int_EMPTYspec_h = (@x. T)) /\
   (!x1 x2. int_FUNCTORspec_h_arg3 (int_SEQspec_h x1 x2) = (@x. T))
int_FUNCTORspec_h_arg4_DEF
|- (!x1 x2 x3 x4.
     int_FUNCTORspec_h_arg4 (int_FUNCTORspec_h x1 x2 x3 x4) = x4) /\
   (!x1. int_FUNCTORspec_h_arg4 (int_VALspec_h x1) = (@x. T)) /\
   (!x1. int_FUNCTORspec_h_arg4 (int_EXCEPTIONspec_h x1) = (@x. T)) /\
   (!x1. int_FUNCTORspec_h_arg4 (int_STRUCTUREspec_h x1) = (@x. T)) /\
   (!x1 x2. int_FUNCTORspec_h_arg4 (int_LOCALspec_h x1 x2) = (@x. T)) /\
   (!x1. int_FUNCTORspec_h_arg4 (int_OPENspec_h x1) = (@x. T)) /\
   (!x1. int_FUNCTORspec_h_arg4 (int_INCLUDEspec_h x1) = (@x. T)) /\
   (int_FUNCTORspec_h_arg4 int_EMPTYspec_h = (@x. T)) /\
   (!x1 x2. int_FUNCTORspec_h_arg4 (int_SEQspec_h x1 x2) = (@x. T))
int_STRIDstrdesc_h_arg1_DEF
|- !x1 x2 x3. int_STRIDstrdesc_h_arg1 (int_STRIDstrdesc_h x1 x2 x3) = x1
int_STRIDstrdesc_h_arg2_DEF
|- !x1 x2 x3. int_STRIDstrdesc_h_arg2 (int_STRIDstrdesc_h x1 x2 x3) = x2
int_STRIDstrdesc_h_arg3_DEF
|- !x1 x2 x3. int_STRIDstrdesc_h_arg3 (int_STRIDstrdesc_h x1 x2 x3) = x3
int_sigexp_h_spec_h_strdesc_h_SOME_strdesc_h_arg_DEF
|- (!x1.
     int_sigexp_h_spec_h_strdesc_h_SOME_strdesc_h_arg
       (int_sigexp_h_spec_h_strdesc_h_SOME_strdesc_h x1) =
     x1) /\
   (int_sigexp_h_spec_h_strdesc_h_SOME_strdesc_h_arg
      int_sigexp_h_spec_h_strdesc_h_NONE_strdesc_h =
    (@x. T))
joint_ty_sigbind_h_sigbind_h_option_sigbind_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (TRP
         (\v tl.
           (?s0 s1. v = INL (s0,s1)) /\ (LENGTH tl = SUC 0) \/
           (v = INR (INL one)) /\ (LENGTH tl = 0) \/
           (v = INR (INR one)) /\ (LENGTH tl = SUC 0)))
       rep
joint_ty_sigbind_h_sigbind_h_option_sigbind_h_ISO_DEF
|- (!a.
     ABS_joint_ty_sigbind_h_sigbind_h_option_sigbind_h
       (REP_joint_ty_sigbind_h_sigbind_h_option_sigbind_h a) =
     a) /\
   (!r.
     TRP
       (\v tl.
         (?s0 s1. v = INL (s0,s1)) /\ (LENGTH tl = SUC 0) \/
         (v = INR (INL one)) /\ (LENGTH tl = 0) \/
         (v = INR (INR one)) /\ (LENGTH tl = SUC 0))
       r =
     REP_joint_ty_sigbind_h_sigbind_h_option_sigbind_h
       (ABS_joint_ty_sigbind_h_sigbind_h_option_sigbind_h r) =
     r)
JOINT_int_BINDsigbind_h_DEF
|- !s0 s1 j.
     JOINT_int_BINDsigbind_h s0 s1 j =
     ABS_joint_ty_sigbind_h_sigbind_h_option_sigbind_h
       (Node (INL (s0,s1))
         [REP_joint_ty_sigbind_h_sigbind_h_option_sigbind_h j])
JOINT_int_sigbind_h_NONE_sigbind_h_DEF
|- JOINT_int_sigbind_h_NONE_sigbind_h =
   ABS_joint_ty_sigbind_h_sigbind_h_option_sigbind_h (Node (INR (INL one)) [])
JOINT_int_sigbind_h_SOME_sigbind_h_DEF
|- !j.
     JOINT_int_sigbind_h_SOME_sigbind_h j =
     ABS_joint_ty_sigbind_h_sigbind_h_option_sigbind_h
       (Node (INR (INR one))
         [REP_joint_ty_sigbind_h_sigbind_h_option_sigbind_h j])
joint_ty_sigbind_h_sigbind_h_option_sigbind_h_select_DEF
|- (!s0 s1 j.
     joint_ty_sigbind_h_sigbind_h_option_sigbind_h_select
       (JOINT_int_BINDsigbind_h s0 s1 j) =
     ((joint_ty_sigbind_h_sigbind_h_option_sigbind_h_select j = 2)
      => 1
      | 0)) /\
   (joint_ty_sigbind_h_sigbind_h_option_sigbind_h_select
      JOINT_int_sigbind_h_NONE_sigbind_h =
    2) /\
   (!j.
     joint_ty_sigbind_h_sigbind_h_option_sigbind_h_select
       (JOINT_int_sigbind_h_SOME_sigbind_h j) =
     ((joint_ty_sigbind_h_sigbind_h_option_sigbind_h_select j = 1) => 2 | 0))
sigbind_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x. joint_ty_sigbind_h_sigbind_h_option_sigbind_h_select x = 1)
       rep
sigbind_h_REP_ABS
|- (!a. sigbind_h_abs (sigbind_h_rep a) = a) /\
   (!r.
     (\x. joint_ty_sigbind_h_sigbind_h_option_sigbind_h_select x = 1) r =
     sigbind_h_rep (sigbind_h_abs r) =
     r)
sigbind_h_option_sigbind_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x. joint_ty_sigbind_h_sigbind_h_option_sigbind_h_select x = 2)
       rep
sigbind_h_option_sigbind_h_REP_ABS
|- (!a.
     sigbind_h_option_sigbind_h_abs (sigbind_h_option_sigbind_h_rep a) = a) /\
   (!r.
     (\x. joint_ty_sigbind_h_sigbind_h_option_sigbind_h_select x = 2) r =
     sigbind_h_option_sigbind_h_rep (sigbind_h_option_sigbind_h_abs r) =
     r)
int_BINDsigbind_h_DEF
|- !x1 x2 x3.
     int_BINDsigbind_h x1 x2 x3 =
     sigbind_h_abs
       (JOINT_int_BINDsigbind_h x1 x2 (sigbind_h_option_sigbind_h_rep x3))
int_sigbind_h_NONE_sigbind_h_DEF
|- int_sigbind_h_NONE_sigbind_h =
   sigbind_h_option_sigbind_h_abs JOINT_int_sigbind_h_NONE_sigbind_h
int_sigbind_h_SOME_sigbind_h_DEF
|- !x1.
     int_sigbind_h_SOME_sigbind_h x1 =
     sigbind_h_option_sigbind_h_abs
       (JOINT_int_sigbind_h_SOME_sigbind_h (sigbind_h_rep x1))
int_inj_sigbind_h_option_sigbind_h
|- (int_inj_sigbind_h_option_sigbind_h NONE = int_sigbind_h_NONE_sigbind_h) /\
   (!x0.
     int_inj_sigbind_h_option_sigbind_h (SOME x0) =
     int_sigbind_h_SOME_sigbind_h x0)
int_inv_sigbind_h_option_sigbind_h
|- (int_inv_sigbind_h_option_sigbind_h int_sigbind_h_NONE_sigbind_h = NONE) /\
   (!x1.
     int_inv_sigbind_h_option_sigbind_h (int_sigbind_h_SOME_sigbind_h x1) =
     SOME x1)
BINDsigbind_h
|- BINDsigbind_h =
   (\x0 x1 x2.
     int_BINDsigbind_h x0 x1 (int_inj_sigbind_h_option_sigbind_h x2))
dist_aux_ftn_sigbind_h_DEF
|- (!x1 x2 x3. dist_aux_ftn_sigbind_h (int_BINDsigbind_h x1 x2 x3) = 0) /\
   (dist_aux_ftn_sigbind_h_option_sigbind_h int_sigbind_h_NONE_sigbind_h =
    1) /\
   (!x1.
     dist_aux_ftn_sigbind_h_option_sigbind_h
       (int_sigbind_h_SOME_sigbind_h x1) =
     2)
int_BINDsigbind_h_arg1_DEF
|- !x1 x2 x3. int_BINDsigbind_h_arg1 (int_BINDsigbind_h x1 x2 x3) = x1
int_BINDsigbind_h_arg2_DEF
|- !x1 x2 x3. int_BINDsigbind_h_arg2 (int_BINDsigbind_h x1 x2 x3) = x2
int_BINDsigbind_h_arg3_DEF
|- !x1 x2 x3. int_BINDsigbind_h_arg3 (int_BINDsigbind_h x1 x2 x3) = x3
int_sigbind_h_SOME_sigbind_h_arg_DEF
|- (!x1.
     int_sigbind_h_SOME_sigbind_h_arg (int_sigbind_h_SOME_sigbind_h x1) =
     x1) /\
   (int_sigbind_h_SOME_sigbind_h_arg int_sigbind_h_NONE_sigbind_h = (@x. T))
sigdec_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (TRP
         (\v tl.
           (?s. v = INL s) /\ (LENGTH tl = 0) \/
           (v = INR (INL one)) /\ (LENGTH tl = 0) \/
           (v = INR (INR one)) /\ (LENGTH tl = SUC (SUC 0))))
       rep
sigdec_h_ISO_DEF
|- (!a. ABS_sigdec_h (REP_sigdec_h a) = a) /\
   (!r.
     TRP
       (\v tl.
         (?s. v = INL s) /\ (LENGTH tl = 0) \/
         (v = INR (INL one)) /\ (LENGTH tl = 0) \/
         (v = INR (INR one)) /\ (LENGTH tl = SUC (SUC 0)))
       r =
     REP_sigdec_h (ABS_sigdec_h r) =
     r)
SIGNATUREsigdec_h_DEF
|- !s. SIGNATUREsigdec_h s = ABS_sigdec_h (Node (INL s) [])
EMPTYsigdec_h_DEF
|- EMPTYsigdec_h = ABS_sigdec_h (Node (INR (INL one)) [])
SEQsigdec_h_DEF
|- !s1 s2.
     SEQsigdec_h s1 s2 =
     ABS_sigdec_h (Node (INR (INR one)) [REP_sigdec_h s1; REP_sigdec_h s2])
joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (TRP
         (\v tl.
           (?f s0 s1. v = INL (f,s0,s1)) /\ (LENGTH tl = SUC (SUC (SUC 0))) \/
           (?f l. v = INR (INL (f,l))) /\ (LENGTH tl = 0) \/
           (v = INR (INR (INL one))) /\ (LENGTH tl = 0) \/
           (v = INR (INR (INR (INL one)))) /\ (LENGTH tl = SUC 0) \/
           (?d. v = INR (INR (INR (INR (INL d))))) /\ (LENGTH tl = 0) \/
           (v = INR (INR (INR (INR (INR (INL one)))))) /\
           (LENGTH tl = SUC 0) \/
           (v = INR (INR (INR (INR (INR (INR (INL one))))))) /\
           (LENGTH tl = SUC (SUC 0)) \/
           (?n. v = INR (INR (INR (INR (INR (INR (INR (INL n)))))))) /\
           (LENGTH tl = 0) \/
           (v = INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))) /\
           (LENGTH tl = 0) \/
           (v =
            INR (INR (INR (INR (INR (INR (INR (INR (INR (INL one)))))))))) /\
           (LENGTH tl = SUC (SUC 0)) \/
           (v =
            INR
              (INR
                (INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))))) /\
           (LENGTH tl = SUC 0) \/
           (v =
            INR
              (INR
                (INR
                  (INR
                    (INR (INR (INR (INR (INR (INR (INR (INL one)))))))))))) /\
           (LENGTH tl = 0) \/
           (?s.
             v =
             INR
               (INR
                 (INR
                   (INR
                     (INR
                       (INR
                         (INR (INR (INR (INR (INR (INR (INL s))))))))))))) /\
           (LENGTH tl = 0) \/
           (?s.
             v =
             INR
               (INR
                 (INR
                   (INR
                     (INR
                       (INR
                         (INR
                           (INR
                             (INR (INR (INR (INR (INR (INL s)))))))))))))) /\
           (LENGTH tl = SUC (SUC (SUC 0))) \/
           (v =
            INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR
                          (INR
                            (INR
                              (INR
                                (INR (INR (INR (INR (INL one))))))))))))))) /\
           (LENGTH tl = 0) \/
           (v =
            INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR
                          (INR
                            (INR
                              (INR
                                (INR
                                  (INR
                                    (INR (INR (INR (INL one)))))))))))))))) /\
           (LENGTH tl = SUC 0) \/
           (v =
            INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR
                          (INR
                            (INR
                              (INR
                                (INR
                                  (INR
                                    (INR
                                      (INR
                                        (INR (INR (INL one))))))))))))))))) /\
           (LENGTH tl = SUC 0) \/
           (?l.
             v =
             INR
               (INR
                 (INR
                   (INR
                     (INR
                       (INR
                         (INR
                           (INR
                             (INR
                               (INR
                                 (INR
                                   (INR
                                     (INR
                                       (INR
                                         (INR
                                           (INR
                                             (INR (INL l)))))))))))))))))) /\
           (LENGTH tl = 0) \/
           (?l.
             v =
             INR
               (INR
                 (INR
                   (INR
                     (INR
                       (INR
                         (INR
                           (INR
                             (INR
                               (INR
                                 (INR
                                   (INR
                                     (INR
                                       (INR
                                         (INR
                                           (INR
                                             (INR
                                               (INR
                                                 (INL l))))))))))))))))))) /\
           (LENGTH tl = SUC 0) \/
           (v =
            INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR
                          (INR
                            (INR
                              (INR
                                (INR
                                  (INR
                                    (INR
                                      (INR
                                        (INR
                                          (INR
                                            (INR
                                              (INR
                                                (INR one))))))))))))))))))) /\
           (LENGTH tl = SUC (SUC 0))))
       rep
joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_ISO_DEF
|- (!a.
     ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
       (REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
         a) =
     a) /\
   (!r.
     TRP
       (\v tl.
         (?f s0 s1. v = INL (f,s0,s1)) /\ (LENGTH tl = SUC (SUC (SUC 0))) \/
         (?f l. v = INR (INL (f,l))) /\ (LENGTH tl = 0) \/
         (v = INR (INR (INL one))) /\ (LENGTH tl = 0) \/
         (v = INR (INR (INR (INL one)))) /\ (LENGTH tl = SUC 0) \/
         (?d. v = INR (INR (INR (INR (INL d))))) /\ (LENGTH tl = 0) \/
         (v = INR (INR (INR (INR (INR (INL one)))))) /\ (LENGTH tl = SUC 0) \/
         (v = INR (INR (INR (INR (INR (INR (INL one))))))) /\
         (LENGTH tl = SUC (SUC 0)) \/
         (?n. v = INR (INR (INR (INR (INR (INR (INR (INL n)))))))) /\
         (LENGTH tl = 0) \/
         (v = INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))) /\
         (LENGTH tl = 0) \/
         (v =
          INR (INR (INR (INR (INR (INR (INR (INR (INR (INL one)))))))))) /\
         (LENGTH tl = SUC (SUC 0)) \/
         (v =
          INR
            (INR
              (INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))))) /\
         (LENGTH tl = SUC 0) \/
         (v =
          INR
            (INR
              (INR
                (INR
                  (INR (INR (INR (INR (INR (INR (INR (INL one)))))))))))) /\
         (LENGTH tl = 0) \/
         (?s.
           v =
           INR
             (INR
               (INR
                 (INR
                   (INR
                     (INR (INR (INR (INR (INR (INR (INR (INL s))))))))))))) /\
         (LENGTH tl = 0) \/
         (?s.
           v =
           INR
             (INR
               (INR
                 (INR
                   (INR
                     (INR
                       (INR
                         (INR (INR (INR (INR (INR (INR (INL s)))))))))))))) /\
         (LENGTH tl = SUC (SUC (SUC 0))) \/
         (v =
          INR
            (INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR
                          (INR
                            (INR
                              (INR (INR (INR (INR (INL one))))))))))))))) /\
         (LENGTH tl = 0) \/
         (v =
          INR
            (INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR
                          (INR
                            (INR
                              (INR
                                (INR
                                  (INR (INR (INR (INL one)))))))))))))))) /\
         (LENGTH tl = SUC 0) \/
         (v =
          INR
            (INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR
                          (INR
                            (INR
                              (INR
                                (INR
                                  (INR
                                    (INR
                                      (INR (INR (INL one))))))))))))))))) /\
         (LENGTH tl = SUC 0) \/
         (?l.
           v =
           INR
             (INR
               (INR
                 (INR
                   (INR
                     (INR
                       (INR
                         (INR
                           (INR
                             (INR
                               (INR
                                 (INR
                                   (INR
                                     (INR
                                       (INR
                                         (INR (INR (INL l)))))))))))))))))) /\
         (LENGTH tl = 0) \/
         (?l.
           v =
           INR
             (INR
               (INR
                 (INR
                   (INR
                     (INR
                       (INR
                         (INR
                           (INR
                             (INR
                               (INR
                                 (INR
                                   (INR
                                     (INR
                                       (INR
                                         (INR
                                           (INR
                                             (INR (INL l))))))))))))))))))) /\
         (LENGTH tl = SUC 0) \/
         (v =
          INR
            (INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR
                          (INR
                            (INR
                              (INR
                                (INR
                                  (INR
                                    (INR
                                      (INR
                                        (INR
                                          (INR
                                            (INR
                                              (INR one))))))))))))))))))) /\
         (LENGTH tl = SUC (SUC 0)))
       r =
     REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
       (ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
         r) =
     r)
JOINT_int_BINDfunbind_h_DEF
|- !f' s0 s1 j1 j2 j3.
     JOINT_int_BINDfunbind_h f' s0 s1 j1 j2 j3 =
     ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
       (Node (INL (f',s0,s1))
         [REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
            j1;
          REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
            j2;
          REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
            j3])
JOINT_int_REBINDfunbind_h_DEF
|- !f' l.
     JOINT_int_REBINDfunbind_h f' l =
     ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
       (Node (INR (INL (f',l))) [])
JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_funbind_h_DEF
|- JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_funbind_h =
   ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
     (Node (INR (INR (INL one))) [])
JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h_DEF
|- !j.
     JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h j =
     ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
       (Node (INR (INR (INR (INL one))))
         [REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
            j])
JOINT_int_DECmoddec_h_DEF
|- !d.
     JOINT_int_DECmoddec_h d =
     ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
       (Node (INR (INR (INR (INR (INL d))))) [])
JOINT_int_STRUCTUREmoddec_h_DEF
|- !j.
     JOINT_int_STRUCTUREmoddec_h j =
     ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
       (Node (INR (INR (INR (INR (INR (INL one))))))
         [REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
            j])
JOINT_int_LOCALmoddec_h_DEF
|- !j1 j2.
     JOINT_int_LOCALmoddec_h j1 j2 =
     ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
       (Node (INR (INR (INR (INR (INR (INR (INL one)))))))
         [REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
            j1;
          REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
            j2])
JOINT_int_OPENmoddec_h_DEF
|- !n.
     JOINT_int_OPENmoddec_h n =
     ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
       (Node (INR (INR (INR (INR (INR (INR (INR (INL n)))))))) [])
JOINT_int_EMPTYmoddec_h_DEF
|- JOINT_int_EMPTYmoddec_h =
   ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
     (Node (INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))) [])
JOINT_int_SEQmoddec_h_DEF
|- !j1 j2.
     JOINT_int_SEQmoddec_h j1 j2 =
     ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
       (Node (INR (INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))))
         [REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
            j1;
          REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
            j2])
JOINT_int_FUNCTORmoddec_h_DEF
|- !j.
     JOINT_int_FUNCTORmoddec_h j =
     ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
       (Node
          (INR
            (INR (INR (INR (INR (INR (INR (INR (INR (INR (INL one)))))))))))
         [REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
            j])
JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_sigexp_h_DEF
|- JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_sigexp_h =
   ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
     (Node
        (INR
          (INR
            (INR (INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))))))
       [])
JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h_DEF
|- !s.
     JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h s =
     ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
       (Node
          (INR
            (INR
              (INR
                (INR
                  (INR (INR (INR (INR (INR (INR (INR (INR (INL s)))))))))))))
         [])
JOINT_int_BINDstrbind_h_DEF
|- !s j1 j2 j3.
     JOINT_int_BINDstrbind_h s j1 j2 j3 =
     ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
       (Node
          (INR
            (INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR (INR (INR (INR (INR (INR (INR (INL s))))))))))))))
         [REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
            j1;
          REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
            j2;
          REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
            j3])
JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_strbind_h_DEF
|- JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_strbind_h =
   ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
     (Node
        (INR
          (INR
            (INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR (INR (INR (INR (INR (INR (INL one)))))))))))))))
       [])
JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h_DEF
|- !j.
     JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h j =
     ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
       (Node
          (INR
            (INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR
                          (INR
                            (INR
                              (INR
                                (INR (INR (INR (INR (INL one))))))))))))))))
         [REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
            j])
JOINT_int_STRUCTstrexp_h_DEF
|- !j.
     JOINT_int_STRUCTstrexp_h j =
     ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
       (Node
          (INR
            (INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR
                          (INR
                            (INR
                              (INR
                                (INR
                                  (INR
                                    (INR (INR (INR (INL one)))))))))))))))))
         [REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
            j])
JOINT_int_LONGSTRIDstrexp_h_DEF
|- !l.
     JOINT_int_LONGSTRIDstrexp_h l =
     ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
       (Node
          (INR
            (INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR
                          (INR
                            (INR
                              (INR
                                (INR
                                  (INR
                                    (INR
                                      (INR (INR (INR (INL l))))))))))))))))))
         [])
JOINT_int_APPstrexp_h_DEF
|- !l' j.
     JOINT_int_APPstrexp_h l' j =
     ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
       (Node
          (INR
            (INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR
                          (INR
                            (INR
                              (INR
                                (INR
                                  (INR
                                    (INR
                                      (INR
                                        (INR
                                          (INR (INR (INL l')))))))))))))))))))
         [REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
            j])
JOINT_int_LETstrexp_h_DEF
|- !j1 j2.
     JOINT_int_LETstrexp_h j1 j2 =
     ABS_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
       (Node
          (INR
            (INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR
                          (INR
                            (INR
                              (INR
                                (INR
                                  (INR
                                    (INR
                                      (INR
                                        (INR
                                          (INR
                                            (INR (INR one)))))))))))))))))))
         [REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
            j1;
          REP_joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h
            j2])
joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select_DEF
|- (!f' s0 s1 j1 j2 j3.
     joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
       (JOINT_int_BINDfunbind_h f' s0 s1 j1 j2 j3) =
     (((joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
          j1 =
        4) /\
       (joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
          j2 =
        7) /\
       (joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
          j3 =
        2))
      => 1
      | 0)) /\
   (!f' l.
     joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
       (JOINT_int_REBINDfunbind_h f' l) =
     1) /\
   (joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
      JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_funbind_h =
    2) /\
   (!j.
     joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
       (JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h j) =
     ((joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
         j =
       1)
      => 2
      | 0)) /\
   (!d.
     joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
       (JOINT_int_DECmoddec_h d) =
     3) /\
   (!j.
     joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
       (JOINT_int_STRUCTUREmoddec_h j) =
     ((joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
         j =
       5)
      => 3
      | 0)) /\
   (!j1 j2.
     joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
       (JOINT_int_LOCALmoddec_h j1 j2) =
     (((joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
          j1 =
        3) /\
       (joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
          j2 =
        3))
      => 3
      | 0)) /\
   (!n.
     joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
       (JOINT_int_OPENmoddec_h n) =
     3) /\
   (joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
      JOINT_int_EMPTYmoddec_h =
    3) /\
   (!j1 j2.
     joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
       (JOINT_int_SEQmoddec_h j1 j2) =
     (((joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
          j1 =
        3) /\
       (joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
          j2 =
        3))
      => 3
      | 0)) /\
   (!j.
     joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
       (JOINT_int_FUNCTORmoddec_h j) =
     ((joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
         j =
       1)
      => 3
      | 0)) /\
   (joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
      JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_sigexp_h =
    4) /\
   (!s.
     joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
       (JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h s) =
     4) /\
   (!s j1 j2 j3.
     joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
       (JOINT_int_BINDstrbind_h s j1 j2 j3) =
     (((joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
          j1 =
        4) /\
       (joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
          j2 =
        7) /\
       (joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
          j3 =
        6))
      => 5
      | 0)) /\
   (joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
      JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_strbind_h =
    6) /\
   (!j.
     joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
       (JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h j) =
     ((joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
         j =
       5)
      => 6
      | 0)) /\
   (!j.
     joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
       (JOINT_int_STRUCTstrexp_h j) =
     ((joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
         j =
       3)
      => 7
      | 0)) /\
   (!l.
     joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
       (JOINT_int_LONGSTRIDstrexp_h l) =
     7) /\
   (!l' j.
     joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
       (JOINT_int_APPstrexp_h l' j) =
     ((joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
         j =
       7)
      => 7
      | 0)) /\
   (!j1 j2.
     joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
       (JOINT_int_LETstrexp_h j1 j2) =
     (((joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
          j1 =
        3) /\
       (joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
          j2 =
        7))
      => 7
      | 0))
strbind_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
           x =
         5)
       rep
strbind_h_REP_ABS
|- (!a. strbind_h_abs (strbind_h_rep a) = a) /\
   (!r.
     (\x.
       joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
         x =
       5)
       r =
     strbind_h_rep (strbind_h_abs r) =
     r)
strexp_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
           x =
         7)
       rep
strexp_h_REP_ABS
|- (!a. strexp_h_abs (strexp_h_rep a) = a) /\
   (!r.
     (\x.
       joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
         x =
       7)
       r =
     strexp_h_rep (strexp_h_abs r) =
     r)
strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
           x =
         6)
       rep
strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_REP_ABS
|- (!a.
     strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_abs
       (strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_rep a) =
     a) /\
   (!r.
     (\x.
       joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
         x =
       6)
       r =
     strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_rep
       (strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_abs r) =
     r)
sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
           x =
         4)
       rep
sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_REP_ABS
|- (!a.
     sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_abs
       (sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_rep a) =
     a) /\
   (!r.
     (\x.
       joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
         x =
       4)
       r =
     sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_rep
       (sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_abs r) =
     r)
moddec_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
           x =
         3)
       rep
moddec_h_REP_ABS
|- (!a. moddec_h_abs (moddec_h_rep a) = a) /\
   (!r.
     (\x.
       joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
         x =
       3)
       r =
     moddec_h_rep (moddec_h_abs r) =
     r)
funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
           x =
         2)
       rep
funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_REP_ABS
|- (!a.
     funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_abs
       (funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_rep a) =
     a) /\
   (!r.
     (\x.
       joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
         x =
       2)
       r =
     funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_rep
       (funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_abs r) =
     r)
funbind_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
           x =
         1)
       rep
funbind_h_REP_ABS
|- (!a. funbind_h_abs (funbind_h_rep a) = a) /\
   (!r.
     (\x.
       joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_select
         x =
       1)
       r =
     funbind_h_rep (funbind_h_abs r) =
     r)
int_BINDfunbind_h_DEF
|- !x1 x2 x3 x4 x5 x6.
     int_BINDfunbind_h x1 x2 x3 x4 x5 x6 =
     funbind_h_abs
       (JOINT_int_BINDfunbind_h x1 x2 x3
          (sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_rep x4)
          (strexp_h_rep x5)
         (funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_rep x6))
int_REBINDfunbind_h_DEF
|- !x1 x2.
     int_REBINDfunbind_h x1 x2 =
     funbind_h_abs (JOINT_int_REBINDfunbind_h x1 x2)
int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_funbind_h_DEF
|- int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_funbind_h =
   funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_abs
     JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_funbind_h
int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h_DEF
|- !x1.
     int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h x1 =
     funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_abs
       (JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h
         (funbind_h_rep x1))
int_DECmoddec_h_DEF
|- !x1. int_DECmoddec_h x1 = moddec_h_abs (JOINT_int_DECmoddec_h x1)
int_STRUCTUREmoddec_h_DEF
|- !x1.
     int_STRUCTUREmoddec_h x1 =
     moddec_h_abs (JOINT_int_STRUCTUREmoddec_h (strbind_h_rep x1))
int_LOCALmoddec_h_DEF
|- !x1 x2.
     int_LOCALmoddec_h x1 x2 =
     moddec_h_abs
       (JOINT_int_LOCALmoddec_h (moddec_h_rep x1) (moddec_h_rep x2))
int_OPENmoddec_h_DEF
|- !x1. int_OPENmoddec_h x1 = moddec_h_abs (JOINT_int_OPENmoddec_h x1)
int_EMPTYmoddec_h_DEF
|- int_EMPTYmoddec_h = moddec_h_abs JOINT_int_EMPTYmoddec_h
int_SEQmoddec_h_DEF
|- !x1 x2.
     int_SEQmoddec_h x1 x2 =
     moddec_h_abs (JOINT_int_SEQmoddec_h (moddec_h_rep x1) (moddec_h_rep x2))
int_FUNCTORmoddec_h_DEF
|- !x1.
     int_FUNCTORmoddec_h x1 =
     moddec_h_abs (JOINT_int_FUNCTORmoddec_h (funbind_h_rep x1))
int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_sigexp_h_DEF
|- int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_sigexp_h =
   sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_abs
     JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_sigexp_h
int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h_DEF
|- !x1.
     int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h x1 =
     sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_abs
       (JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h x1)
int_BINDstrbind_h_DEF
|- !x1 x2 x3 x4.
     int_BINDstrbind_h x1 x2 x3 x4 =
     strbind_h_abs
       (JOINT_int_BINDstrbind_h x1
          (sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_rep x2)
          (strexp_h_rep x3)
         (strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_rep x4))
int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_strbind_h_DEF
|- int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_strbind_h =
   strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_abs
     JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_strbind_h
int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h_DEF
|- !x1.
     int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h x1 =
     strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_abs
       (JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h
         (strbind_h_rep x1))
int_STRUCTstrexp_h_DEF
|- !x1.
     int_STRUCTstrexp_h x1 =
     strexp_h_abs (JOINT_int_STRUCTstrexp_h (moddec_h_rep x1))
int_LONGSTRIDstrexp_h_DEF
|- !x1.
     int_LONGSTRIDstrexp_h x1 = strexp_h_abs (JOINT_int_LONGSTRIDstrexp_h x1)
int_APPstrexp_h_DEF
|- !x1 x2.
     int_APPstrexp_h x1 x2 =
     strexp_h_abs (JOINT_int_APPstrexp_h x1 (strexp_h_rep x2))
int_LETstrexp_h_DEF
|- !x1 x2.
     int_LETstrexp_h x1 x2 =
     strexp_h_abs (JOINT_int_LETstrexp_h (moddec_h_rep x1) (strexp_h_rep x2))
int_inj_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h
|- (int_inj_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h NONE =
    int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_funbind_h) /\
   (!x0.
     int_inj_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h
       (SOME x0) =
     int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h x0)
int_inv_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h
|- (int_inv_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h
      int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_funbind_h =
    NONE) /\
   (!x1.
     int_inv_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h
       (int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h x1) =
     SOME x1)
DECmoddec_h
|- DECmoddec_h = (\x0. int_DECmoddec_h x0)
STRUCTUREmoddec_h
|- STRUCTUREmoddec_h = (\x0. int_STRUCTUREmoddec_h x0)
LOCALmoddec_h
|- LOCALmoddec_h = (\x0 x1. int_LOCALmoddec_h x0 x1)
OPENmoddec_h
|- OPENmoddec_h = (\x0. int_OPENmoddec_h x0)
EMPTYmoddec_h
|- EMPTYmoddec_h = int_EMPTYmoddec_h
SEQmoddec_h
|- SEQmoddec_h = (\x0 x1. int_SEQmoddec_h x0 x1)
FUNCTORmoddec_h
|- FUNCTORmoddec_h = (\x0. int_FUNCTORmoddec_h x0)
int_inj_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h
|- (int_inj_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h NONE =
    int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_sigexp_h) /\
   (!x0.
     int_inj_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h (SOME x0) =
     int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h x0)
int_inv_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h
|- (int_inv_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h
      int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_sigexp_h =
    NONE) /\
   (!x1.
     int_inv_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h
       (int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h x1) =
     SOME x1)
BINDfunbind_h
|- BINDfunbind_h =
   (\x0 x1 x2 x3 x4 x5.
     int_BINDfunbind_h x0 x1 x2
       (int_inj_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h x3)
       x4
       (int_inj_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h x5))
REBINDfunbind_h
|- REBINDfunbind_h = (\x0 x1. int_REBINDfunbind_h x0 x1)
int_inj_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h
|- (int_inj_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h NONE =
    int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_strbind_h) /\
   (!x0.
     int_inj_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h
       (SOME x0) =
     int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h x0)
int_inv_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h
|- (int_inv_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h
      int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_strbind_h =
    NONE) /\
   (!x1.
     int_inv_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h
       (int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h x1) =
     SOME x1)
BINDstrbind_h
|- BINDstrbind_h =
   (\x0 x1 x2 x3.
     int_BINDstrbind_h x0
       (int_inj_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h x1)
       x2
       (int_inj_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h x3))
STRUCTstrexp_h
|- STRUCTstrexp_h = (\x0. int_STRUCTstrexp_h x0)
LONGSTRIDstrexp_h
|- LONGSTRIDstrexp_h = (\x0. int_LONGSTRIDstrexp_h x0)
APPstrexp_h
|- APPstrexp_h = (\x0 x1. int_APPstrexp_h x0 x1)
LETstrexp_h
|- LETstrexp_h = (\x0 x1. int_LETstrexp_h x0 x1)
dist_aux_ftn_funbind_h_DEF
|- (!x1 x2 x3 x4 x5 x6.
     dist_aux_ftn_funbind_h (int_BINDfunbind_h x1 x2 x3 x4 x5 x6) = 0) /\
   (!x1 x2. dist_aux_ftn_funbind_h (int_REBINDfunbind_h x1 x2) = 1) /\
   (dist_aux_ftn_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h
      int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_funbind_h =
    2) /\
   (!x1.
     dist_aux_ftn_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h
       (int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h x1) =
     3) /\
   (!x1. dist_aux_ftn_moddec_h (int_DECmoddec_h x1) = 4) /\
   (!x1. dist_aux_ftn_moddec_h (int_STRUCTUREmoddec_h x1) = 5) /\
   (!x1 x2. dist_aux_ftn_moddec_h (int_LOCALmoddec_h x1 x2) = 6) /\
   (!x1. dist_aux_ftn_moddec_h (int_OPENmoddec_h x1) = 7) /\
   (dist_aux_ftn_moddec_h int_EMPTYmoddec_h = 8) /\
   (!x1 x2. dist_aux_ftn_moddec_h (int_SEQmoddec_h x1 x2) = 9) /\
   (!x1. dist_aux_ftn_moddec_h (int_FUNCTORmoddec_h x1) = 10) /\
   (dist_aux_ftn_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h
      int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_sigexp_h =
    11) /\
   (!x1.
     dist_aux_ftn_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h
       (int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h x1) =
     12) /\
   (!x1 x2 x3 x4.
     dist_aux_ftn_strbind_h (int_BINDstrbind_h x1 x2 x3 x4) = 13) /\
   (dist_aux_ftn_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h
      int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_strbind_h =
    14) /\
   (!x1.
     dist_aux_ftn_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h
       (int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h x1) =
     15) /\
   (!x1. dist_aux_ftn_strexp_h (int_STRUCTstrexp_h x1) = 16) /\
   (!x1. dist_aux_ftn_strexp_h (int_LONGSTRIDstrexp_h x1) = 17) /\
   (!x1 x2. dist_aux_ftn_strexp_h (int_APPstrexp_h x1 x2) = 18) /\
   (!x1 x2. dist_aux_ftn_strexp_h (int_LETstrexp_h x1 x2) = 19)
int_BINDfunbind_h_arg1_DEF
|- (!x1 x2 x3 x4 x5 x6.
     int_BINDfunbind_h_arg1 (int_BINDfunbind_h x1 x2 x3 x4 x5 x6) = x1) /\
   (!x1 x2. int_BINDfunbind_h_arg1 (int_REBINDfunbind_h x1 x2) = (@x. T))
int_BINDfunbind_h_arg2_DEF
|- (!x1 x2 x3 x4 x5 x6.
     int_BINDfunbind_h_arg2 (int_BINDfunbind_h x1 x2 x3 x4 x5 x6) = x2) /\
   (!x1 x2. int_BINDfunbind_h_arg2 (int_REBINDfunbind_h x1 x2) = (@x. T))
int_BINDfunbind_h_arg3_DEF
|- (!x1 x2 x3 x4 x5 x6.
     int_BINDfunbind_h_arg3 (int_BINDfunbind_h x1 x2 x3 x4 x5 x6) = x3) /\
   (!x1 x2. int_BINDfunbind_h_arg3 (int_REBINDfunbind_h x1 x2) = (@x. T))
int_BINDfunbind_h_arg4_DEF
|- (!x1 x2 x3 x4 x5 x6.
     int_BINDfunbind_h_arg4 (int_BINDfunbind_h x1 x2 x3 x4 x5 x6) = x4) /\
   (!x1 x2. int_BINDfunbind_h_arg4 (int_REBINDfunbind_h x1 x2) = (@x. T))
int_BINDfunbind_h_arg5_DEF
|- (!x1 x2 x3 x4 x5 x6.
     int_BINDfunbind_h_arg5 (int_BINDfunbind_h x1 x2 x3 x4 x5 x6) = x5) /\
   (!x1 x2. int_BINDfunbind_h_arg5 (int_REBINDfunbind_h x1 x2) = (@x. T))
int_BINDfunbind_h_arg6_DEF
|- (!x1 x2 x3 x4 x5 x6.
     int_BINDfunbind_h_arg6 (int_BINDfunbind_h x1 x2 x3 x4 x5 x6) = x6) /\
   (!x1 x2. int_BINDfunbind_h_arg6 (int_REBINDfunbind_h x1 x2) = (@x. T))
int_REBINDfunbind_h_arg1_DEF
|- (!x1 x2. int_REBINDfunbind_h_arg1 (int_REBINDfunbind_h x1 x2) = x1) /\
   (!x1 x2 x3 x4 x5 x6.
     int_REBINDfunbind_h_arg1 (int_BINDfunbind_h x1 x2 x3 x4 x5 x6) = (@x. T))
int_REBINDfunbind_h_arg2_DEF
|- (!x1 x2. int_REBINDfunbind_h_arg2 (int_REBINDfunbind_h x1 x2) = x2) /\
   (!x1 x2 x3 x4 x5 x6.
     int_REBINDfunbind_h_arg2 (int_BINDfunbind_h x1 x2 x3 x4 x5 x6) = (@x. T))
int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h_arg_DEF
|- (!x1.
     int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h_arg
       (int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h x1) =
     x1) /\
   (int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h_arg
      int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_funbind_h =
    (@x. T))
int_DECmoddec_h_arg_DEF
|- (!x1. int_DECmoddec_h_arg (int_DECmoddec_h x1) = x1) /\
   (!x1. int_DECmoddec_h_arg (int_STRUCTUREmoddec_h x1) = (@x. T)) /\
   (!x1 x2. int_DECmoddec_h_arg (int_LOCALmoddec_h x1 x2) = (@x. T)) /\
   (!x1. int_DECmoddec_h_arg (int_OPENmoddec_h x1) = (@x. T)) /\
   (int_DECmoddec_h_arg int_EMPTYmoddec_h = (@x. T)) /\
   (!x1 x2. int_DECmoddec_h_arg (int_SEQmoddec_h x1 x2) = (@x. T)) /\
   (!x1. int_DECmoddec_h_arg (int_FUNCTORmoddec_h x1) = (@x. T))
int_STRUCTUREmoddec_h_arg_DEF
|- (!x1. int_STRUCTUREmoddec_h_arg (int_STRUCTUREmoddec_h x1) = x1) /\
   (!x1. int_STRUCTUREmoddec_h_arg (int_DECmoddec_h x1) = (@x. T)) /\
   (!x1 x2. int_STRUCTUREmoddec_h_arg (int_LOCALmoddec_h x1 x2) = (@x. T)) /\
   (!x1. int_STRUCTUREmoddec_h_arg (int_OPENmoddec_h x1) = (@x. T)) /\
   (int_STRUCTUREmoddec_h_arg int_EMPTYmoddec_h = (@x. T)) /\
   (!x1 x2. int_STRUCTUREmoddec_h_arg (int_SEQmoddec_h x1 x2) = (@x. T)) /\
   (!x1. int_STRUCTUREmoddec_h_arg (int_FUNCTORmoddec_h x1) = (@x. T))
int_LOCALmoddec_h_arg1_DEF
|- (!x1 x2. int_LOCALmoddec_h_arg1 (int_LOCALmoddec_h x1 x2) = x1) /\
   (!x1. int_LOCALmoddec_h_arg1 (int_DECmoddec_h x1) = (@x. T)) /\
   (!x1. int_LOCALmoddec_h_arg1 (int_STRUCTUREmoddec_h x1) = (@x. T)) /\
   (!x1. int_LOCALmoddec_h_arg1 (int_OPENmoddec_h x1) = (@x. T)) /\
   (int_LOCALmoddec_h_arg1 int_EMPTYmoddec_h = (@x. T)) /\
   (!x1 x2. int_LOCALmoddec_h_arg1 (int_SEQmoddec_h x1 x2) = (@x. T)) /\
   (!x1. int_LOCALmoddec_h_arg1 (int_FUNCTORmoddec_h x1) = (@x. T))
int_LOCALmoddec_h_arg2_DEF
|- (!x1 x2. int_LOCALmoddec_h_arg2 (int_LOCALmoddec_h x1 x2) = x2) /\
   (!x1. int_LOCALmoddec_h_arg2 (int_DECmoddec_h x1) = (@x. T)) /\
   (!x1. int_LOCALmoddec_h_arg2 (int_STRUCTUREmoddec_h x1) = (@x. T)) /\
   (!x1. int_LOCALmoddec_h_arg2 (int_OPENmoddec_h x1) = (@x. T)) /\
   (int_LOCALmoddec_h_arg2 int_EMPTYmoddec_h = (@x. T)) /\
   (!x1 x2. int_LOCALmoddec_h_arg2 (int_SEQmoddec_h x1 x2) = (@x. T)) /\
   (!x1. int_LOCALmoddec_h_arg2 (int_FUNCTORmoddec_h x1) = (@x. T))
int_OPENmoddec_h_arg_DEF
|- (!x1. int_OPENmoddec_h_arg (int_OPENmoddec_h x1) = x1) /\
   (!x1. int_OPENmoddec_h_arg (int_DECmoddec_h x1) = (@x. T)) /\
   (!x1. int_OPENmoddec_h_arg (int_STRUCTUREmoddec_h x1) = (@x. T)) /\
   (!x1 x2. int_OPENmoddec_h_arg (int_LOCALmoddec_h x1 x2) = (@x. T)) /\
   (int_OPENmoddec_h_arg int_EMPTYmoddec_h = (@x. T)) /\
   (!x1 x2. int_OPENmoddec_h_arg (int_SEQmoddec_h x1 x2) = (@x. T)) /\
   (!x1. int_OPENmoddec_h_arg (int_FUNCTORmoddec_h x1) = (@x. T))
int_SEQmoddec_h_arg1_DEF
|- (!x1 x2. int_SEQmoddec_h_arg1 (int_SEQmoddec_h x1 x2) = x1) /\
   (!x1. int_SEQmoddec_h_arg1 (int_DECmoddec_h x1) = (@x. T)) /\
   (!x1. int_SEQmoddec_h_arg1 (int_STRUCTUREmoddec_h x1) = (@x. T)) /\
   (!x1 x2. int_SEQmoddec_h_arg1 (int_LOCALmoddec_h x1 x2) = (@x. T)) /\
   (!x1. int_SEQmoddec_h_arg1 (int_OPENmoddec_h x1) = (@x. T)) /\
   (int_SEQmoddec_h_arg1 int_EMPTYmoddec_h = (@x. T)) /\
   (!x1. int_SEQmoddec_h_arg1 (int_FUNCTORmoddec_h x1) = (@x. T))
int_SEQmoddec_h_arg2_DEF
|- (!x1 x2. int_SEQmoddec_h_arg2 (int_SEQmoddec_h x1 x2) = x2) /\
   (!x1. int_SEQmoddec_h_arg2 (int_DECmoddec_h x1) = (@x. T)) /\
   (!x1. int_SEQmoddec_h_arg2 (int_STRUCTUREmoddec_h x1) = (@x. T)) /\
   (!x1 x2. int_SEQmoddec_h_arg2 (int_LOCALmoddec_h x1 x2) = (@x. T)) /\
   (!x1. int_SEQmoddec_h_arg2 (int_OPENmoddec_h x1) = (@x. T)) /\
   (int_SEQmoddec_h_arg2 int_EMPTYmoddec_h = (@x. T)) /\
   (!x1. int_SEQmoddec_h_arg2 (int_FUNCTORmoddec_h x1) = (@x. T))
int_FUNCTORmoddec_h_arg_DEF
|- (!x1. int_FUNCTORmoddec_h_arg (int_FUNCTORmoddec_h x1) = x1) /\
   (!x1. int_FUNCTORmoddec_h_arg (int_DECmoddec_h x1) = (@x. T)) /\
   (!x1. int_FUNCTORmoddec_h_arg (int_STRUCTUREmoddec_h x1) = (@x. T)) /\
   (!x1 x2. int_FUNCTORmoddec_h_arg (int_LOCALmoddec_h x1 x2) = (@x. T)) /\
   (!x1. int_FUNCTORmoddec_h_arg (int_OPENmoddec_h x1) = (@x. T)) /\
   (int_FUNCTORmoddec_h_arg int_EMPTYmoddec_h = (@x. T)) /\
   (!x1 x2. int_FUNCTORmoddec_h_arg (int_SEQmoddec_h x1 x2) = (@x. T))
int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h_arg_DEF
|- (!x1.
     int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h_arg
       (int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h x1) =
     x1) /\
   (int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h_arg
      int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_sigexp_h =
    (@x. T))
int_BINDstrbind_h_arg1_DEF
|- !x1 x2 x3 x4. int_BINDstrbind_h_arg1 (int_BINDstrbind_h x1 x2 x3 x4) = x1
int_BINDstrbind_h_arg2_DEF
|- !x1 x2 x3 x4. int_BINDstrbind_h_arg2 (int_BINDstrbind_h x1 x2 x3 x4) = x2
int_BINDstrbind_h_arg3_DEF
|- !x1 x2 x3 x4. int_BINDstrbind_h_arg3 (int_BINDstrbind_h x1 x2 x3 x4) = x3
int_BINDstrbind_h_arg4_DEF
|- !x1 x2 x3 x4. int_BINDstrbind_h_arg4 (int_BINDstrbind_h x1 x2 x3 x4) = x4
int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h_arg_DEF
|- (!x1.
     int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h_arg
       (int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h x1) =
     x1) /\
   (int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h_arg
      int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_strbind_h =
    (@x. T))
int_STRUCTstrexp_h_arg_DEF
|- (!x1. int_STRUCTstrexp_h_arg (int_STRUCTstrexp_h x1) = x1) /\
   (!x1. int_STRUCTstrexp_h_arg (int_LONGSTRIDstrexp_h x1) = (@x. T)) /\
   (!x1 x2. int_STRUCTstrexp_h_arg (int_APPstrexp_h x1 x2) = (@x. T)) /\
   (!x1 x2. int_STRUCTstrexp_h_arg (int_LETstrexp_h x1 x2) = (@x. T))
int_LONGSTRIDstrexp_h_arg_DEF
|- (!x1. int_LONGSTRIDstrexp_h_arg (int_LONGSTRIDstrexp_h x1) = x1) /\
   (!x1. int_LONGSTRIDstrexp_h_arg (int_STRUCTstrexp_h x1) = (@x. T)) /\
   (!x1 x2. int_LONGSTRIDstrexp_h_arg (int_APPstrexp_h x1 x2) = (@x. T)) /\
   (!x1 x2. int_LONGSTRIDstrexp_h_arg (int_LETstrexp_h x1 x2) = (@x. T))
int_APPstrexp_h_arg1_DEF
|- (!x1 x2. int_APPstrexp_h_arg1 (int_APPstrexp_h x1 x2) = x1) /\
   (!x1. int_APPstrexp_h_arg1 (int_STRUCTstrexp_h x1) = (@x. T)) /\
   (!x1. int_APPstrexp_h_arg1 (int_LONGSTRIDstrexp_h x1) = (@x. T)) /\
   (!x1 x2. int_APPstrexp_h_arg1 (int_LETstrexp_h x1 x2) = (@x. T))
int_APPstrexp_h_arg2_DEF
|- (!x1 x2. int_APPstrexp_h_arg2 (int_APPstrexp_h x1 x2) = x2) /\
   (!x1. int_APPstrexp_h_arg2 (int_STRUCTstrexp_h x1) = (@x. T)) /\
   (!x1. int_APPstrexp_h_arg2 (int_LONGSTRIDstrexp_h x1) = (@x. T)) /\
   (!x1 x2. int_APPstrexp_h_arg2 (int_LETstrexp_h x1 x2) = (@x. T))
int_LETstrexp_h_arg1_DEF
|- (!x1 x2. int_LETstrexp_h_arg1 (int_LETstrexp_h x1 x2) = x1) /\
   (!x1. int_LETstrexp_h_arg1 (int_STRUCTstrexp_h x1) = (@x. T)) /\
   (!x1. int_LETstrexp_h_arg1 (int_LONGSTRIDstrexp_h x1) = (@x. T)) /\
   (!x1 x2. int_LETstrexp_h_arg1 (int_APPstrexp_h x1 x2) = (@x. T))
int_LETstrexp_h_arg2_DEF
|- (!x1 x2. int_LETstrexp_h_arg2 (int_LETstrexp_h x1 x2) = x2) /\
   (!x1. int_LETstrexp_h_arg2 (int_STRUCTstrexp_h x1) = (@x. T)) /\
   (!x1. int_LETstrexp_h_arg2 (int_LONGSTRIDstrexp_h x1) = (@x. T)) /\
   (!x1 x2. int_LETstrexp_h_arg2 (int_APPstrexp_h x1 x2) = (@x. T))
topdec_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (TRP
         (\v tl.
           (?m. v = INL m) /\ (LENGTH tl = 0) \/
           (?s. v = INR s) /\ (LENGTH tl = 0)))
       rep
topdec_h_ISO_DEF
|- (!a. ABS_topdec_h (REP_topdec_h a) = a) /\
   (!r.
     TRP
       (\v tl.
         (?m. v = INL m) /\ (LENGTH tl = 0) \/
         (?s. v = INR s) /\ (LENGTH tl = 0))
       r =
     REP_topdec_h (ABS_topdec_h r) =
     r)
MODDEC_H_DEF
|- !m. MODDEC_H m = ABS_topdec_h (Node (INL m) [])
SIGDEC_H_DEF
|- !s. SIGDEC_H s = ABS_topdec_h (Node (INR s) [])
joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (TRP
         (\v tl.
           (?f. v = INL f) /\ (LENGTH tl = SUC 0) \/
           (v = INR (INL one)) /\ (LENGTH tl = 0) \/
           (v = INR (INR (INL one))) /\ (LENGTH tl = SUC (SUC 0)) \/
           (v = INR (INR (INR (INL one)))) /\ (LENGTH tl = SUC 0) \/
           (v = INR (INR (INR (INR (INL one))))) /\ (LENGTH tl = SUC 0) \/
           (?s0 s1. v = INR (INR (INR (INR (INR (INL (s0,s1))))))) /\
           (LENGTH tl = SUC (SUC 0)) \/
           (?s. v = INR (INR (INR (INR (INR (INR (INL s))))))) /\
           (LENGTH tl = SUC 0) \/
           (v = INR (INR (INR (INR (INR (INR (INR (INL one)))))))) /\
           (LENGTH tl = 0) \/
           (v = INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))) /\
           (LENGTH tl = SUC (SUC 0)) \/
           (v =
            INR (INR (INR (INR (INR (INR (INR (INR (INR (INL one)))))))))) /\
           (LENGTH tl = SUC 0) \/
           (v =
            INR (INR (INR (INR (INR (INR (INR (INR (INR (INR one)))))))))) /\
           (LENGTH tl = SUC 0)))
       rep
joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_ISO_DEF
|- (!a.
     ABS_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
       (REP_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
         a) =
     a) /\
   (!r.
     TRP
       (\v tl.
         (?f. v = INL f) /\ (LENGTH tl = SUC 0) \/
         (v = INR (INL one)) /\ (LENGTH tl = 0) \/
         (v = INR (INR (INL one))) /\ (LENGTH tl = SUC (SUC 0)) \/
         (v = INR (INR (INR (INL one)))) /\ (LENGTH tl = SUC 0) \/
         (v = INR (INR (INR (INR (INL one))))) /\ (LENGTH tl = SUC 0) \/
         (?s0 s1. v = INR (INR (INR (INR (INR (INL (s0,s1))))))) /\
         (LENGTH tl = SUC (SUC 0)) \/
         (?s. v = INR (INR (INR (INR (INR (INR (INL s))))))) /\
         (LENGTH tl = SUC 0) \/
         (v = INR (INR (INR (INR (INR (INR (INR (INL one)))))))) /\
         (LENGTH tl = 0) \/
         (v = INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))) /\
         (LENGTH tl = SUC (SUC 0)) \/
         (v =
          INR (INR (INR (INR (INR (INR (INR (INR (INR (INL one)))))))))) /\
         (LENGTH tl = SUC 0) \/
         (v =
          INR (INR (INR (INR (INR (INR (INR (INR (INR (INR one)))))))))) /\
         (LENGTH tl = SUC 0))
       r =
     REP_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
       (ABS_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
         r) =
     r)
JOINT_int_funintenv_h_int_h_strintenv_h_ch44_funid_int_h_DEF
|- !f' j.
     JOINT_int_funintenv_h_int_h_strintenv_h_ch44_funid_int_h f' j =
     ABS_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
       (Node (INL f')
         [REP_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
            j])
JOINT_int_funintenv_h_int_h_strintenv_h_NIL_funid_int_h_prod_funintenv_h_int_h_strintenv_h_DEF
|- JOINT_int_funintenv_h_int_h_strintenv_h_NIL_funid_int_h_prod_funintenv_h_int_h_strintenv_h =
   ABS_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
     (Node (INR (INL one)) [])
JOINT_int_funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h_DEF
|- !j1 j2.
     JOINT_int_funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h
       j1
       j2 =
     ABS_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
       (Node (INR (INR (INL one)))
         [REP_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
            j1;
          REP_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
            j2])
JOINT_int_funintenv_h_int_h_strintenv_h_FINMAP_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_DEF
|- !j.
     JOINT_int_funintenv_h_int_h_strintenv_h_FINMAP_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
       j =
     ABS_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
       (Node (INR (INR (INR (INL one))))
         [REP_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
            j])
JOINT_int_FUNINTENV_H_DEF
|- !j.
     JOINT_int_FUNINTENV_H j =
     ABS_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
       (Node (INR (INR (INR (INR (INL one)))))
         [REP_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
            j])
JOINT_int_INT_H_DEF
|- !j1 j2 s0 s1.
     JOINT_int_INT_H j1 j2 s0 s1 =
     ABS_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
       (Node (INR (INR (INR (INR (INR (INL (s0,s1)))))))
         [REP_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
            j1;
          REP_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
            j2])
JOINT_int_funintenv_h_int_h_strintenv_h_ch44_strid_int_h_DEF
|- !s j.
     JOINT_int_funintenv_h_int_h_strintenv_h_ch44_strid_int_h s j =
     ABS_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
       (Node (INR (INR (INR (INR (INR (INR (INL s)))))))
         [REP_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
            j])
JOINT_int_funintenv_h_int_h_strintenv_h_NIL_strid_int_h_prod_funintenv_h_int_h_strintenv_h_DEF
|- JOINT_int_funintenv_h_int_h_strintenv_h_NIL_strid_int_h_prod_funintenv_h_int_h_strintenv_h =
   ABS_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
     (Node (INR (INR (INR (INR (INR (INR (INR (INL one)))))))) [])
JOINT_int_funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h_DEF
|- !j1 j2.
     JOINT_int_funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h
       j1
       j2 =
     ABS_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
       (Node (INR (INR (INR (INR (INR (INR (INR (INR (INL one)))))))))
         [REP_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
            j1;
          REP_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
            j2])
JOINT_int_funintenv_h_int_h_strintenv_h_FINMAP_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_DEF
|- !j.
     JOINT_int_funintenv_h_int_h_strintenv_h_FINMAP_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
       j =
     ABS_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
       (Node (INR (INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))))
         [REP_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
            j])
JOINT_int_STRINTENV_H_DEF
|- !j.
     JOINT_int_STRINTENV_H j =
     ABS_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
       (Node (INR (INR (INR (INR (INR (INR (INR (INR (INR (INR one))))))))))
         [REP_joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h
            j])
joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select_DEF
|- (!f' j.
     joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
       (JOINT_int_funintenv_h_int_h_strintenv_h_ch44_funid_int_h f' j) =
     ((joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
         j =
       5)
      => 1
      | 0)) /\
   (joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
      JOINT_int_funintenv_h_int_h_strintenv_h_NIL_funid_int_h_prod_funintenv_h_int_h_strintenv_h =
    2) /\
   (!j1 j2.
     joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
       (JOINT_int_funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h
          j1
         j2) =
     (((joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
          j1 =
        1) /\
       (joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
          j2 =
        2))
      => 2
      | 0)) /\
   (!j.
     joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
       (JOINT_int_funintenv_h_int_h_strintenv_h_FINMAP_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
         j) =
     ((joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
         j =
       2)
      => 3
      | 0)) /\
   (!j.
     joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
       (JOINT_int_FUNINTENV_H j) =
     ((joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
         j =
       3)
      => 4
      | 0)) /\
   (!j1 j2 s0 s1.
     joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
       (JOINT_int_INT_H j1 j2 s0 s1) =
     (((joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
          j1 =
        4) /\
       (joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
          j2 =
        9))
      => 5
      | 0)) /\
   (!s j.
     joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
       (JOINT_int_funintenv_h_int_h_strintenv_h_ch44_strid_int_h s j) =
     ((joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
         j =
       5)
      => 6
      | 0)) /\
   (joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
      JOINT_int_funintenv_h_int_h_strintenv_h_NIL_strid_int_h_prod_funintenv_h_int_h_strintenv_h =
    7) /\
   (!j1 j2.
     joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
       (JOINT_int_funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h
          j1
         j2) =
     (((joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
          j1 =
        6) /\
       (joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
          j2 =
        7))
      => 7
      | 0)) /\
   (!j.
     joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
       (JOINT_int_funintenv_h_int_h_strintenv_h_FINMAP_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
         j) =
     ((joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
         j =
       7)
      => 8
      | 0)) /\
   (!j.
     joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
       (JOINT_int_STRINTENV_H j) =
     ((joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
         j =
       8)
      => 9
      | 0))
strid_int_h_prod_funintenv_h_int_h_strintenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
           x =
         6)
       rep
strid_int_h_prod_funintenv_h_int_h_strintenv_h_REP_ABS
|- (!a.
     strid_int_h_prod_funintenv_h_int_h_strintenv_h_abs
       (strid_int_h_prod_funintenv_h_int_h_strintenv_h_rep a) =
     a) /\
   (!r.
     (\x.
       joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
         x =
       6)
       r =
     strid_int_h_prod_funintenv_h_int_h_strintenv_h_rep
       (strid_int_h_prod_funintenv_h_int_h_strintenv_h_abs r) =
     r)
funid_int_h_prod_funintenv_h_int_h_strintenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
           x =
         1)
       rep
funid_int_h_prod_funintenv_h_int_h_strintenv_h_REP_ABS
|- (!a.
     funid_int_h_prod_funintenv_h_int_h_strintenv_h_abs
       (funid_int_h_prod_funintenv_h_int_h_strintenv_h_rep a) =
     a) /\
   (!r.
     (\x.
       joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
         x =
       1)
       r =
     funid_int_h_prod_funintenv_h_int_h_strintenv_h_rep
       (funid_int_h_prod_funintenv_h_int_h_strintenv_h_abs r) =
     r)
int_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
           x =
         5)
       rep
int_h_REP_ABS
|- (!a. int_h_abs (int_h_rep a) = a) /\
   (!r.
     (\x.
       joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
         x =
       5)
       r =
     int_h_rep (int_h_abs r) =
     r)
strintenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
           x =
         9)
       rep
strintenv_h_REP_ABS
|- (!a. strintenv_h_abs (strintenv_h_rep a) = a) /\
   (!r.
     (\x.
       joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
         x =
       9)
       r =
     strintenv_h_rep (strintenv_h_abs r) =
     r)
strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
           x =
         8)
       rep
strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_REP_ABS
|- (!a.
     strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_abs
       (strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_rep
         a) =
     a) /\
   (!r.
     (\x.
       joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
         x =
       8)
       r =
     strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_rep
       (strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_abs
         r) =
     r)
strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
           x =
         7)
       rep
strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_REP_ABS
|- (!a.
     strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_abs
       (strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_rep
         a) =
     a) /\
   (!r.
     (\x.
       joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
         x =
       7)
       r =
     strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_rep
       (strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_abs
         r) =
     r)
funintenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
           x =
         4)
       rep
funintenv_h_REP_ABS
|- (!a. funintenv_h_abs (funintenv_h_rep a) = a) /\
   (!r.
     (\x.
       joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
         x =
       4)
       r =
     funintenv_h_rep (funintenv_h_abs r) =
     r)
funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
           x =
         3)
       rep
funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_REP_ABS
|- (!a.
     funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_abs
       (funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_rep
         a) =
     a) /\
   (!r.
     (\x.
       joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
         x =
       3)
       r =
     funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_rep
       (funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_abs
         r) =
     r)
funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
           x =
         2)
       rep
funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_REP_ABS
|- (!a.
     funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_abs
       (funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_rep
         a) =
     a) /\
   (!r.
     (\x.
       joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_select
         x =
       2)
       r =
     funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_rep
       (funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_abs
         r) =
     r)
int_funintenv_h_int_h_strintenv_h_ch44_funid_int_h_DEF
|- !x1 x2.
     int_funintenv_h_int_h_strintenv_h_ch44_funid_int_h x1 x2 =
     funid_int_h_prod_funintenv_h_int_h_strintenv_h_abs
       (JOINT_int_funintenv_h_int_h_strintenv_h_ch44_funid_int_h x1
         (int_h_rep x2))
int_funintenv_h_int_h_strintenv_h_NIL_funid_int_h_prod_funintenv_h_int_h_strintenv_h_DEF
|- int_funintenv_h_int_h_strintenv_h_NIL_funid_int_h_prod_funintenv_h_int_h_strintenv_h =
   funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_abs
     JOINT_int_funintenv_h_int_h_strintenv_h_NIL_funid_int_h_prod_funintenv_h_int_h_strintenv_h
int_funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h_DEF
|- !x1 x2.
     int_funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h
       x1
       x2 =
     funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_abs
       (JOINT_int_funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h
          (funid_int_h_prod_funintenv_h_int_h_strintenv_h_rep x1)
         (funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_rep
           x2))
int_funintenv_h_int_h_strintenv_h_FINMAP_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_DEF
|- !x1.
     int_funintenv_h_int_h_strintenv_h_FINMAP_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
       x1 =
     funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_abs
       (JOINT_int_funintenv_h_int_h_strintenv_h_FINMAP_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
         (funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_rep
           x1))
int_FUNINTENV_H_DEF
|- !x1.
     int_FUNINTENV_H x1 =
     funintenv_h_abs
       (JOINT_int_FUNINTENV_H
         (funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_rep
           x1))
int_INT_H_DEF
|- !x1 x2 x3 x4.
     int_INT_H x1 x2 x3 x4 =
     int_h_abs
       (JOINT_int_INT_H (funintenv_h_rep x1) (strintenv_h_rep x2) x3 x4)
int_funintenv_h_int_h_strintenv_h_ch44_strid_int_h_DEF
|- !x1 x2.
     int_funintenv_h_int_h_strintenv_h_ch44_strid_int_h x1 x2 =
     strid_int_h_prod_funintenv_h_int_h_strintenv_h_abs
       (JOINT_int_funintenv_h_int_h_strintenv_h_ch44_strid_int_h x1
         (int_h_rep x2))
int_funintenv_h_int_h_strintenv_h_NIL_strid_int_h_prod_funintenv_h_int_h_strintenv_h_DEF
|- int_funintenv_h_int_h_strintenv_h_NIL_strid_int_h_prod_funintenv_h_int_h_strintenv_h =
   strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_abs
     JOINT_int_funintenv_h_int_h_strintenv_h_NIL_strid_int_h_prod_funintenv_h_int_h_strintenv_h
int_funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h_DEF
|- !x1 x2.
     int_funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h
       x1
       x2 =
     strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_abs
       (JOINT_int_funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h
          (strid_int_h_prod_funintenv_h_int_h_strintenv_h_rep x1)
         (strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_rep
           x2))
int_funintenv_h_int_h_strintenv_h_FINMAP_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_DEF
|- !x1.
     int_funintenv_h_int_h_strintenv_h_FINMAP_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
       x1 =
     strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_abs
       (JOINT_int_funintenv_h_int_h_strintenv_h_FINMAP_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
         (strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_rep
           x1))
int_STRINTENV_H_DEF
|- !x1.
     int_STRINTENV_H x1 =
     strintenv_h_abs
       (JOINT_int_STRINTENV_H
         (strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_rep
           x1))
int_inj_funid_int_h_prod_funintenv_h_int_h_strintenv_h
|- !x1 x0.
     int_inj_funid_int_h_prod_funintenv_h_int_h_strintenv_h (x0,x1) =
     int_funintenv_h_int_h_strintenv_h_ch44_funid_int_h x0 x1
int_inv_funid_int_h_prod_funintenv_h_int_h_strintenv_h
|- !x1 x2.
     int_inv_funid_int_h_prod_funintenv_h_int_h_strintenv_h
       (int_funintenv_h_int_h_strintenv_h_ch44_funid_int_h x1 x2) =
     (x1,x2)
int_inj_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
|- (int_inj_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
      [] =
    int_funintenv_h_int_h_strintenv_h_NIL_funid_int_h_prod_funintenv_h_int_h_strintenv_h) /\
   (!x1 x0.
     int_inj_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
       (CONS x0 x1) =
     int_funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h
       (int_inj_funid_int_h_prod_funintenv_h_int_h_strintenv_h x0)
       (int_inj_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
         x1))
int_inv_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
|- (int_inv_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
      int_funintenv_h_int_h_strintenv_h_NIL_funid_int_h_prod_funintenv_h_int_h_strintenv_h =
    []) /\
   (!x1 x2.
     int_inv_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
       (int_funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h
          x1
         x2) =
     CONS (int_inv_funid_int_h_prod_funintenv_h_int_h_strintenv_h x1)
       (int_inv_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
         x2))
int_inj_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h
|- !x0.
     int_inj_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h
       (FINMAP x0) =
     int_funintenv_h_int_h_strintenv_h_FINMAP_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
       (int_inj_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
         x0)
int_inv_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h
|- !x1.
     int_inv_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h
       (int_funintenv_h_int_h_strintenv_h_FINMAP_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
         x1) =
     FINMAP
       (int_inv_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
         x1)
FUNINTENV_H
|- FUNINTENV_H =
   (\x0.
     int_FUNINTENV_H
       (int_inj_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h
         x0))
INT_H
|- INT_H = (\x0 x1 x2 x3. int_INT_H x0 x1 x2 x3)
int_inj_strid_int_h_prod_funintenv_h_int_h_strintenv_h
|- !x1 x0.
     int_inj_strid_int_h_prod_funintenv_h_int_h_strintenv_h (x0,x1) =
     int_funintenv_h_int_h_strintenv_h_ch44_strid_int_h x0 x1
int_inv_strid_int_h_prod_funintenv_h_int_h_strintenv_h
|- !x1 x2.
     int_inv_strid_int_h_prod_funintenv_h_int_h_strintenv_h
       (int_funintenv_h_int_h_strintenv_h_ch44_strid_int_h x1 x2) =
     (x1,x2)
int_inj_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
|- (int_inj_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
      [] =
    int_funintenv_h_int_h_strintenv_h_NIL_strid_int_h_prod_funintenv_h_int_h_strintenv_h) /\
   (!x1 x0.
     int_inj_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
       (CONS x0 x1) =
     int_funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h
       (int_inj_strid_int_h_prod_funintenv_h_int_h_strintenv_h x0)
       (int_inj_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
         x1))
int_inv_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
|- (int_inv_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
      int_funintenv_h_int_h_strintenv_h_NIL_strid_int_h_prod_funintenv_h_int_h_strintenv_h =
    []) /\
   (!x1 x2.
     int_inv_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
       (int_funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h
          x1
         x2) =
     CONS (int_inv_strid_int_h_prod_funintenv_h_int_h_strintenv_h x1)
       (int_inv_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
         x2))
int_inj_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h
|- !x0.
     int_inj_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h
       (FINMAP x0) =
     int_funintenv_h_int_h_strintenv_h_FINMAP_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
       (int_inj_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
         x0)
int_inv_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h
|- !x1.
     int_inv_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h
       (int_funintenv_h_int_h_strintenv_h_FINMAP_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
         x1) =
     FINMAP
       (int_inv_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
         x1)
STRINTENV_H
|- STRINTENV_H =
   (\x0.
     int_STRINTENV_H
       (int_inj_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h
         x0))
dist_aux_ftn_funid_int_h_prod_funintenv_h_int_h_strintenv_h_DEF
|- (!x1 x2.
     dist_aux_ftn_funid_int_h_prod_funintenv_h_int_h_strintenv_h
       (int_funintenv_h_int_h_strintenv_h_ch44_funid_int_h x1 x2) =
     0) /\
   (dist_aux_ftn_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
      int_funintenv_h_int_h_strintenv_h_NIL_funid_int_h_prod_funintenv_h_int_h_strintenv_h =
    1) /\
   (!x1 x2.
     dist_aux_ftn_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
       (int_funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h
          x1
         x2) =
     2) /\
   (!x1.
     dist_aux_ftn_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h
       (int_funintenv_h_int_h_strintenv_h_FINMAP_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
         x1) =
     3) /\
   (!x1. dist_aux_ftn_funintenv_h (int_FUNINTENV_H x1) = 4) /\
   (!x1 x2 x3 x4. dist_aux_ftn_int_h (int_INT_H x1 x2 x3 x4) = 5) /\
   (!x1 x2.
     dist_aux_ftn_strid_int_h_prod_funintenv_h_int_h_strintenv_h
       (int_funintenv_h_int_h_strintenv_h_ch44_strid_int_h x1 x2) =
     6) /\
   (dist_aux_ftn_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
      int_funintenv_h_int_h_strintenv_h_NIL_strid_int_h_prod_funintenv_h_int_h_strintenv_h =
    7) /\
   (!x1 x2.
     dist_aux_ftn_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
       (int_funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h
          x1
         x2) =
     8) /\
   (!x1.
     dist_aux_ftn_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h
       (int_funintenv_h_int_h_strintenv_h_FINMAP_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
         x1) =
     9) /\
   (!x1. dist_aux_ftn_strintenv_h (int_STRINTENV_H x1) = 10)
int_funintenv_h_int_h_strintenv_h_ch44_funid_int_h_arg1_DEF
|- !x1 x2.
     int_funintenv_h_int_h_strintenv_h_ch44_funid_int_h_arg1
       (int_funintenv_h_int_h_strintenv_h_ch44_funid_int_h x1 x2) =
     x1
int_funintenv_h_int_h_strintenv_h_ch44_funid_int_h_arg2_DEF
|- !x1 x2.
     int_funintenv_h_int_h_strintenv_h_ch44_funid_int_h_arg2
       (int_funintenv_h_int_h_strintenv_h_ch44_funid_int_h x1 x2) =
     x2
int_funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h_arg1_DEF
|- (!x1 x2.
     int_funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h_arg1
       (int_funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h
          x1
         x2) =
     x1) /\
   (int_funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h_arg1
      int_funintenv_h_int_h_strintenv_h_NIL_funid_int_h_prod_funintenv_h_int_h_strintenv_h =
    (@x. T))
int_funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h_arg2_DEF
|- (!x1 x2.
     int_funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h_arg2
       (int_funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h
          x1
         x2) =
     x2) /\
   (int_funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h_arg2
      int_funintenv_h_int_h_strintenv_h_NIL_funid_int_h_prod_funintenv_h_int_h_strintenv_h =
    (@x. T))
int_funintenv_h_int_h_strintenv_h_FINMAP_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_arg_DEF
|- !x1.
     int_funintenv_h_int_h_strintenv_h_FINMAP_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_arg
       (int_funintenv_h_int_h_strintenv_h_FINMAP_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
         x1) =
     x1
int_FUNINTENV_H_arg_DEF
|- !x1. int_FUNINTENV_H_arg (int_FUNINTENV_H x1) = x1
int_INT_H_arg1_DEF
|- !x1 x2 x3 x4. int_INT_H_arg1 (int_INT_H x1 x2 x3 x4) = x1
int_INT_H_arg2_DEF
|- !x1 x2 x3 x4. int_INT_H_arg2 (int_INT_H x1 x2 x3 x4) = x2
int_INT_H_arg3_DEF
|- !x1 x2 x3 x4. int_INT_H_arg3 (int_INT_H x1 x2 x3 x4) = x3
int_INT_H_arg4_DEF
|- !x1 x2 x3 x4. int_INT_H_arg4 (int_INT_H x1 x2 x3 x4) = x4
int_funintenv_h_int_h_strintenv_h_ch44_strid_int_h_arg1_DEF
|- !x1 x2.
     int_funintenv_h_int_h_strintenv_h_ch44_strid_int_h_arg1
       (int_funintenv_h_int_h_strintenv_h_ch44_strid_int_h x1 x2) =
     x1
int_funintenv_h_int_h_strintenv_h_ch44_strid_int_h_arg2_DEF
|- !x1 x2.
     int_funintenv_h_int_h_strintenv_h_ch44_strid_int_h_arg2
       (int_funintenv_h_int_h_strintenv_h_ch44_strid_int_h x1 x2) =
     x2
int_funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h_arg1_DEF
|- (!x1 x2.
     int_funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h_arg1
       (int_funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h
          x1
         x2) =
     x1) /\
   (int_funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h_arg1
      int_funintenv_h_int_h_strintenv_h_NIL_strid_int_h_prod_funintenv_h_int_h_strintenv_h =
    (@x. T))
int_funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h_arg2_DEF
|- (!x1 x2.
     int_funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h_arg2
       (int_funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h
          x1
         x2) =
     x2) /\
   (int_funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h_arg2
      int_funintenv_h_int_h_strintenv_h_NIL_strid_int_h_prod_funintenv_h_int_h_strintenv_h =
    (@x. T))
int_funintenv_h_int_h_strintenv_h_FINMAP_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_arg_DEF
|- !x1.
     int_funintenv_h_int_h_strintenv_h_FINMAP_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_arg
       (int_funintenv_h_int_h_strintenv_h_FINMAP_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
         x1) =
     x1
int_STRINTENV_H_arg_DEF
|- !x1. int_STRINTENV_H_arg (int_STRINTENV_H x1) = x1
sigenv_h_TY_DEF
|- ?rep. TYPE_DEFINITION (TRP (\v tl. (?f. v = f) /\ (LENGTH tl = 0))) rep
sigenv_h_ISO_DEF
|- (!a. ABS_sigenv_h (REP_sigenv_h a) = a) /\
   (!r.
     TRP (\v tl. (?f. v = f) /\ (LENGTH tl = 0)) r =
     REP_sigenv_h (ABS_sigenv_h r) =
     r)
SIGENV_H_DEF
|- !f'. SIGENV_H f' = ABS_sigenv_h (Node f' [])
intbasis_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (TRP (\v tl. (?s0 s1 f. v = (s0,s1,f)) /\ (LENGTH tl = 0)))
       rep
intbasis_h_ISO_DEF
|- (!a. ABS_intbasis_h (REP_intbasis_h a) = a) /\
   (!r.
     TRP (\v tl. (?s0 s1 f. v = (s0,s1,f)) /\ (LENGTH tl = 0)) r =
     REP_intbasis_h (ABS_intbasis_h r) =
     r)
INTBASIS_H_DEF
|- !s0 s1 f'. INTBASIS_H s0 s1 f' = ABS_intbasis_h (Node (s0,s1,f') [])
joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (TRP
         (\v tl.
           (?s. v = INL s) /\ (LENGTH tl = SUC 0) \/
           (?v e. v = INR (INL (v,e))) /\ (LENGTH tl = SUC (SUC 0)) \/
           (?s0 i s1. v = INR (INR (INL (s0,i,s1)))) /\
           (LENGTH tl = SUC (SUC 0)) \/
           (v = INR (INR (INR (INL one)))) /\ (LENGTH tl = SUC 0) \/
           (?f. v = INR (INR (INR (INR (INL f))))) /\ (LENGTH tl = SUC 0) \/
           (v = INR (INR (INR (INR (INR (INL one)))))) /\ (LENGTH tl = 0) \/
           (v = INR (INR (INR (INR (INR (INR (INL one))))))) /\
           (LENGTH tl = SUC (SUC 0)) \/
           (v = INR (INR (INR (INR (INR (INR (INR (INL one)))))))) /\
           (LENGTH tl = SUC 0) \/
           (v = INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))) /\
           (LENGTH tl = 0) \/
           (?i.
             v =
             INR (INR (INR (INR (INR (INR (INR (INR (INR (INL i)))))))))) /\
           (LENGTH tl = 0) \/
           (v =
            INR
              (INR
                (INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))))) /\
           (LENGTH tl = SUC 0) \/
           (?s.
             v =
             INR
               (INR
                 (INR
                   (INR
                     (INR (INR (INR (INR (INR (INR (INR (INL s)))))))))))) /\
           (LENGTH tl = SUC 0) \/
           (v =
            INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR (INR (INR (INR (INR (INR (INL one))))))))))))) /\
           (LENGTH tl = 0) \/
           (v =
            INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR
                          (INR
                            (INR (INR (INR (INR (INR (INL one)))))))))))))) /\
           (LENGTH tl = SUC (SUC 0)) \/
           (v =
            INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR
                          (INR
                            (INR (INR (INR (INR (INR (INR one)))))))))))))) /\
           (LENGTH tl = SUC 0)))
       rep
joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_ISO_DEF
|- (!a.
     ABS_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (REP_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
         a) =
     a) /\
   (!r.
     TRP
       (\v tl.
         (?s. v = INL s) /\ (LENGTH tl = SUC 0) \/
         (?v e. v = INR (INL (v,e))) /\ (LENGTH tl = SUC (SUC 0)) \/
         (?s0 i s1. v = INR (INR (INL (s0,i,s1)))) /\
         (LENGTH tl = SUC (SUC 0)) \/
         (v = INR (INR (INR (INL one)))) /\ (LENGTH tl = SUC 0) \/
         (?f. v = INR (INR (INR (INR (INL f))))) /\ (LENGTH tl = SUC 0) \/
         (v = INR (INR (INR (INR (INR (INL one)))))) /\ (LENGTH tl = 0) \/
         (v = INR (INR (INR (INR (INR (INR (INL one))))))) /\
         (LENGTH tl = SUC (SUC 0)) \/
         (v = INR (INR (INR (INR (INR (INR (INR (INL one)))))))) /\
         (LENGTH tl = SUC 0) \/
         (v = INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))) /\
         (LENGTH tl = 0) \/
         (?i.
           v = INR (INR (INR (INR (INR (INR (INR (INR (INR (INL i)))))))))) /\
         (LENGTH tl = 0) \/
         (v =
          INR
            (INR
              (INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))))) /\
         (LENGTH tl = SUC 0) \/
         (?s.
           v =
           INR
             (INR
               (INR
                 (INR (INR (INR (INR (INR (INR (INR (INR (INL s)))))))))))) /\
         (LENGTH tl = SUC 0) \/
         (v =
          INR
            (INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR (INR (INR (INR (INR (INR (INL one))))))))))))) /\
         (LENGTH tl = 0) \/
         (v =
          INR
            (INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR
                          (INR (INR (INR (INR (INR (INL one)))))))))))))) /\
         (LENGTH tl = SUC (SUC 0)) \/
         (v =
          INR
            (INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR
                          (INR (INR (INR (INR (INR (INR one)))))))))))))) /\
         (LENGTH tl = SUC 0))
       r =
     REP_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (ABS_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
         r) =
     r)
JOINT_int_BASIS_H_DEF
|- !s j.
     JOINT_int_BASIS_H s j =
     ABS_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (Node (INL s)
         [REP_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
            j])
JOINT_int_ENV_H_DEF
|- !j1 j2 v' e.
     JOINT_int_ENV_H j1 j2 v' e =
     ABS_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (Node (INR (INL (v',e)))
         [REP_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
            j1;
          REP_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
            j2])
JOINT_int_FUNCLOS_H_DEF
|- !s0 i s1 j1 j2.
     JOINT_int_FUNCLOS_H s0 i s1 j1 j2 =
     ABS_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (Node (INR (INR (INL (s0,i,s1))))
         [REP_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
            j1;
          REP_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
            j2])
JOINT_int_FUNENV_H_DEF
|- !j.
     JOINT_int_FUNENV_H j =
     ABS_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (Node (INR (INR (INR (INL one))))
         [REP_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
            j])
JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h_DEF
|- !f' j.
     JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h
       f'
       j =
     ABS_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (Node (INR (INR (INR (INR (INL f')))))
         [REP_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
            j])
JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_DEF
|- JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h =
   ABS_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
     (Node (INR (INR (INR (INR (INR (INL one)))))) [])
JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_DEF
|- !j1 j2.
     JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
       j1
       j2 =
     ABS_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (Node (INR (INR (INR (INR (INR (INR (INL one)))))))
         [REP_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
            j1;
          REP_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
            j2])
JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_DEF
|- !j.
     JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
       j =
     ABS_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (Node (INR (INR (INR (INR (INR (INR (INR (INL one))))))))
         [REP_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
            j])
JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NONE_int_h_DEF
|- JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NONE_int_h =
   ABS_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
     (Node (INR (INR (INR (INR (INR (INR (INR (INR (INL one))))))))) [])
JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h_DEF
|- !i.
     JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h i =
     ABS_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (Node (INR (INR (INR (INR (INR (INR (INR (INR (INR (INL i)))))))))) [])
JOINT_int_STRENV_H_DEF
|- !j.
     JOINT_int_STRENV_H j =
     ABS_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (Node
          (INR
            (INR (INR (INR (INR (INR (INR (INR (INR (INR (INL one)))))))))))
         [REP_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
            j])
JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h_DEF
|- !s j.
     JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h s
       j =
     ABS_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (Node
          (INR
            (INR
              (INR (INR (INR (INR (INR (INR (INR (INR (INR (INL s))))))))))))
         [REP_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
            j])
JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_DEF
|- JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h =
   ABS_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
     (Node
        (INR
          (INR
            (INR
              (INR
                (INR (INR (INR (INR (INR (INR (INR (INR (INL one)))))))))))))
       [])
JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_DEF
|- !j1 j2.
     JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
       j1
       j2 =
     ABS_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (Node
          (INR
            (INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR (INR (INR (INR (INR (INR (INL one))))))))))))))
         [REP_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
            j1;
          REP_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
            j2])
JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_DEF
|- !j.
     JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
       j =
     ABS_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (Node
          (INR
            (INR
              (INR
                (INR
                  (INR
                    (INR
                      (INR
                        (INR (INR (INR (INR (INR (INR (INR one))))))))))))))
         [REP_joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
            j])
joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select_DEF
|- (!s j.
     joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
       (JOINT_int_BASIS_H s j) =
     ((joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         j =
       2)
      => 1
      | 0)) /\
   (!j1 j2 v' e.
     joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
       (JOINT_int_ENV_H j1 j2 v' e) =
     (((joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
          j1 =
        4) /\
       (joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
          j2 =
        9))
      => 2
      | 0)) /\
   (!s0 i s1 j1 j2.
     joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
       (JOINT_int_FUNCLOS_H s0 i s1 j1 j2) =
     (((joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
          j1 =
        8) /\
       (joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
          j2 =
        1))
      => 3
      | 0)) /\
   (!j.
     joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
       (JOINT_int_FUNENV_H j) =
     ((joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         j =
       7)
      => 4
      | 0)) /\
   (!f' j.
     joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
       (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h
          f'
         j) =
     ((joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         j =
       3)
      => 5
      | 0)) /\
   (joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
      JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h =
    6) /\
   (!j1 j2.
     joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
       (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
          j1
         j2) =
     (((joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
          j1 =
        5) /\
       (joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
          j2 =
        6))
      => 6
      | 0)) /\
   (!j.
     joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
       (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
         j) =
     ((joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         j =
       6)
      => 7
      | 0)) /\
   (joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
      JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NONE_int_h =
    8) /\
   (!i.
     joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
       (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h i) =
     8) /\
   (!j.
     joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
       (JOINT_int_STRENV_H j) =
     ((joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         j =
       12)
      => 9
      | 0)) /\
   (!s j.
     joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
       (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h s
         j) =
     ((joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         j =
       2)
      => 10
      | 0)) /\
   (joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
      JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h =
    11) /\
   (!j1 j2.
     joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
       (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
          j1
         j2) =
     (((joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
          j1 =
        10) /\
       (joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
          j2 =
        11))
      => 11
      | 0)) /\
   (!j.
     joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
       (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
         j) =
     ((joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         j =
       11)
      => 12
      | 0))
strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
           x =
         10)
       rep
strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_REP_ABS
|- (!a.
     strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
       (strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep a) =
     a) /\
   (!r.
     (\x.
       joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         x =
       10)
       r =
     strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
       (strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs r) =
     r)
funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
           x =
         5)
       rep
funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_REP_ABS
|- (!a.
     funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
       (funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
         a) =
     a) /\
   (!r.
     (\x.
       joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         x =
       5)
       r =
     funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
       (funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
         r) =
     r)
funclos_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
           x =
         3)
       rep
funclos_h_REP_ABS
|- (!a. funclos_h_abs (funclos_h_rep a) = a) /\
   (!r.
     (\x.
       joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         x =
       3)
       r =
     funclos_h_rep (funclos_h_abs r) =
     r)
basis_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
           x =
         1)
       rep
basis_h_REP_ABS
|- (!a. basis_h_abs (basis_h_rep a) = a) /\
   (!r.
     (\x.
       joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         x =
       1)
       r =
     basis_h_rep (basis_h_abs r) =
     r)
env_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
           x =
         2)
       rep
env_h_REP_ABS
|- (!a. env_h_abs (env_h_rep a) = a) /\
   (!r.
     (\x.
       joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         x =
       2)
       r =
     env_h_rep (env_h_abs r) =
     r)
funenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
           x =
         4)
       rep
funenv_h_REP_ABS
|- (!a. funenv_h_abs (funenv_h_rep a) = a) /\
   (!r.
     (\x.
       joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         x =
       4)
       r =
     funenv_h_rep (funenv_h_abs r) =
     r)
strenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
           x =
         9)
       rep
strenv_h_REP_ABS
|- (!a. strenv_h_abs (strenv_h_rep a) = a) /\
   (!r.
     (\x.
       joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         x =
       9)
       r =
     strenv_h_rep (strenv_h_abs r) =
     r)
strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
           x =
         12)
       rep
strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_REP_ABS
|- (!a.
     strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
       (strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
         a) =
     a) /\
   (!r.
     (\x.
       joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         x =
       12)
       r =
     strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
       (strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
         r) =
     r)
strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
           x =
         11)
       rep
strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_REP_ABS
|- (!a.
     strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
       (strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
         a) =
     a) /\
   (!r.
     (\x.
       joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         x =
       11)
       r =
     strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
       (strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
         r) =
     r)
int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
           x =
         8)
       rep
int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_REP_ABS
|- (!a.
     int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
       (int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep a) =
     a) /\
   (!r.
     (\x.
       joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         x =
       8)
       r =
     int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
       (int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs r) =
     r)
funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
           x =
         7)
       rep
funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_REP_ABS
|- (!a.
     funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
       (funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
         a) =
     a) /\
   (!r.
     (\x.
       joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         x =
       7)
       r =
     funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
       (funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
         r) =
     r)
funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x.
         joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
           x =
         6)
       rep
funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_REP_ABS
|- (!a.
     funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
       (funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
         a) =
     a) /\
   (!r.
     (\x.
       joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_select
         x =
       6)
       r =
     funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
       (funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
         r) =
     r)
int_BASIS_H_DEF
|- !x1 x2.
     int_BASIS_H x1 x2 = basis_h_abs (JOINT_int_BASIS_H x1 (env_h_rep x2))
int_ENV_H_DEF
|- !x1 x2 x3 x4.
     int_ENV_H x1 x2 x3 x4 =
     env_h_abs (JOINT_int_ENV_H (funenv_h_rep x1) (strenv_h_rep x2) x3 x4)
int_FUNCLOS_H_DEF
|- !x1 x2 x3 x4 x5.
     int_FUNCLOS_H x1 x2 x3 x4 x5 =
     funclos_h_abs
       (JOINT_int_FUNCLOS_H x1 x2 x3
          (int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep x4)
         (basis_h_rep x5))
int_FUNENV_H_DEF
|- !x1.
     int_FUNENV_H x1 =
     funenv_h_abs
       (JOINT_int_FUNENV_H
         (funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
           x1))
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h_DEF
|- !x1 x2.
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h x1
       x2 =
     funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
       (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h
          x1
         (funclos_h_rep x2))
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_DEF
|- int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h =
   funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
     JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_DEF
|- !x1 x2.
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
       x1
       x2 =
     funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
       (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
          (funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
            x1)
         (funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
           x2))
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_DEF
|- !x1.
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
       x1 =
     funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
       (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
         (funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
           x1))
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NONE_int_h_DEF
|- int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NONE_int_h =
   int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
     JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NONE_int_h
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h_DEF
|- !x1.
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h x1 =
     int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
       (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h x1)
int_STRENV_H_DEF
|- !x1.
     int_STRENV_H x1 =
     strenv_h_abs
       (JOINT_int_STRENV_H
         (strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
           x1))
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h_DEF
|- !x1 x2.
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h x1 x2 =
     strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
       (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h
          x1
         (env_h_rep x2))
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_DEF
|- int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h =
   strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
     JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_DEF
|- !x1 x2.
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
       x1
       x2 =
     strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
       (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
          (strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep x1)
         (strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
           x2))
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_DEF
|- !x1.
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
       x1 =
     strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_abs
       (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
         (strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_rep
           x1))
BASIS_H
|- BASIS_H = (\x0 x1. int_BASIS_H x0 x1)
ENV_H
|- ENV_H = (\x0 x1 x2 x3. int_ENV_H x0 x1 x2 x3)
int_inj_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
|- !x1 x0.
     int_inj_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (x0,x1) =
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h x0 x1
int_inv_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
|- !x1 x2.
     int_inv_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h x1
         x2) =
     (x1,x2)
int_inj_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
|- (int_inj_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
      [] =
    int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h) /\
   (!x1 x0.
     int_inj_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (CONS x0 x1) =
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (int_inj_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
         x0)
       (int_inj_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
         x1))
int_inv_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
|- (int_inv_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
      int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h =
    []) /\
   (!x1 x2.
     int_inv_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
          x1
         x2) =
     CONS
       (int_inv_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
         x1)
       (int_inv_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
         x2))
int_inj_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
|- !x0.
     int_inj_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (FINMAP x0) =
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (int_inj_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
         x0)
int_inv_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
|- !x1.
     int_inv_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
         x1) =
     FINMAP
       (int_inv_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
         x1)
FUNENV_H
|- FUNENV_H =
   (\x0.
     int_FUNENV_H
       (int_inj_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
         x0))
int_inj_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h
|- (int_inj_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h NONE =
    int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NONE_int_h) /\
   (!x0.
     int_inj_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (SOME x0) =
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h x0)
int_inv_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h
|- (int_inv_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h
      int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NONE_int_h =
    NONE) /\
   (!x1.
     int_inv_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h x1) =
     SOME x1)
FUNCLOS_H
|- FUNCLOS_H =
   (\x0 x1 x2 x3 x4.
     int_FUNCLOS_H x0 x1 x2
       (int_inj_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h x3)
       x4)
int_inj_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
|- !x1 x0.
     int_inj_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (x0,x1) =
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h x0 x1
int_inv_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
|- !x1 x2.
     int_inv_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h x1
         x2) =
     (x1,x2)
int_inj_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
|- (int_inj_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
      [] =
    int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h) /\
   (!x1 x0.
     int_inj_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (CONS x0 x1) =
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (int_inj_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h x0)
       (int_inj_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
         x1))
int_inv_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
|- (int_inv_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
      int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h =
    []) /\
   (!x1 x2.
     int_inv_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
          x1
         x2) =
     CONS
       (int_inv_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h x1)
       (int_inv_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
         x2))
int_inj_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
|- !x0.
     int_inj_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (FINMAP x0) =
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (int_inj_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
         x0)
int_inv_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
|- !x1.
     int_inv_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
         x1) =
     FINMAP
       (int_inv_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
         x1)
STRENV_H
|- STRENV_H =
   (\x0.
     int_STRENV_H
       (int_inj_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
         x0))
dist_aux_ftn_basis_h_DEF
|- (!x1 x2. dist_aux_ftn_basis_h (int_BASIS_H x1 x2) = 0) /\
   (!x1 x2 x3 x4. dist_aux_ftn_env_h (int_ENV_H x1 x2 x3 x4) = 1) /\
   (!x1 x2 x3 x4 x5.
     dist_aux_ftn_funclos_h (int_FUNCLOS_H x1 x2 x3 x4 x5) = 2) /\
   (!x1. dist_aux_ftn_funenv_h (int_FUNENV_H x1) = 3) /\
   (!x1 x2.
     dist_aux_ftn_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h x1
         x2) =
     4) /\
   (dist_aux_ftn_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
      int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h =
    5) /\
   (!x1 x2.
     dist_aux_ftn_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
          x1
         x2) =
     6) /\
   (!x1.
     dist_aux_ftn_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
         x1) =
     7) /\
   (dist_aux_ftn_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h
      int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NONE_int_h =
    8) /\
   (!x1.
     dist_aux_ftn_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h x1) =
     9) /\
   (!x1. dist_aux_ftn_strenv_h (int_STRENV_H x1) = 10) /\
   (!x1 x2.
     dist_aux_ftn_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h x1
         x2) =
     11) /\
   (dist_aux_ftn_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
      int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h =
    12) /\
   (!x1 x2.
     dist_aux_ftn_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
          x1
         x2) =
     13) /\
   (!x1.
     dist_aux_ftn_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
         x1) =
     14)
int_BASIS_H_arg1_DEF
|- !x1 x2. int_BASIS_H_arg1 (int_BASIS_H x1 x2) = x1
int_BASIS_H_arg2_DEF
|- !x1 x2. int_BASIS_H_arg2 (int_BASIS_H x1 x2) = x2
int_ENV_H_arg1_DEF
|- !x1 x2 x3 x4. int_ENV_H_arg1 (int_ENV_H x1 x2 x3 x4) = x1
int_ENV_H_arg2_DEF
|- !x1 x2 x3 x4. int_ENV_H_arg2 (int_ENV_H x1 x2 x3 x4) = x2
int_ENV_H_arg3_DEF
|- !x1 x2 x3 x4. int_ENV_H_arg3 (int_ENV_H x1 x2 x3 x4) = x3
int_ENV_H_arg4_DEF
|- !x1 x2 x3 x4. int_ENV_H_arg4 (int_ENV_H x1 x2 x3 x4) = x4
int_FUNCLOS_H_arg1_DEF
|- !x1 x2 x3 x4 x5. int_FUNCLOS_H_arg1 (int_FUNCLOS_H x1 x2 x3 x4 x5) = x1
int_FUNCLOS_H_arg2_DEF
|- !x1 x2 x3 x4 x5. int_FUNCLOS_H_arg2 (int_FUNCLOS_H x1 x2 x3 x4 x5) = x2
int_FUNCLOS_H_arg3_DEF
|- !x1 x2 x3 x4 x5. int_FUNCLOS_H_arg3 (int_FUNCLOS_H x1 x2 x3 x4 x5) = x3
int_FUNCLOS_H_arg4_DEF
|- !x1 x2 x3 x4 x5. int_FUNCLOS_H_arg4 (int_FUNCLOS_H x1 x2 x3 x4 x5) = x4
int_FUNCLOS_H_arg5_DEF
|- !x1 x2 x3 x4 x5. int_FUNCLOS_H_arg5 (int_FUNCLOS_H x1 x2 x3 x4 x5) = x5
int_FUNENV_H_arg_DEF
|- !x1. int_FUNENV_H_arg (int_FUNENV_H x1) = x1
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h_arg1_DEF
|- !x1 x2.
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h_arg1
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h x1
         x2) =
     x1
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h_arg2_DEF
|- !x1 x2.
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h_arg2
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h x1
         x2) =
     x2
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_arg1_DEF
|- (!x1 x2.
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_arg1
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
          x1
         x2) =
     x1) /\
   (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_arg1
      int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h =
    (@x. T))
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_arg2_DEF
|- (!x1 x2.
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_arg2
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
          x1
         x2) =
     x2) /\
   (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_arg2
      int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h =
    (@x. T))
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_arg_DEF
|- !x1.
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_arg
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
         x1) =
     x1
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h_arg_DEF
|- (!x1.
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h_arg
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h x1) =
     x1) /\
   (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h_arg
      int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NONE_int_h =
    (@x. T))
int_STRENV_H_arg_DEF
|- !x1. int_STRENV_H_arg (int_STRENV_H x1) = x1
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h_arg1_DEF
|- !x1 x2.
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h_arg1
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h x1
         x2) =
     x1
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h_arg2_DEF
|- !x1 x2.
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h_arg2
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h x1
         x2) =
     x2
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_arg1_DEF
|- (!x1 x2.
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_arg1
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
          x1
         x2) =
     x1) /\
   (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_arg1
      int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h =
    (@x. T))
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_arg2_DEF
|- (!x1 x2.
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_arg2
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
          x1
         x2) =
     x2) /\
   (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_arg2
      int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h =
    (@x. T))
int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_arg_DEF
|- !x1.
     int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_arg
       (int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
         x1) =
     x1
basis_pack_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (TRP
         (\v tl.
           (?b. v = INL b) /\ (LENGTH tl = 0) \/
           (?p. v = INR p) /\ (LENGTH tl = 0)))
       rep
basis_pack_h_ISO_DEF
|- (!a. ABS_basis_pack_h (REP_basis_pack_h a) = a) /\
   (!r.
     TRP
       (\v tl.
         (?b. v = INL b) /\ (LENGTH tl = 0) \/
         (?p. v = INR p) /\ (LENGTH tl = 0))
       r =
     REP_basis_pack_h (ABS_basis_pack_h r) =
     r)
BASISbp_h_DEF
|- !b. BASISbp_h b = ABS_basis_pack_h (Node (INL b) [])
PACKbp_h_DEF
|- !p. PACKbp_h p = ABS_basis_pack_h (Node (INR p) [])
strenv_pack_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (TRP
         (\v tl.
           (?s. v = INL s) /\ (LENGTH tl = 0) \/
           (?p. v = INR p) /\ (LENGTH tl = 0)))
       rep
strenv_pack_h_ISO_DEF
|- (!a. ABS_strenv_pack_h (REP_strenv_pack_h a) = a) /\
   (!r.
     TRP
       (\v tl.
         (?s. v = INL s) /\ (LENGTH tl = 0) \/
         (?p. v = INR p) /\ (LENGTH tl = 0))
       r =
     REP_strenv_pack_h (ABS_strenv_pack_h r) =
     r)
STRENVsp_h_DEF
|- !s. STRENVsp_h s = ABS_strenv_pack_h (Node (INL s) [])
PACKsp_h_DEF
|- !p. PACKsp_h p = ABS_strenv_pack_h (Node (INR p) [])
env_pack_h_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (TRP
         (\v tl.
           (?e. v = INL e) /\ (LENGTH tl = 0) \/
           (?p. v = INR p) /\ (LENGTH tl = 0)))
       rep
env_pack_h_ISO_DEF
|- (!a. ABS_env_pack_h (REP_env_pack_h a) = a) /\
   (!r.
     TRP
       (\v tl.
         (?e. v = INL e) /\ (LENGTH tl = 0) \/
         (?p. v = INR p) /\ (LENGTH tl = 0))
       r =
     REP_env_pack_h (ABS_env_pack_h r) =
     r)
ENVep_h_DEF
|- !e. ENVep_h e = ABS_env_pack_h (Node (INL e) [])
PACKep_h_DEF
|- !p. PACKep_h p = ABS_env_pack_h (Node (INR p) [])
STRENV_H_arg_DEF
|- !x1. STRENV_H_arg (STRENV_H x1) = x1
FUNENV_H_arg_DEF
|- !x1. FUNENV_H_arg (FUNENV_H x1) = x1
SIGENV_H_arg_DEF
|- !se. SIGENV_H_arg (SIGENV_H se) = se
STRINTENV_H_arg_DEF
|- !x1. STRINTENV_H_arg (STRINTENV_H x1) = x1
FUNINTENV_H_arg_DEF
|- !x1. FUNINTENV_H_arg (FUNINTENV_H x1) = x1
funenv_h_of_env_h_DEF
|- !x1 x2 x3 x4. funenv_h_of_env_h (ENV_H x1 x2 x3 x4) = x1
strenv_h_of_env_h_DEF
|- !x1 x2 x3 x4. strenv_h_of_env_h (ENV_H x1 x2 x3 x4) = x2
varenv_of_env_h_DEF
|- !x1 x2 x3 x4. varenv_of_env_h (ENV_H x1 x2 x3 x4) = x3
exconenv_of_env_h_DEF
|- !x1 x2 x3 x4. exconenv_of_env_h (ENV_H x1 x2 x3 x4) = x4
sigenv_h_of_basis_h_DEF
|- !x1 x2. sigenv_h_of_basis_h (BASIS_H x1 x2) = x1
env_h_of_basis_h_DEF
|- !x1 x2. env_h_of_basis_h (BASIS_H x1 x2) = x2
funintenv_h_of_int_h_DEF
|- !x1 x2 x3 x4. funintenv_h_of_int_h (INT_H x1 x2 x3 x4) = x1
strintenv_h_of_int_h_DEF
|- !x1 x2 x3 x4. strintenv_h_of_int_h (INT_H x1 x2 x3 x4) = x2
vars_of_int_h_DEF
|- !x1 x2 x3 x4. vars_of_int_h (INT_H x1 x2 x3 x4) = x3
excons_of_int_h_DEF
|- !x1 x2 x3 x4. excons_of_int_h (INT_H x1 x2 x3 x4) = x4
funintenv_h_of_intbasis_h_DEF
|- !f st si. funintenv_h_of_intbasis_h (INTBASIS_H si st f) = f
sigenv_h_of_intbasis_h_DEF
|- !f st si. sigenv_h_of_intbasis_h (INTBASIS_H si st f) = si
strintenv_h_of_intbasis_h_DEF
|- !f st si. strintenv_h_of_intbasis_h (INTBASIS_H si st f) = st
empty_sigenv_h_DEF
|- empty_sigenv_h = SIGENV_H (\x. undefined)
empty_strenv_h_DEF
|- empty_strenv_h = STRENV_H empty_finmap
empty_funenv_h_DEF
|- empty_funenv_h = FUNENV_H empty_finmap
empty_env_h_DEF
|- empty_env_h =
   ENV_H empty_funenv_h empty_strenv_h empty_varenv empty_exconenv
empty_strintenv_h_DEF
|- empty_strintenv_h = STRINTENV_H empty_finmap
empty_funintenv_h_DEF
|- empty_funintenv_h = FUNINTENV_H empty_finmap
empty_int_h_DEF
|- empty_int_h = INT_H empty_funintenv_h empty_strintenv_h {} {}
insert_into_funenv_h_DEF
|- !x1.
     insert_into_funenv_h (FUNENV_H x1) =
     (\funid fcl. FUNENV_H (finmap_insert less_funid funid fcl x1))
insert_into_strenv_h_DEF
|- !x1.
     insert_into_strenv_h (STRENV_H x1) =
     (\strid e. STRENV_H (finmap_insert less_strid strid e x1))
insert_into_strintenv_h_DEF
|- !x1.
     insert_into_strintenv_h (STRINTENV_H x1) =
     (\strid int_h. STRINTENV_H (finmap_insert less_strid strid int_h x1))
insert_into_funintenv_h_DEF
|- !x1.
     insert_into_funintenv_h (FUNINTENV_H x1) =
     (\funid int_h. FUNINTENV_H (finmap_insert less_funid funid int_h x1))
insert_into_sigenv_h_DEF
|- !se sigid int_h.
     insert_into_sigenv_h (SIGENV_H se) sigid int_h =
     SIGENV_H (\x. (x = sigid) => (lift int_h) | (se x))
funenv_h_map_DEF
|- !fi fc. funenv_h_map fi fc = FUNENV_H (FINMAP [fi,fc])
funintenv_h_map_DEF
|- !fi i. funintenv_h_map fi i = FUNINTENV_H (FINMAP [fi,i])
strintenv_h_map_DEF
|- !si i. strintenv_h_map si i = STRINTENV_H (FINMAP [si,i])
sigenv_h_map_DEF
|- !si i. sigenv_h_map si i = SIGENV_H (\x. (x = si) => (lift i) | undefined)
strenv_h_map_DEF
|- !si e. strenv_h_map si e = STRENV_H (FINMAP [si,e])
add_funenv_h_DEF
|- !fe1 fe2.
     add_funenv_h fe1 fe2 =
     FUNENV_H (finmap_modify less_funid (FUNENV_H_arg fe1) (FUNENV_H_arg fe2))
add_strenv_h_DEF
|- !se1 se2.
     add_strenv_h se1 se2 =
     STRENV_H (finmap_modify less_strid (STRENV_H_arg se1) (STRENV_H_arg se2))
add_sigenv_DEF
|- !s1 s2.
     add_sigenv_h s1 s2 =
     SIGENV_H
       (\x.
         (SIGENV_H_arg s1 x = undefined)
         => (SIGENV_H_arg s2 x)
         | (SIGENV_H_arg s1 x))
add_env_h_DEF
|- !x1 x2 x3 x4.
     add_env_h (ENV_H x1 x2 x3 x4) =
     (\E.
       ENV_H (add_funenv_h x1 (funenv_h_of_env_h E))
         (add_strenv_h x2 (strenv_h_of_env_h E))
         (add_varenv x3 (varenv_of_env_h E))
         (add_exconenv x4 (exconenv_of_env_h E)))
add_basis_h_DEF
|- !x1 x2.
     add_basis_h (BASIS_H x1 x2) =
     (\B.
       BASIS_H (add_sigenv_h x1 (sigenv_h_of_basis_h B))
         (add_env_h x2 (env_h_of_basis_h B)))
add_strintenv_h_DEF
|- !SIE1 SIE2.
     add_strintenv_h SIE1 SIE2 =
     STRINTENV_H
       (finmap_modify less_strid (STRINTENV_H_arg SIE2)
         (STRINTENV_H_arg SIE1))
add_funintenv_h_DEF
|- !int_h int_h'.
     add_funintenv_h int_h int_h' =
     FUNINTENV_H
       (finmap_modify less_funid (FUNINTENV_H_arg int_h)
         (FUNINTENV_H_arg int_h'))
add_int_h_DEF
|- !x1 x2 x3 x4.
     add_int_h (INT_H x1 x2 x3 x4) =
     (\int_h.
       INT_H (add_funintenv_h x1 (funintenv_h_of_int_h int_h))
         (add_strintenv_h x2 (strintenv_h_of_int_h int_h))
         (x3 UNION vars_of_int_h int_h)
         (x4 UNION excons_of_int_h int_h))
add_env_h_to_basis_h_DEF
|- !b e.
     add_env_h_to_basis_h b e =
     BASIS_H (sigenv_h_of_basis_h b) (add_env_h (env_h_of_basis_h b) e)
add_funenv_h_to_env_h_DEF
|- !e f.
     add_funenv_h_to_env_h e f =
     ENV_H (add_funenv_h (funenv_h_of_env_h e) f) (strenv_h_of_env_h e)
       (varenv_of_env_h e)
       (exconenv_of_env_h e)
add_funenv_h_to_basis_h_DEF
|- !b f.
     add_funenv_h_to_basis_h b f =
     BASIS_H (sigenv_h_of_basis_h b)
       (add_funenv_h_to_env_h (env_h_of_basis_h b) f)
add_funintenv_h_to_intbasis_h_DEF
|- !s i f f'.
     add_funintenv_h_to_intbasis_h (INTBASIS_H s i f) f' =
     INTBASIS_H s i (add_funintenv_h f f')
add_sigenv_h_to_intbasis_h_DEF
|- !s i f s'.
     add_sigenv_h_to_intbasis_h (INTBASIS_H s i f) s' =
     INTBASIS_H (add_sigenv_h s s') i f
add_strintenv_h_to_intbasis_h_DEF
|- !s sie f sie'.
     add_strintenv_h_to_intbasis_h (INTBASIS_H s sie f) sie' =
     INTBASIS_H s (add_strintenv_h sie sie') f
strenv_h_in_env_h_DEF
|- !s.
     strenv_h_in_env_h s = ENV_H empty_funenv_h s empty_varenv empty_exconenv
funenv_h_in_env_h_DEF
|- !f.
     funenv_h_in_env_h f = ENV_H f empty_strenv_h empty_varenv empty_exconenv
vars_in_int_h_DEF
|- !x. vars_in_int_h x = INT_H empty_funintenv_h empty_strintenv_h x {}
excons_in_int_h_DEF
|- !x. excons_in_int_h x = INT_H empty_funintenv_h empty_strintenv_h {} x
funintenv_h_in_int_h_DEF
|- !x. funintenv_h_in_int_h x = INT_H x empty_strintenv_h {} {}
strintenv_h_in_int_h_DEF
|- !x. strintenv_h_in_int_h x = INT_H empty_funintenv_h x {} {}
env_h_in_basis_h_DEF
|- !e. env_h_in_basis_h e = BASIS_H (SIGENV_H (\x. undefined)) e
strenv_h_in_basis_h_DEF
|- !s. strenv_h_in_basis_h s = env_h_in_basis_h (strenv_h_in_env_h s)
sigenv_h_in_basis_h_DEF
|- !s. sigenv_h_in_basis_h s = BASIS_H s empty_env_h
funenv_h_in_basis_h_DEF
|- !f.
     funenv_h_in_basis_h f =
     BASIS_H (SIGENV_H (\x. undefined)) (funenv_h_in_env_h f)
lookupstrid_env_h_DEF
|- (!x1 x2 x3 x4.
     lookupstrid_env_h (ENV_H x1 x2 x3 x4) =
     (\strid. lookupstrid_strenv_h x2 strid)) /\
   (!x1.
     lookupstrid_strenv_h (STRENV_H x1) = (\strid. finmap_lookup strid x1))
lookuplongstrid_env_h_DEF
|- (!E s.
     lookuplongstrid_env_h E (BASE s) =
     lookupstrid_strenv_h (strenv_h_of_env_h E) s) /\
   (!E ls strid.
     lookuplongstrid_env_h E (QUALIFIED strid ls) =
     ((lookupstrid_strenv_h (strenv_h_of_env_h E) strid = undefined)
      => undefined
      | (lookuplongstrid_env_h
           (lower (lookupstrid_strenv_h (strenv_h_of_env_h E) strid))
          ls)))
lookupvar_env_h_DEF
|- !x1 x2 x3 x4.
     lookupvar_env_h (ENV_H x1 x2 x3 x4) = (\v. lookupvar_varenv x3 v)
lookupexcon_env_h_DEF
|- !x1 x2 x3 x4.
     lookupexcon_env_h (ENV_H x1 x2 x3 x4) = (\ec. lookupexcon_exconenv x4 ec)
lookuplongvar_env_h_DEF
|- (!E v.
     lookuplongvar_env_h E (BASE v) =
     lookupvar_varenv (varenv_of_env_h E) v) /\
   (!E lv strid.
     lookuplongvar_env_h E (QUALIFIED strid lv) =
     ((lookupstrid_strenv_h (strenv_h_of_env_h E) strid = undefined)
      => undefined
      | (lookuplongvar_env_h
           (lower (lookupstrid_strenv_h (strenv_h_of_env_h E) strid))
          lv)))
lookuplongexcon_env_h_DEF
|- (!E ex.
     lookuplongexcon_env_h E (BASE ex) =
     lookupexcon_exconenv (exconenv_of_env_h E) ex) /\
   (!E lex strid.
     lookuplongexcon_env_h E (QUALIFIED strid lex) =
     ((lookupstrid_strenv_h (strenv_h_of_env_h E) strid = undefined)
      => undefined
      | (lookuplongexcon_env_h
           (lower (lookupstrid_strenv_h (strenv_h_of_env_h E) strid))
          lex)))
lookup_longstrid_basis_h_DEF
|- !x1 x2.
     lookup_longstrid_basis_h (BASIS_H x1 x2) =
     (\ls. lookuplongstrid_env_h x2 ls)
lookup_strid_int_h_DEF
|- (!x1 x2 x3 x4.
     lookup_strid_int_h (INT_H x1 x2 x3 x4) =
     (\strid. lookup_strid_strintenv_h x2 strid)) /\
   (!x1.
     lookup_strid_strintenv_h (STRINTENV_H x1) =
     (\strid. finmap_lookup strid x1))
lookup_longstrid_strintenv_h_DEF
|- (!i s.
     lookup_longstrid_strintenv_h i (BASE s) =
     lookup_strid_strintenv_h i s) /\
   (!i ls strid.
     lookup_longstrid_strintenv_h i (QUALIFIED strid ls) =
     ((lookup_strid_strintenv_h i strid = undefined)
      => undefined
      | (lookup_longstrid_strintenv_h
           (strintenv_h_of_int_h (lower (lookup_strid_strintenv_h i strid)))
          ls)))
lookup_longstrid_intbasis_h_DEF
|- !s i f ls.
     lookup_longstrid_intbasis_h (INTBASIS_H s i f) ls =
     lookup_longstrid_strintenv_h i ls
lookup_funid_funenv_h_DEF
|- !x1. lookup_funid_funenv_h (FUNENV_H x1) = (\funid. finmap_lookup funid x1)
lookup_funid_funintenv_h_DEF
|- !x1.
     lookup_funid_funintenv_h (FUNINTENV_H x1) =
     (\funid. finmap_lookup funid x1)
lookup_longfunid_int_h_DEF
|- (!i funid.
     lookup_longfunid_int_h i (BASE funid) =
     lookup_funid_funintenv_h (funintenv_h_of_int_h i) funid) /\
   (!i lf strid.
     lookup_longfunid_int_h i (QUALIFIED strid lf) =
     ((lookup_strid_strintenv_h (strintenv_h_of_int_h i) strid = undefined)
      => undefined
      | (lookup_longfunid_int_h
           (lower (lookup_strid_strintenv_h (strintenv_h_of_int_h i) strid))
          lf)))
lookup_longfunid_intbasis_h_DEF
|- (!IB funid.
     lookup_longfunid_intbasis_h IB (BASE funid) =
     lookup_funid_funintenv_h (funintenv_h_of_intbasis_h IB) funid) /\
   (!IB lf strid.
     lookup_longfunid_intbasis_h IB (QUALIFIED strid lf) =
     ((lookup_strid_strintenv_h (strintenv_h_of_intbasis_h IB) strid =
       undefined)
      => undefined
      | (lookup_longfunid_int_h
           (lower
             (lookup_strid_strintenv_h (strintenv_h_of_intbasis_h IB) strid))
          lf)))
lookup_funid_env_h_DEF
|- !x1 x2 x3 x4.
     lookup_funid_env_h (ENV_H x1 x2 x3 x4) =
     (\funid. lookup_funid_funenv_h x1 funid)
lookup_longfunid_env_h_DEF
|- (!E funid.
     lookup_longfunid_env_h E (BASE funid) =
     lookup_funid_funenv_h (funenv_h_of_env_h E) funid) /\
   (!E lf strid.
     lookup_longfunid_env_h E (QUALIFIED strid lf) =
     ((lookupstrid_strenv_h (strenv_h_of_env_h E) strid = undefined)
      => undefined
      | (lookup_longfunid_env_h
           (lower (lookupstrid_strenv_h (strenv_h_of_env_h E) strid))
          lf)))
lookup_longfunid_basis_h_DEF
|- !x1 x2.
     lookup_longfunid_basis_h (BASIS_H x1 x2) =
     (\funid. lookup_longfunid_env_h x2 funid)
lookup_sigid_sigenv_h_DEF
|- !l sigid. lookup_sigid_sigenv_h (SIGENV_H l) sigid = l sigid
lookup_sigid_intbasis_h_DEF
|- !si st f sigid.
     lookup_sigid_intbasis_h (INTBASIS_H si st f) sigid =
     lookup_sigid_sigenv_h si sigid
Inter_exbind_DEF
|- (!x1 x2.
     Inter_exbind (EXBIND1 x1 x2) = {x1} UNION Inter_exbind_option x2) /\
   (!x1 x2 x3.
     Inter_exbind (EXBIND2 x1 x2 x3) = {x1} UNION Inter_exbind_option x3) /\
   (Inter_exbind_option NONE = {}) /\
   (!x1. Inter_exbind_option (SOME x1) = Inter_exbind x1)
Inter_pat_DEF
|- (!x1. Inter_pat (ATPATpat x1) = Inter_atpat x1) /\
   (!x1 x2. Inter_pat (CONpat x1 x2) = Inter_atpat x2) /\
   (!x1 x2. Inter_pat (EXCONpat x1 x2) = Inter_atpat x2) /\
   (!x1 x2. Inter_pat (LAYEREDpat x1 x2) = {x1} UNION Inter_pat x2) /\
   (Inter_atpat WILDCARDatpat = {}) /\
   (!x1. Inter_atpat (SCONatpat x1) = {}) /\
   (!x1. Inter_atpat (VARatpat x1) = {x1}) /\
   (!x1. Inter_atpat (CONatpat x1) = {}) /\
   (!x1. Inter_atpat (EXCONatpat x1) = {}) /\
   (!x1. Inter_atpat (RECORDatpat x1) = Inter_patrow_option x1) /\
   (!x1. Inter_atpat (PARatpat x1) = Inter_pat x1) /\
   (Inter_patrow DOTDOTDOT = {}) /\
   (!x1 x2 x3.
     Inter_patrow (PATROW x1 x2 x3) =
     Inter_pat x2 UNION Inter_patrow_option x3) /\
   (Inter_patrow_option NONE = {}) /\
   (!x1. Inter_patrow_option (SOME x1) = Inter_patrow x1)
Inter_dec_DEF
|- (!x1. Inter_dec (VALdec x1) = (\IB. vars_in_int_h (Inter_valbind x1))) /\
   (!x1.
     Inter_dec (EXCEPTdec x1) = (\IB. excons_in_int_h (Inter_exbind x1))) /\
   (!x1 x2. Inter_dec (LOCALdec x1 x2) = (\IB. Inter_dec x2 IB)) /\
   (!x1.
     Inter_dec (OPENdec x1) =
     (\IB.
       nonempty_FOLDL_WITH_INIT add_int_h
         (nonempty_MAP lower
           (nonempty_MAP (lookup_longstrid_intbasis_h IB) x1)))) /\
   (!x1 x2.
     Inter_dec (SEQdec x1 x2) =
     (\IB. add_int_h (Inter_dec x1 IB) (Inter_dec x2 IB))) /\
   (Inter_dec EMPTYdec = (\IB. empty_int_h)) /\
   (!x1 x2 x3.
     Inter_valbind (PLAINvalbind x1 x2 x3) =
     Inter_pat x1 UNION Inter_valbind_option x3) /\
   (!x1. Inter_valbind (RECvalbind x1) = Inter_valbind x1) /\
   (Inter_valbind_option NONE = {}) /\
   (!x1. Inter_valbind_option (SOME x1) = Inter_valbind x1)
Inter_valdesc_DEF
|- (!x1 x2.
     Inter_valdesc (VARvaldesc x1 x2) = {x1} UNION Inter_valdesc_option x2) /\
   (Inter_valdesc_option NONE = {}) /\
   (!x1. Inter_valdesc_option (SOME x1) = Inter_valdesc x1)
Inter_exdesc_DEF
|- (!x1 x2.
     Inter_exdesc (EXCONexdesc x1 x2) = {x1} UNION Inter_exdesc_option x2) /\
   (Inter_exdesc_option NONE = {}) /\
   (!x1. Inter_exdesc_option (SOME x1) = Inter_exdesc x1)
Inter_sigexp_h_DEF
|- (!x1. Inter_sigexp_h (SIGsigexp_h x1) = (\IB. Inter_spec_h x1 IB)) /\
   (!x1.
     Inter_sigexp_h (SIGIDsigexp_h x1) =
     (\IB. lower (lookup_sigid_intbasis_h IB x1))) /\
   (!x1.
     Inter_spec_h (VALspec_h x1) = (\IB. vars_in_int_h (Inter_valdesc x1))) /\
   (!x1.
     Inter_spec_h (EXCEPTIONspec_h x1) =
     (\IB. excons_in_int_h (Inter_exdesc x1))) /\
   (!x1.
     Inter_spec_h (STRUCTUREspec_h x1) =
     (\IB. strintenv_h_in_int_h (Inter_strdesc_h x1 IB))) /\
   (!x1 x2.
     Inter_spec_h (LOCALspec_h x1 x2) =
     (\IB.
       Inter_spec_h x2
         (add_funintenv_h_to_intbasis_h
            (add_strintenv_h_to_intbasis_h IB
              (strintenv_h_of_int_h (Inter_spec_h x1 IB)))
           (funintenv_h_of_int_h (Inter_spec_h x1 IB))))) /\
   (!x1.
     Inter_spec_h (OPENspec_h x1) =
     (\IB.
       nonempty_FOLDL_WITH_INIT add_int_h
         (nonempty_MAP lower
           (nonempty_MAP (lookup_longstrid_intbasis_h IB) x1)))) /\
   (!x1.
     Inter_spec_h (INCLUDEspec_h x1) =
     (\IB.
       nonempty_FOLDL_WITH_INIT add_int_h
         (nonempty_MAP lower
           (nonempty_MAP (lookup_sigid_intbasis_h IB) x1)))) /\
   (Inter_spec_h EMPTYspec_h = (\IB. empty_int_h)) /\
   (!x1 x2.
     Inter_spec_h (SEQspec_h x1 x2) =
     (\IB.
       add_int_h (Inter_spec_h x1 IB)
         (Inter_spec_h x2
           (add_funintenv_h_to_intbasis_h
              (add_strintenv_h_to_intbasis_h IB
                (strintenv_h_of_int_h (Inter_spec_h x1 IB)))
             (funintenv_h_of_int_h (Inter_spec_h x1 IB)))))) /\
   (!x1 x2 x3 x4.
     Inter_spec_h (FUNCTORspec_h x1 x2 x3 x4) =
     (\IB.
       funintenv_h_in_int_h
         (funintenv_h_map x1
           (Inter_sigexp_h x4
             (add_strintenv_h_to_intbasis_h IB
               (strintenv_h_map x2 (Inter_sigexp_h x3 IB))))))) /\
   (!x1 x2 x3.
     Inter_strdesc_h (STRIDstrdesc_h x1 x2 x3) =
     (\IB.
       add_strintenv_h (strintenv_h_map x1 (Inter_sigexp_h x2 IB))
         (Inter_strdesc_h_option x3 IB))) /\
   (Inter_strdesc_h_option NONE = (\IB. empty_strintenv_h)) /\
   (!x1. Inter_strdesc_h_option (SOME x1) = Inter_strdesc_h x1)
Inter_strexp_h_DEF
|- (!x1. Inter_strexp_h (STRUCTstrexp_h x1) = (\IB. Inter_moddec_h x1 IB)) /\
   (!x1.
     Inter_strexp_h (LONGSTRIDstrexp_h x1) =
     (\IB. lower (lookup_longstrid_intbasis_h IB x1))) /\
   (!x1 x2.
     Inter_strexp_h (APPstrexp_h x1 x2) =
     (\IB. lower (lookup_longfunid_intbasis_h IB x1))) /\
   (!x1 x2.
     Inter_strexp_h (LETstrexp_h x1 x2) =
     (\IB.
       Inter_strexp_h x2
         (add_funintenv_h_to_intbasis_h
            (add_strintenv_h_to_intbasis_h IB
              (strintenv_h_of_int_h (Inter_moddec_h x1 IB)))
           (funintenv_h_of_int_h (Inter_moddec_h x1 IB))))) /\
   (!x1. Inter_moddec_h (DECmoddec_h x1) = (\IB. Inter_dec x1 IB)) /\
   (!x1.
     Inter_moddec_h (STRUCTUREmoddec_h x1) =
     (\IB. strintenv_h_in_int_h (Inter_strbind_h x1 IB))) /\
   (!x1 x2.
     Inter_moddec_h (LOCALmoddec_h x1 x2) =
     (\IB.
       Inter_moddec_h x2
         (add_funintenv_h_to_intbasis_h
            (add_strintenv_h_to_intbasis_h IB
              (strintenv_h_of_int_h (Inter_moddec_h x1 IB)))
           (funintenv_h_of_int_h (Inter_moddec_h x1 IB))))) /\
   (!x1.
     Inter_moddec_h (OPENmoddec_h x1) =
     (\IB.
       nonempty_FOLDL_WITH_INIT add_int_h
         (nonempty_MAP lower
           (nonempty_MAP (lookup_longstrid_intbasis_h IB) x1)))) /\
   (Inter_moddec_h EMPTYmoddec_h = (\IB. empty_int_h)) /\
   (!x1 x2.
     Inter_moddec_h (SEQmoddec_h x1 x2) =
     (\IB.
       add_int_h (Inter_moddec_h x1 IB)
         (Inter_moddec_h x2
           (add_funintenv_h_to_intbasis_h
              (add_strintenv_h_to_intbasis_h IB
                (strintenv_h_of_int_h (Inter_moddec_h x1 IB)))
             (funintenv_h_of_int_h (Inter_moddec_h x1 IB)))))) /\
   (!x1.
     Inter_moddec_h (FUNCTORmoddec_h x1) =
     (\IB. funintenv_h_in_int_h (Inter_funbind_h x1 IB))) /\
   (!x1 x2 x3 x4.
     Inter_strbind_h (BINDstrbind_h x1 x2 x3 x4) =
     (\IB.
       add_strintenv_h (strintenv_h_map x1 (Inter_sigexp_h_option x2 IB))
         (Inter_strbind_h_option x4 IB))) /\
   (!x1 x2 x3 x4 x5 x6.
     Inter_funbind_h (BINDfunbind_h x1 x2 x3 x4 x5 x6) =
     (\IB.
       add_funintenv_h (Inter_funbind_h_option x6 IB)
         (funintenv_h_map x1
           (Inter_sigexp_h_option x4
             (add_strintenv_h_to_intbasis_h IB
               (strintenv_h_map x2 (Inter_sigexp_h x3 IB))))))) /\
   (!x1 x2.
     Inter_funbind_h (REBINDfunbind_h x1 x2) =
     (\IB. funintenv_h_map x1 (lower (lookup_longfunid_intbasis_h IB x2)))) /\
   (Inter_sigexp_h_option NONE = (\IB. empty_int_h)) /\
   (!x1. Inter_sigexp_h_option (SOME x1) = Inter_sigexp_h x1) /\
   (Inter_strbind_h_option NONE = (\IB. empty_strintenv_h)) /\
   (!x1. Inter_strbind_h_option (SOME x1) = Inter_strbind_h x1) /\
   (Inter_funbind_h_option NONE = (\IB. empty_funintenv_h)) /\
   (!x1. Inter_funbind_h_option (SOME x1) = Inter_funbind_h x1)
Inter_h_DEF
|- (!x1.
     strintenv_h_from_strenv_h (STRENV_H x1) =
     STRINTENV_H (strint_h_finmap_from_strenv_h_finmap x1)) /\
   (!x1.
     strint_h_finmap_from_strenv_h_finmap (FINMAP x1) =
     FINMAP (strint_h_list_from_strenv_h_list x1)) /\
   (strint_h_list_from_strenv_h_list [] = []) /\
   (!x1 x2.
     strint_h_list_from_strenv_h_list (CONS x1 x2) =
     CONS (strid_int_h_from_strenv_h_pair x1)
       (strint_h_list_from_strenv_h_list x2)) /\
   (!x1 x2. strid_int_h_from_strenv_h_pair (x1,x2) = (x1,Inter_h x2)) /\
   (!x1.
     funintenv_h_from_funenv_h (FUNENV_H x1) =
     FUNINTENV_H (funint_h_finmap_from_funenv_finmap x1)) /\
   (!x1.
     funint_h_finmap_from_funenv_finmap (FINMAP x1) =
     FINMAP (funint_h_list_from_funenv_list x1)) /\
   (funint_h_list_from_funenv_list [] = []) /\
   (!x1 x2.
     funint_h_list_from_funenv_list (CONS x1 x2) =
     CONS (funid_int_h_from_funid_funclos_h_pair x1)
       (funint_h_list_from_funenv_list x2)) /\
   (!x1 x2.
     funid_int_h_from_funid_funclos_h_pair (x1,x2) =
     (x1,Inter_funclos_h x2)) /\
   (!x1 x2 x3 x4 x5.
     Inter_funclos_h (FUNCLOS_H x1 x2 x3 x4 x5) =
     ((x4 = NONE)
      => (Inter_strexp_h x3 (Inter_basis_h x5))
      | (SOME_arg x4))) /\
   (!x1 x2 x3 x4.
     Inter_h (ENV_H x1 x2 x3 x4) =
     INT_H (funintenv_h_from_funenv_h x1) (strintenv_h_from_strenv_h x2)
       (vars_from_varenv x3)
       (excons_from_exconenv x4)) /\
   (!x1 x2.
     Inter_basis_h (BASIS_H x1 x2) =
     INTBASIS_H x1 (strintenv_h_of_int_h (Inter_h x2))
       (funintenv_h_of_int_h (Inter_h x2)))
cut_env_h_DEF
|- (!x1 x2 x3 x4.
     cut_env_h (ENV_H x1 x2 x3 x4) =
     (\int_h.
       ENV_H (cut_funenv_h x1 (funintenv_h_of_int_h int_h))
         (cut_strenv_h x2 (strintenv_h_of_int_h int_h))
         (cut_varenv x3 (vars_of_int_h int_h))
         (cut_exconenv x4 (excons_of_int_h int_h)))) /\
   (!x1.
     cut_strenv_h (STRENV_H x1) =
     (\strintenv_h. STRENV_H (cut_strenv_h_finmap x1 strintenv_h))) /\
   (!x1.
     cut_strenv_h_finmap (FINMAP x1) =
     (\strintenv_h. FINMAP (cut_strenv_h_list x1 strintenv_h))) /\
   (cut_strenv_h_list [] = (\strintenv_h. [])) /\
   (!x1 x2.
     cut_strenv_h_list (CONS x1 x2) =
     (\strintenv_h.
       (cut_strenv_h_pair x1 strintenv_h = undefined)
       => (cut_strenv_h_list x2 strintenv_h)
       | (CONS (lower (cut_strenv_h_pair x1 strintenv_h))
           (cut_strenv_h_list x2 strintenv_h)))) /\
   (!x1 x2.
     cut_strenv_h_pair (x1,x2) =
     (\strintenv_h.
       (lookup_strid_strintenv_h strintenv_h x1 = undefined)
       => undefined
       | (lift
           (x1,
            cut_env_h x2
              (lower (lookup_strid_strintenv_h strintenv_h x1)))))) /\
   (!x1.
     cut_funenv_h (FUNENV_H x1) =
     (\funintenv_h. FUNENV_H (cut_funenv_h_finmap x1 funintenv_h))) /\
   (!x1.
     cut_funenv_h_finmap (FINMAP x1) =
     (\funintenv_h. FINMAP (cut_funenv_h_list x1 funintenv_h))) /\
   (cut_funenv_h_list [] = (\funintenv_h. [])) /\
   (!x1 x2.
     cut_funenv_h_list (CONS x1 x2) =
     (\funintenv_h.
       (cut_funenv_h_pair x1 funintenv_h = undefined)
       => (cut_funenv_h_list x2 funintenv_h)
       | (CONS (lower (cut_funenv_h_pair x1 funintenv_h))
           (cut_funenv_h_list x2 funintenv_h)))) /\
   (!x1 x2.
     cut_funenv_h_pair (x1,x2) =
     (\funintenv_h.
       (lookup_funid_funintenv_h funintenv_h x1 = undefined)
       => undefined
       | (lift
           (x1,
            cut_funclos_h x2
              (lower (lookup_funid_funintenv_h funintenv_h x1)))))) /\
   (!x1 x2 x3 x4 x5.
     cut_funclos_h (FUNCLOS_H x1 x2 x3 x4 x5) =
     (\i. FUNCLOS_H x1 x2 x3 (SOME i) x5))
cut_env_h_to_env_DEF
|- (!x1 x2 x3 x4.
     cut_env_h_to_env (ENV_H x1 x2 x3 x4) =
     ENV (cut_strenv_h_to_strenv x2) x3 x4) /\
   (!x1.
     cut_strenv_h_to_strenv (STRENV_H x1) =
     STRENV (cut_strenv_h_finmap_to_strenv_finmap x1)) /\
   (!x1.
     cut_strenv_h_finmap_to_strenv_finmap (FINMAP x1) =
     FINMAP (cut_strenv_h_list_to_strenv_list x1)) /\
   (cut_strenv_h_list_to_strenv_list [] = []) /\
   (!x1 x2.
     cut_strenv_h_list_to_strenv_list (CONS x1 x2) =
     CONS (cut_strenv_h_pair_to_strenv_pair x1)
       (cut_strenv_h_list_to_strenv_list x2)) /\
   (!x1 x2.
     cut_strenv_h_pair_to_strenv_pair (x1,x2) = (x1,cut_env_h_to_env x2))
env_in_env_h_DEF
|- (!x1 x2 x3.
     env_in_env_h (ENV x1 x2 x3) =
     ENV_H empty_funenv_h (strenv_in_strenv_h x1) x2 x3) /\
   (!x1.
     strenv_in_strenv_h (STRENV x1) =
     STRENV_H (strenv_finmap_in_strenv_h_finmap x1)) /\
   (!x1.
     strenv_finmap_in_strenv_h_finmap (FINMAP x1) =
     FINMAP (strenv_list_in_strenv_h_list x1)) /\
   (strenv_list_in_strenv_h_list [] = []) /\
   (!x1 x2.
     strenv_list_in_strenv_h_list (CONS x1 x2) =
     CONS (strenv_pair_in_strenv_h_pair x1)
       (strenv_list_in_strenv_h_list x2)) /\
   (!x1 x2. strenv_pair_in_strenv_h_pair (x1,x2) = (x1,env_in_env_h x2))
HOFML_eval_signatures_pred_DEF
|- !eval_sigexp_h eval_spec_h eval_strdesc_h.
     HOFML_eval_signatures_pred eval_sigexp_h eval_spec_h eval_strdesc_h =
     (!i IB spec s1 s2.
       eval_spec_h spec s1 IB s2 i ==>
       eval_sigexp_h (SIGsigexp_h spec) s1 IB s2 i) /\
     (!i IB s sigid.
       (lookup_sigid_intbasis_h IB sigid = lift i) ==>
       eval_sigexp_h (SIGIDsigexp_h sigid) s IB s i) /\
     (!IB valdesc vars s1 s2.
       eval_valdesc valdesc s1 s2 vars ==>
       eval_spec_h (VALspec_h valdesc) s1 IB s2 (vars_in_int_h vars)) /\
     (!IB excons exdesc s1 s2.
       eval_exdesc exdesc s1 s2 excons ==>
       eval_spec_h (EXCEPTIONspec_h exdesc) s1 IB s2
         (excons_in_int_h excons)) /\
     (!IB SIE strdesc_h s1 s2.
       eval_strdesc_h strdesc_h s1 IB s2 SIE ==>
       eval_spec_h (STRUCTUREspec_h strdesc_h) s1 IB s2
         (strintenv_h_in_int_h SIE)) /\
     (!IB I1 I2 spec_h1 spec_h2 s1 s2 s3.
       eval_spec_h spec_h1 s1 IB s2 I1 /\
       eval_spec_h spec_h2 s2
         (add_strintenv_h_to_intbasis_h IB (strintenv_h_of_int_h I1))
         s3
         I2 ==>
       eval_spec_h (LOCALspec_h spec_h1 spec_h2) s1 IB s3 I2) /\
     (!IB nonempty_int_h_list nonempty_lift_int_h_list nonempty_longstrid_list
       s.
       (nonempty_MAP (lookup_longstrid_intbasis_h IB)
          nonempty_longstrid_list =
        nonempty_lift_int_h_list) /\
       (nonempty_MAP lift nonempty_int_h_list = nonempty_lift_int_h_list) ==>
       eval_spec_h (OPENspec_h nonempty_longstrid_list) s IB s
         (nonempty_FOLDL_WITH_INIT add_int_h nonempty_int_h_list)) /\
     (!IB nonempty_int_h_list nonempty_lift_int_h_list nonempty_sigid_list s.
       (nonempty_MAP (lookup_sigid_intbasis_h IB) nonempty_sigid_list =
        nonempty_lift_int_h_list) /\
       (nonempty_MAP lift nonempty_int_h_list = nonempty_lift_int_h_list) ==>
       eval_spec_h (INCLUDEspec_h nonempty_sigid_list) s IB s
         (nonempty_FOLDL_WITH_INIT add_int_h nonempty_int_h_list)) /\
     (!IB s. eval_spec_h EMPTYspec_h s IB s empty_int_h) /\
     (!IB I1 I2 spec_h1 spec_h2 s1 s2 s3.
       eval_spec_h spec_h1 s1 IB s2 I1 /\
       eval_spec_h spec_h2 s2
         (add_strintenv_h_to_intbasis_h IB (strintenv_h_of_int_h I1))
         s3
         I2 ==>
       eval_spec_h (SEQspec_h spec_h1 spec_h2) s1 IB s3 (add_int_h I1 I2)) /\
     (!IB I1 I2 funid sigexp_h sigexp_h' strid s1 s2 s3.
       eval_sigexp_h sigexp_h s1 IB s2 I1 /\
       eval_sigexp_h sigexp_h' s2
         (add_strintenv_h_to_intbasis_h IB (strintenv_h_map strid I1))
         s3
         I2 ==>
       eval_spec_h (FUNCTORspec_h funid strid sigexp_h sigexp_h') s1 IB s3
         (funintenv_h_in_int_h (funintenv_h_map funid I1))) /\
     (!i IB sigexp_h strid s1 s2.
       eval_sigexp_h sigexp_h s1 IB s2 i ==>
       eval_strdesc_h (STRIDstrdesc_h strid sigexp_h NONE) s1 IB s2
         (strintenv_h_map strid i)) /\
     (!i IB SIE sigexp_h strdesc_h strid s1 s2 s3.
       eval_sigexp_h sigexp_h s1 IB s2 i /\
       eval_strdesc_h strdesc_h s2 IB s3 SIE ==>
       eval_strdesc_h (STRIDstrdesc_h strid sigexp_h (SOME strdesc_h)) s1 IB
         s3
         (add_strintenv_h (strintenv_h_map strid i) SIE))
eval_sigexp_h_DEF
|- !sigexp_h s1 IB s2 i.
     eval_sigexp_h sigexp_h s1 IB s2 i =
     (!poss_eval_sigexp_h poss_eval_spec_h poss_eval_strdesc_h.
       HOFML_eval_signatures_pred poss_eval_sigexp_h poss_eval_spec_h
         poss_eval_strdesc_h ==>
       poss_eval_sigexp_h sigexp_h s1 IB s2 i)
eval_spec_h_DEF
|- !spec_h s1 IB s2 i.
     eval_spec_h spec_h s1 IB s2 i =
     (!poss_eval_sigexp_h poss_eval_spec_h poss_eval_strdesc_h.
       HOFML_eval_signatures_pred poss_eval_sigexp_h poss_eval_spec_h
         poss_eval_strdesc_h ==>
       poss_eval_spec_h spec_h s1 IB s2 i)
eval_strdesc_h_DEF
|- !strdesc_h s1 IB s2 int_h.
     eval_strdesc_h strdesc_h s1 IB s2 int_h =
     (!poss_eval_sigexp_h poss_eval_spec_h poss_eval_strdesc_h.
       HOFML_eval_signatures_pred poss_eval_sigexp_h poss_eval_spec_h
         poss_eval_strdesc_h ==>
       poss_eval_strdesc_h strdesc_h s1 IB s2 int_h)
eval_sigbind_h_DEF
|- ((!sigexp_h s1 IB s2 i.
      eval_sigexp_h sigexp_h s1 IB s2 i ==>
      (!sigid.
        eval_sigbind_h (BINDsigbind_h sigid sigexp_h NONE) s1 IB s2
          (sigenv_h_map sigid i))) /\
    (!sigbind_h IB s3 G sigexp_h s1 i.
      (?s2.
        eval_sigbind_h sigbind_h s2 IB s3 G /\
        eval_sigexp_h sigexp_h s1 IB s2 i) ==>
      (!sigid.
        eval_sigbind_h (BINDsigbind_h sigid sigexp_h (SOME sigbind_h)) s1 IB
          s3
          (add_sigenv_h (sigenv_h_map sigid i) G)))) /\
   (!P.
     (!sigexp_h s1 IB s2 i.
       eval_sigexp_h sigexp_h s1 IB s2 i ==>
       (!sigid.
         P (BINDsigbind_h sigid sigexp_h NONE) s1 IB s2
           (sigenv_h_map sigid i))) /\
     (!sigbind_h IB s3 G sigexp_h s1 i.
       (?s2. P sigbind_h s2 IB s3 G /\ eval_sigexp_h sigexp_h s1 IB s2 i) ==>
       (!sigid.
         P (BINDsigbind_h sigid sigexp_h (SOME sigbind_h)) s1 IB s3
           (add_sigenv_h (sigenv_h_map sigid i) G))) ==>
     (!sigbind_h s1 IB s2 G.
       eval_sigbind_h sigbind_h s1 IB s2 G ==> P sigbind_h s1 IB s2 G))
eval_sigdec_h_DEF
|- ((!sigbind_h s1 IB s2 G.
      eval_sigbind_h sigbind_h s1 IB s2 G ==>
      eval_sigdec_h (SIGNATUREsigdec_h sigbind_h) s1 IB s2 G) /\
    (!s IB. eval_sigdec_h EMPTYsigdec_h s IB s empty_sigenv_h) /\
    (!sigdec_h1 s1 IB G1 sigdec_h2 s3 G2.
      (?s2.
        eval_sigdec_h sigdec_h1 s1 IB s2 G1 /\
        eval_sigdec_h sigdec_h2 s2 (add_sigenv_h_to_intbasis_h IB G1) s3
          G2) ==>
      eval_sigdec_h (SEQsigdec_h sigdec_h1 sigdec_h2) s1 IB s3
        (add_sigenv_h G1 G2))) /\
   (!P.
     (!sigbind_h s1 IB s2 G.
       eval_sigbind_h sigbind_h s1 IB s2 G ==>
       P (SIGNATUREsigdec_h sigbind_h) s1 IB s2 G) /\
     (!s IB. P EMPTYsigdec_h s IB s empty_sigenv_h) /\
     (!sigdec_h1 s1 IB G1 sigdec_h2 s3 G2.
       (?s2.
         P sigdec_h1 s1 IB s2 G1 /\
         P sigdec_h2 s2 (add_sigenv_h_to_intbasis_h IB G1) s3 G2) ==>
       P (SEQsigdec_h sigdec_h1 sigdec_h2) s1 IB s3 (add_sigenv_h G1 G2)) ==>
     (!sigdec_h s1 IB s2 G.
       eval_sigdec_h sigdec_h s1 IB s2 G ==> P sigdec_h s1 IB s2 G))
HOFML_eval_structures_pred_DEF
|- !eval_strexp_h eval_moddec_h eval_strbind_h eval_funbind_h.
     HOFML_eval_structures_pred eval_strexp_h eval_moddec_h eval_strbind_h
       eval_funbind_h =
     (!B E moddec_h s1 s2.
       eval_moddec_h moddec_h s1 B s2 (ENVep_h E) ==>
       eval_strexp_h (STRUCTstrexp_h moddec_h) s1 B s2 (ENVep_h E)) /\
     (!B p moddec_h s1 s2.
       eval_moddec_h moddec_h s1 B s2 (PACKep_h p) ==>
       eval_strexp_h (STRUCTstrexp_h moddec_h) s1 B s2 (PACKep_h p)) /\
     (!B E longstrid s.
       (lift E = lookup_longstrid_basis_h B longstrid) ==>
       eval_strexp_h (LONGSTRIDstrexp_h longstrid) s B s (ENVep_h E)) /\
     (!B B' E E' i longfunid strexp_h strexp_h' strid s1 s2 s3.
       (lift (FUNCLOS_H strid i strexp_h' NONE B') =
        lookup_longfunid_basis_h B longfunid) /\
       eval_strexp_h strexp_h s1 B s2 (ENVep_h E) /\
       eval_strexp_h strexp_h' s2
         (add_basis_h B'
           (strenv_h_in_basis_h (strenv_h_map strid (cut_env_h E i))))
         s3
         (ENVep_h E') ==>
       eval_strexp_h (APPstrexp_h longfunid strexp_h) s1 B s3 (ENVep_h E')) /\
     (!B B' i longfunid p strexp_h strexp_h' strid s1 s2.
       (lift (FUNCLOS_H strid i strexp_h' NONE B') =
        lookup_longfunid_basis_h B longfunid) /\
       eval_strexp_h strexp_h s1 B s2 (PACKep_h p) ==>
       eval_strexp_h (APPstrexp_h longfunid strexp_h) s1 B s2 (PACKep_h p)) /\
     (!B B' E i longfunid p strexp_h strexp_h' strid s1 s2 s3.
       (lift (FUNCLOS_H strid i strexp_h' NONE B') =
        lookup_longfunid_basis_h B longfunid) /\
       eval_strexp_h strexp_h s1 B s2 (ENVep_h E) /\
       eval_strexp_h strexp_h' s2
         (add_basis_h B'
           (strenv_h_in_basis_h (strenv_h_map strid (cut_env_h E i))))
         s3
         (PACKep_h p) ==>
       eval_strexp_h (APPstrexp_h longfunid strexp_h) s1 B s3 (PACKep_h p)) /\
     (!B B' E E' i i' longfunid strexp_h strexp_h' strid s1 s2 s3.
       (lift (FUNCLOS_H strid i strexp_h' (SOME i') B') =
        lookup_longfunid_basis_h B longfunid) /\
       eval_strexp_h strexp_h s1 B s2 (ENVep_h E) /\
       eval_strexp_h strexp_h' s2
         (add_basis_h B'
           (strenv_h_in_basis_h (strenv_h_map strid (cut_env_h E i))))
         s3
         (ENVep_h E') ==>
       eval_strexp_h (APPstrexp_h longfunid strexp_h) s1 B s3
         (ENVep_h (cut_env_h E' i'))) /\
     (!B B' i i' longfunid p strexp_h strexp_h' strid s1 s2.
       (lift (FUNCLOS_H strid i strexp_h' (SOME i') B') =
        lookup_longfunid_basis_h B longfunid) /\
       eval_strexp_h strexp_h s1 B s2 (PACKep_h p) ==>
       eval_strexp_h (APPstrexp_h longfunid strexp_h) s1 B s2 (PACKep_h p)) /\
     (!B B' E i i' longfunid p strexp_h strexp_h' strid s1 s2 s3.
       (lift (FUNCLOS_H strid i strexp_h' (SOME i') B') =
        lookup_longfunid_basis_h B longfunid) /\
       eval_strexp_h strexp_h s1 B s2 (ENVep_h E) /\
       eval_strexp_h strexp_h' s2
         (add_basis_h B'
           (strenv_h_in_basis_h (strenv_h_map strid (cut_env_h E i))))
         s3
         (PACKep_h p) ==>
       eval_strexp_h (APPstrexp_h longfunid strexp_h) s1 B s3 (PACKep_h p)) /\
     (!B E E' moddec_h strexp_h s1 s2 s3.
       eval_moddec_h moddec_h s1 B s2 (ENVep_h E) /\
       eval_strexp_h strexp_h s2 (add_env_h_to_basis_h B E) s3
         (ENVep_h E') ==>
       eval_strexp_h (LETstrexp_h moddec_h strexp_h) s1 B s3 (ENVep_h E')) /\
     (!B p moddec_h strexp_h s1 s2.
       eval_moddec_h moddec_h s1 B s2 (PACKep_h p) ==>
       eval_strexp_h (LETstrexp_h moddec_h strexp_h) s1 B s2 (PACKep_h p)) /\
     (!B E p moddec_h strexp_h s1 s2 s3.
       eval_moddec_h moddec_h s1 B s2 (ENVep_h E) /\
       eval_strexp_h strexp_h s2 (add_env_h_to_basis_h B E) s3
         (PACKep_h p) ==>
       eval_strexp_h (LETstrexp_h moddec_h strexp_h) s1 B s3 (PACKep_h p)) /\
     (!B E' dec s1 s2.
       eval_dec dec s1 (cut_env_h_to_env (env_h_of_basis_h B)) s2
         (ENVep E') ==>
       eval_moddec_h (DECmoddec_h dec) s1 B s2 (ENVep_h (env_in_env_h E'))) /\
     (!B dec p s1 s2.
       eval_dec dec s1 (cut_env_h_to_env (env_h_of_basis_h B)) s2
         (PACKep p) ==>
       eval_moddec_h (DECmoddec_h dec) s1 B s2 (PACKep_h p)) /\
     (!B SE strbind_h s1 s2.
       eval_strbind_h strbind_h s1 B s2 (STRENVsp_h SE) ==>
       eval_moddec_h (STRUCTUREmoddec_h strbind_h) s1 B s2
         (ENVep_h (strenv_h_in_env_h SE))) /\
     (!B p strbind_h s1 s2.
       eval_strbind_h strbind_h s1 B s2 (PACKsp_h p) ==>
       eval_moddec_h (STRUCTUREmoddec_h strbind_h) s1 B s2 (PACKep_h p)) /\
     (!B E1 E2 moddec_h1 moddec_h2 s1 s2 s3.
       eval_moddec_h moddec_h1 s1 B s2 (ENVep_h E1) /\
       eval_moddec_h moddec_h2 s2 (add_env_h_to_basis_h B E1) s3
         (ENVep_h E2) ==>
       eval_moddec_h (LOCALmoddec_h moddec_h1 moddec_h2) s1 B s3
         (ENVep_h E2)) /\
     (!B p moddec_h1 moddec_h2 s1 s2.
       eval_moddec_h moddec_h1 s1 B s2 (PACKep_h p) ==>
       eval_moddec_h (LOCALmoddec_h moddec_h1 moddec_h2) s1 B s2
         (PACKep_h p)) /\
     (!B E p moddec_h1 moddec_h2 s1 s2 s3.
       eval_moddec_h moddec_h1 s1 B s2 (ENVep_h E) /\
       eval_moddec_h moddec_h2 s2 (add_env_h_to_basis_h B E) s3
         (PACKep_h p) ==>
       eval_moddec_h (LOCALmoddec_h moddec_h1 moddec_h2) s1 B s3
         (PACKep_h p)) /\
     (!B E_1_n longstrid_1_n s.
       (nonempty_MAP (lookup_longstrid_basis_h B) longstrid_1_n =
        nonempty_MAP lift E_1_n) ==>
       eval_moddec_h (OPENmoddec_h longstrid_1_n) s B s
         (ENVep_h (nonempty_FOLDL_WITH_INIT add_env_h E_1_n))) /\
     (!B s. eval_moddec_h EMPTYmoddec_h s B s (ENVep_h empty_env_h)) /\
     (!B E1 E2 moddec_h1 moddec_h2 s1 s2 s3.
       eval_moddec_h moddec_h1 s1 B s2 (ENVep_h E1) /\
       eval_moddec_h moddec_h2 s2 (add_env_h_to_basis_h B E1) s3
         (ENVep_h E2) ==>
       eval_moddec_h (SEQmoddec_h moddec_h1 moddec_h2) s1 B s3
         (ENVep_h (add_env_h E1 E2))) /\
     (!B p moddec_h1 moddec_h2 s1 s2.
       eval_moddec_h moddec_h1 s1 B s2 (PACKep_h p) ==>
       eval_moddec_h (SEQmoddec_h moddec_h1 moddec_h2) s1 B s2
         (PACKep_h p)) /\
     (!B E p moddec_h1 moddec_h2 s1 s2 s3.
       eval_moddec_h moddec_h1 s1 B s2 (ENVep_h E) /\
       eval_moddec_h moddec_h2 s2 (add_env_h_to_basis_h B E) s3
         (PACKep_h p) ==>
       eval_moddec_h (SEQmoddec_h moddec_h1 moddec_h2) s1 B s3
         (PACKep_h p)) /\
     (!B f funbind_h s1 s2.
       eval_funbind_h funbind_h s1 B s2 f ==>
       eval_moddec_h (FUNCTORmoddec_h funbind_h) s1 B s2
         (ENVep_h (funenv_h_in_env_h f))) /\
     (!B E strexp_h strid s1 s2.
       eval_strexp_h strexp_h s1 B s2 (ENVep_h E) ==>
       eval_strbind_h (BINDstrbind_h strid NONE strexp_h NONE) s1 B s2
         (STRENVsp_h (strenv_h_map strid E))) /\
     (!B p strexp_h strid s1 s2.
       eval_strexp_h strexp_h s1 B s2 (PACKep_h p) ==>
       eval_strbind_h (BINDstrbind_h strid NONE strexp_h NONE) s1 B s2
         (PACKsp_h p)) /\
     (!B E i sigexp_h strexp_h strid s1 s2 s3.
       eval_strexp_h strexp_h s1 B s2 (ENVep_h E) /\
       eval_sigexp_h sigexp_h s2 (Inter_basis_h B) s3 i ==>
       eval_strbind_h (BINDstrbind_h strid (SOME sigexp_h) strexp_h NONE) s1 B
         s3
         (STRENVsp_h (strenv_h_map strid (cut_env_h E i)))) /\
     (!B p sigexp_h strexp_h strid s1 s2.
       eval_strexp_h strexp_h s1 B s2 (PACKep_h p) ==>
       eval_strbind_h (BINDstrbind_h strid (SOME sigexp_h) strexp_h NONE) s1 B
         s2
         (PACKsp_h p)) /\
     (!B E SE strbind_h strexp_h strid s1 s2 s3.
       eval_strexp_h strexp_h s1 B s2 (ENVep_h E) /\
       eval_strbind_h strbind_h s2 B s3 (STRENVsp_h SE) ==>
       eval_strbind_h (BINDstrbind_h strid NONE strexp_h (SOME strbind_h)) s1
         B
         s3
         (STRENVsp_h (add_strenv_h (strenv_h_map strid E) SE))) /\
     (!B p strbind_h strexp_h strid s1 s2.
       eval_strexp_h strexp_h s1 B s2 (PACKep_h p) ==>
       eval_strbind_h (BINDstrbind_h strid NONE strexp_h (SOME strbind_h)) s1
         B
         s2
         (PACKsp_h p)) /\
     (!B E p strbind_h strexp_h strid s1 s2 s3.
       eval_strexp_h strexp_h s1 B s2 (ENVep_h E) /\
       eval_strbind_h strbind_h s2 B s3 (PACKsp_h p) ==>
       eval_strbind_h (BINDstrbind_h strid NONE strexp_h (SOME strbind_h)) s1
         B
         s3
         (PACKsp_h p)) /\
     (!B E i SE sigexp_h strbind_h strexp_h strid s1 s2 s3 s4.
       eval_strexp_h strexp_h s1 B s2 (ENVep_h E) /\
       eval_sigexp_h sigexp_h s2 (Inter_basis_h B) s3 i /\
       eval_strbind_h strbind_h s3 B s4 (STRENVsp_h SE) ==>
       eval_strbind_h
         (BINDstrbind_h strid (SOME sigexp_h) strexp_h (SOME strbind_h))
         s1
         B
         s4
         (STRENVsp_h
           (add_strenv_h (strenv_h_map strid (cut_env_h E i)) SE))) /\
     (!B p sigexp_h strbind_h strexp_h strid s1 s2.
       eval_strexp_h strexp_h s1 B s2 (PACKep_h p) ==>
       eval_strbind_h
         (BINDstrbind_h strid (SOME sigexp_h) strexp_h (SOME strbind_h))
         s1
         B
         s2
         (PACKsp_h p)) /\
     (!B E i p sigexp_h strbind_h strexp_h strid s1 s2 s3 s4.
       eval_strexp_h strexp_h s1 B s2 (ENVep_h E) /\
       eval_sigexp_h sigexp_h s2 (Inter_basis_h B) s3 i /\
       eval_strbind_h strbind_h s3 B s4 (PACKsp_h p) ==>
       eval_strbind_h
         (BINDstrbind_h strid (SOME sigexp_h) strexp_h (SOME strbind_h))
         s1
         B
         s4
         (PACKsp_h p)) /\
     (!B funid i sigexp_h strexp_h strid s1 s2.
       eval_sigexp_h sigexp_h s1 (Inter_basis_h B) s2 i ==>
       eval_funbind_h (BINDfunbind_h funid strid sigexp_h NONE strexp_h NONE)
         s1
         B
         s2
         (funenv_h_map funid (FUNCLOS_H strid i strexp_h NONE B))) /\
     (!B funid i i' sigexp_h sigexp_h' strexp_h strid s1 s2 s3.
       eval_sigexp_h sigexp_h s1 (Inter_basis_h B) s2 i /\
       eval_sigexp_h sigexp_h' s2
         (add_strintenv_h_to_intbasis_h (Inter_basis_h B)
           (strintenv_h_map strid i))
         s3
         i' ==>
       eval_funbind_h
         (BINDfunbind_h funid strid sigexp_h (SOME sigexp_h') strexp_h NONE)
         s1
         B
         s3
         (funenv_h_map funid (FUNCLOS_H strid i strexp_h (SOME i') B))) /\
     (!B funbind_h funid f i sigexp_h strexp_h strid s1 s2 s3.
       eval_sigexp_h sigexp_h s1 (Inter_basis_h B) s2 i /\
       eval_funbind_h funbind_h s2 B s3 f ==>
       eval_funbind_h
         (BINDfunbind_h funid strid sigexp_h NONE strexp_h (SOME funbind_h))
         s1
         B
         s3
         (add_funenv_h
            (funenv_h_map funid (FUNCLOS_H strid i strexp_h NONE B))
           f)) /\
     (!B funbind_h funid f i i' sigexp_h sigexp_h' strexp_h strid s1 s2 s3 s4.
       eval_sigexp_h sigexp_h s1 (Inter_basis_h B) s2 i /\
       eval_sigexp_h sigexp_h' s2
         (add_strintenv_h_to_intbasis_h (Inter_basis_h B)
           (strintenv_h_map strid i))
         s3
         i' /\
       eval_funbind_h funbind_h s3 B s4 f ==>
       eval_funbind_h
         (BINDfunbind_h funid strid sigexp_h (SOME sigexp_h') strexp_h
           (SOME funbind_h))
         s1
         B
         s4
         (add_funenv_h
            (funenv_h_map funid (FUNCLOS_H strid i strexp_h (SOME i') B))
           f)) /\
     (!B funclos_h funid longfunid s.
       (lookup_longfunid_basis_h B longfunid = lift funclos_h) ==>
       eval_funbind_h (REBINDfunbind_h funid longfunid) s B s
         (funenv_h_map funid funclos_h))
eval_strexp_h_DEF
|- !strexp_h s1 B s2 ep.
     eval_strexp_h strexp_h s1 B s2 ep =
     (!poss_eval_strexp_h poss_eval_moddec_h poss_eval_strbind_h
       poss_eval_funbind_h.
       HOFML_eval_structures_pred poss_eval_strexp_h poss_eval_moddec_h
         poss_eval_strbind_h
         poss_eval_funbind_h ==>
       poss_eval_strexp_h strexp_h s1 B s2 ep)
eval_moddec_h_DEF
|- !moddec_h s1 B s2 ep.
     eval_moddec_h moddec_h s1 B s2 ep =
     (!poss_eval_strexp_h poss_eval_moddec_h poss_eval_strbind_h
       poss_eval_funbind_h.
       HOFML_eval_structures_pred poss_eval_strexp_h poss_eval_moddec_h
         poss_eval_strbind_h
         poss_eval_funbind_h ==>
       poss_eval_moddec_h moddec_h s1 B s2 ep)
eval_strbind_h_DEF
|- !strbind_h s1 B s2 sep.
     eval_strbind_h strbind_h s1 B s2 sep =
     (!poss_eval_strexp_h poss_eval_moddec_h poss_eval_strbind_h
       poss_eval_funbind_h.
       HOFML_eval_structures_pred poss_eval_strexp_h poss_eval_moddec_h
         poss_eval_strbind_h
         poss_eval_funbind_h ==>
       poss_eval_strbind_h strbind_h s1 B s2 sep)
eval_funbind_h_DEF
|- !funbind_h s1 B s2 fe.
     eval_funbind_h funbind_h s1 B s2 fe =
     (!poss_eval_strexp_h poss_eval_moddec_h poss_eval_strbind_h
       poss_eval_funbind_h.
       HOFML_eval_structures_pred poss_eval_strexp_h poss_eval_moddec_h
         poss_eval_strbind_h
         poss_eval_funbind_h ==>
       poss_eval_funbind_h funbind_h s1 B s2 fe)
eval_topdec_h_DEF
|- ((!moddec_h s1 B s2 E.
      eval_moddec_h moddec_h s1 B s2 (ENVep_h E) ==>
      eval_topdec_h (MODDEC_H moddec_h) s1 B s2
        (BASISbp_h (env_h_in_basis_h E))) /\
    (!moddec_h s1 B s2 p.
      eval_moddec_h moddec_h s1 B s2 (PACKep_h p) ==>
      eval_topdec_h (MODDEC_H moddec_h) s1 B s2 (PACKbp_h p)) /\
    (!sigdec_h s1 B s2 G.
      eval_sigdec_h sigdec_h s1 (Inter_basis_h B) s2 G ==>
      eval_topdec_h (SIGDEC_H sigdec_h) s1 B s2
        (BASISbp_h (sigenv_h_in_basis_h G)))) /\
   (!P.
     (!moddec_h s1 B s2 E.
       eval_moddec_h moddec_h s1 B s2 (ENVep_h E) ==>
       P (MODDEC_H moddec_h) s1 B s2 (BASISbp_h (env_h_in_basis_h E))) /\
     (!moddec_h s1 B s2 p.
       eval_moddec_h moddec_h s1 B s2 (PACKep_h p) ==>
       P (MODDEC_H moddec_h) s1 B s2 (PACKbp_h p)) /\
     (!sigdec_h s1 B s2 G.
       eval_sigdec_h sigdec_h s1 (Inter_basis_h B) s2 G ==>
       P (SIGDEC_H sigdec_h) s1 B s2 (BASISbp_h (sigenv_h_in_basis_h G))) ==>
     (!topdec_h s1 B s2 bp.
       eval_topdec_h topdec_h s1 B s2 bp ==> P topdec_h s1 B s2 bp))

Theorems

joint_ty_sigexp_h_spec_h_strdesc_h_strdesc_h_option_sigexp_h_spec_h_strdesc_h_Axiom
|- !f0 f1 f2 f3 f4 f5 f6 f7 e0 f8 f9 f10 e1 f11.
     ?!fn.
       (!j. fn (JOINT_int_SIGsigexp_h j) = f0 (fn j) j) /\
       (!s. fn (JOINT_int_SIGIDsigexp_h s) = f1 s) /\
       (!v'. fn (JOINT_int_VALspec_h v') = f2 v') /\
       (!e. fn (JOINT_int_EXCEPTIONspec_h e) = f3 e) /\
       (!j. fn (JOINT_int_STRUCTUREspec_h j) = f4 (fn j) j) /\
       (!j1 j2.
         fn (JOINT_int_LOCALspec_h j1 j2) = f5 (fn j1) (fn j2) j1 j2) /\
       (!n. fn (JOINT_int_OPENspec_h n) = f6 n) /\
       (!n. fn (JOINT_int_INCLUDEspec_h n) = f7 n) /\
       (fn JOINT_int_EMPTYspec_h = e0) /\
       (!j1 j2. fn (JOINT_int_SEQspec_h j1 j2) = f8 (fn j1) (fn j2) j1 j2) /\
       (!f' s j1 j2.
         fn (JOINT_int_FUNCTORspec_h f' s j1 j2) =
         f9 (fn j1) (fn j2) f' s j1 j2) /\
       (!s j1 j2.
         fn (JOINT_int_STRIDstrdesc_h s j1 j2) =
         f10 (fn j1) (fn j2) s j1 j2) /\
       (fn JOINT_int_sigexp_h_spec_h_strdesc_h_NONE_strdesc_h = e1) /\
       (!j.
         fn (JOINT_int_sigexp_h_spec_h_strdesc_h_SOME_strdesc_h j) =
         f11 (fn j) j)
HOFMLSignatures_rec_thm
|- !SIGsigexp_h_case SIGIDsigexp_h_case VALspec_h_case EXCEPTIONspec_h_case
    STRUCTUREspec_h_case LOCALspec_h_case OPENspec_h_case INCLUDEspec_h_case
    EMPTYspec_h_case SEQspec_h_case FUNCTORspec_h_case STRIDstrdesc_h_case
    sigexp_h_spec_h_strdesc_h_NONE_strdesc_h_case
    sigexp_h_spec_h_strdesc_h_SOME_strdesc_h_case.
     ?y y''' y'' y'.
       (!x1. y (SIGsigexp_h x1) = SIGsigexp_h_case (y''' x1) x1) /\
       (!x1. y (SIGIDsigexp_h x1) = SIGIDsigexp_h_case x1) /\
       (!x1. y''' (VALspec_h x1) = VALspec_h_case x1) /\
       (!x1. y''' (EXCEPTIONspec_h x1) = EXCEPTIONspec_h_case x1) /\
       (!x1. y''' (STRUCTUREspec_h x1) = STRUCTUREspec_h_case (y'' x1) x1) /\
       (!x1 x2.
         y''' (LOCALspec_h x1 x2) =
         LOCALspec_h_case (y''' x1) (y''' x2) x1 x2) /\
       (!x1. y''' (OPENspec_h x1) = OPENspec_h_case x1) /\
       (!x1. y''' (INCLUDEspec_h x1) = INCLUDEspec_h_case x1) /\
       (y''' EMPTYspec_h = EMPTYspec_h_case) /\
       (!x1 x2.
         y''' (SEQspec_h x1 x2) = SEQspec_h_case (y''' x1) (y''' x2) x1 x2) /\
       (!x1 x2 x3 x4.
         y''' (FUNCTORspec_h x1 x2 x3 x4) =
         FUNCTORspec_h_case (y x3) (y x4) x1 x2 x3 x4) /\
       (!x1 x2 x3.
         y'' (STRIDstrdesc_h x1 x2 x3) =
         STRIDstrdesc_h_case (y x2) (y' x3) x1 x2 x3) /\
       (y' NONE = sigexp_h_spec_h_strdesc_h_NONE_strdesc_h_case) /\
       (!x1.
         y' (SOME x1) =
         sigexp_h_spec_h_strdesc_h_SOME_strdesc_h_case (y'' x1) x1)
HOFMLSignatures_induction_thm
|- !sigexp_h_Prop spec_h_Prop strdesc_h_Prop
    strdesc_h_option_sigexp_h_spec_h_strdesc_h_Prop.
     (!y. spec_h_Prop y ==> sigexp_h_Prop (SIGsigexp_h y)) /\
     (!y. sigexp_h_Prop (SIGIDsigexp_h y)) /\
     (!y. spec_h_Prop (VALspec_h y)) /\
     (!y. spec_h_Prop (EXCEPTIONspec_h y)) /\
     (!y. strdesc_h_Prop y ==> spec_h_Prop (STRUCTUREspec_h y)) /\
     (!y y'''''''.
       spec_h_Prop y ==>
       spec_h_Prop y''''''' ==>
       spec_h_Prop (LOCALspec_h y y''''''')) /\
     (!y. spec_h_Prop (OPENspec_h y)) /\
     (!y. spec_h_Prop (INCLUDEspec_h y)) /\
     spec_h_Prop EMPTYspec_h /\
     (!y y''''''.
       spec_h_Prop y ==>
       spec_h_Prop y'''''' ==>
       spec_h_Prop (SEQspec_h y y'''''')) /\
     (!y y''''' y'''' y'''.
       sigexp_h_Prop y'''' ==>
       sigexp_h_Prop y''' ==>
       spec_h_Prop (FUNCTORspec_h y y''''' y'''' y''')) /\
     (!y y'' y'.
       sigexp_h_Prop y'' ==>
       strdesc_h_option_sigexp_h_spec_h_strdesc_h_Prop y' ==>
       strdesc_h_Prop (STRIDstrdesc_h y y'' y')) /\
     strdesc_h_option_sigexp_h_spec_h_strdesc_h_Prop NONE /\
     (!y.
       strdesc_h_Prop y ==>
       strdesc_h_option_sigexp_h_spec_h_strdesc_h_Prop (SOME y)) ==>
     (!x1. sigexp_h_Prop x1) /\
     (!x2. spec_h_Prop x2) /\
     (!x3. strdesc_h_Prop x3) /\
     (!x4. strdesc_h_option_sigexp_h_spec_h_strdesc_h_Prop x4)
HOFMLSignatures_unique_thm
|- !SIGsigexp_h_case SIGIDsigexp_h_case VALspec_h_case EXCEPTIONspec_h_case
    STRUCTUREspec_h_case LOCALspec_h_case OPENspec_h_case INCLUDEspec_h_case
    EMPTYspec_h_case SEQspec_h_case FUNCTORspec_h_case STRIDstrdesc_h_case
    sigexp_h_spec_h_strdesc_h_NONE_strdesc_h_case
    sigexp_h_spec_h_strdesc_h_SOME_strdesc_h_case fn1 fn2 fn3 fn4 fn1' fn2'
    fn3' fn4'.
     (!y. fn1 (SIGsigexp_h y) = SIGsigexp_h_case (fn2 y) y) /\
     (!y. fn1 (SIGIDsigexp_h y) = SIGIDsigexp_h_case y) /\
     (!y. fn2 (VALspec_h y) = VALspec_h_case y) /\
     (!y. fn2 (EXCEPTIONspec_h y) = EXCEPTIONspec_h_case y) /\
     (!y. fn2 (STRUCTUREspec_h y) = STRUCTUREspec_h_case (fn3 y) y) /\
     (!y y'''''''.
       fn2 (LOCALspec_h y y''''''') =
       LOCALspec_h_case (fn2 y) (fn2 y''''''') y y''''''') /\
     (!y. fn2 (OPENspec_h y) = OPENspec_h_case y) /\
     (!y. fn2 (INCLUDEspec_h y) = INCLUDEspec_h_case y) /\
     (fn2 EMPTYspec_h = EMPTYspec_h_case) /\
     (!y y''''''.
       fn2 (SEQspec_h y y'''''') =
       SEQspec_h_case (fn2 y) (fn2 y'''''') y y'''''') /\
     (!y y''''' y'''' y'''.
       fn2 (FUNCTORspec_h y y''''' y'''' y''') =
       FUNCTORspec_h_case (fn1 y'''') (fn1 y''') y y''''' y'''' y''') /\
     (!y y'' y'.
       fn3 (STRIDstrdesc_h y y'' y') =
       STRIDstrdesc_h_case (fn1 y'') (fn4 y') y y'' y') /\
     (fn4 NONE = sigexp_h_spec_h_strdesc_h_NONE_strdesc_h_case) /\
     (!y.
       fn4 (SOME y) =
       sigexp_h_spec_h_strdesc_h_SOME_strdesc_h_case (fn3 y) y) ==>
     (!y. fn1' (SIGsigexp_h y) = SIGsigexp_h_case (fn2' y) y) /\
     (!y. fn1' (SIGIDsigexp_h y) = SIGIDsigexp_h_case y) /\
     (!y. fn2' (VALspec_h y) = VALspec_h_case y) /\
     (!y. fn2' (EXCEPTIONspec_h y) = EXCEPTIONspec_h_case y) /\
     (!y. fn2' (STRUCTUREspec_h y) = STRUCTUREspec_h_case (fn3' y) y) /\
     (!y y'''''''.
       fn2' (LOCALspec_h y y''''''') =
       LOCALspec_h_case (fn2' y) (fn2' y''''''') y y''''''') /\
     (!y. fn2' (OPENspec_h y) = OPENspec_h_case y) /\
     (!y. fn2' (INCLUDEspec_h y) = INCLUDEspec_h_case y) /\
     (fn2' EMPTYspec_h = EMPTYspec_h_case) /\
     (!y y''''''.
       fn2' (SEQspec_h y y'''''') =
       SEQspec_h_case (fn2' y) (fn2' y'''''') y y'''''') /\
     (!y y''''' y'''' y'''.
       fn2' (FUNCTORspec_h y y''''' y'''' y''') =
       FUNCTORspec_h_case (fn1' y'''') (fn1' y''') y y''''' y'''' y''') /\
     (!y y'' y'.
       fn3' (STRIDstrdesc_h y y'' y') =
       STRIDstrdesc_h_case (fn1' y'') (fn4' y') y y'' y') /\
     (fn4' NONE = sigexp_h_spec_h_strdesc_h_NONE_strdesc_h_case) /\
     (!y.
       fn4' (SOME y) =
       sigexp_h_spec_h_strdesc_h_SOME_strdesc_h_case (fn3' y) y) ==>
     (fn1 = fn1') /\ (fn2 = fn2') /\ (fn3 = fn3') /\ (fn4 = fn4')
HOFMLSignatures_constructors_distinct
|- (!x1 x1'. ~(SIGsigexp_h x1 = SIGIDsigexp_h x1')) /\
   ((!x1 x1'. ~(VALspec_h x1 = EXCEPTIONspec_h x1')) /\
    (!x1 x1'. ~(VALspec_h x1 = STRUCTUREspec_h x1')) /\
    (!x1 x1' x2'. ~(VALspec_h x1 = LOCALspec_h x1' x2')) /\
    (!x1 x1'. ~(VALspec_h x1 = OPENspec_h x1')) /\
    (!x1 x1'. ~(VALspec_h x1 = INCLUDEspec_h x1')) /\
    (!x1. ~(VALspec_h x1 = EMPTYspec_h)) /\
    (!x1 x1' x2'. ~(VALspec_h x1 = SEQspec_h x1' x2')) /\
    (!x1 x1' x2' x3' x4'. ~(VALspec_h x1 = FUNCTORspec_h x1' x2' x3' x4')) /\
    (!x1 x1'. ~(EXCEPTIONspec_h x1 = STRUCTUREspec_h x1')) /\
    (!x1 x1' x2'. ~(EXCEPTIONspec_h x1 = LOCALspec_h x1' x2')) /\
    (!x1 x1'. ~(EXCEPTIONspec_h x1 = OPENspec_h x1')) /\
    (!x1 x1'. ~(EXCEPTIONspec_h x1 = INCLUDEspec_h x1')) /\
    (!x1. ~(EXCEPTIONspec_h x1 = EMPTYspec_h)) /\
    (!x1 x1' x2'. ~(EXCEPTIONspec_h x1 = SEQspec_h x1' x2')) /\
    (!x1 x1' x2' x3' x4'.
      ~(EXCEPTIONspec_h x1 = FUNCTORspec_h x1' x2' x3' x4')) /\
    (!x1 x1' x2'. ~(STRUCTUREspec_h x1 = LOCALspec_h x1' x2')) /\
    (!x1 x1'. ~(STRUCTUREspec_h x1 = OPENspec_h x1')) /\
    (!x1 x1'. ~(STRUCTUREspec_h x1 = INCLUDEspec_h x1')) /\
    (!x1. ~(STRUCTUREspec_h x1 = EMPTYspec_h)) /\
    (!x1 x1' x2'. ~(STRUCTUREspec_h x1 = SEQspec_h x1' x2')) /\
    (!x1 x1' x2' x3' x4'.
      ~(STRUCTUREspec_h x1 = FUNCTORspec_h x1' x2' x3' x4')) /\
    (!x1 x2 x1'. ~(LOCALspec_h x1 x2 = OPENspec_h x1')) /\
    (!x1 x2 x1'. ~(LOCALspec_h x1 x2 = INCLUDEspec_h x1')) /\
    (!x1 x2. ~(LOCALspec_h x1 x2 = EMPTYspec_h)) /\
    (!x1 x2 x1' x2'. ~(LOCALspec_h x1 x2 = SEQspec_h x1' x2')) /\
    (!x1 x2 x1' x2' x3' x4'.
      ~(LOCALspec_h x1 x2 = FUNCTORspec_h x1' x2' x3' x4')) /\
    (!x1 x1'. ~(OPENspec_h x1 = INCLUDEspec_h x1')) /\
    (!x1. ~(OPENspec_h x1 = EMPTYspec_h)) /\
    (!x1 x1' x2'. ~(OPENspec_h x1 = SEQspec_h x1' x2')) /\
    (!x1 x1' x2' x3' x4'. ~(OPENspec_h x1 = FUNCTORspec_h x1' x2' x3' x4')) /\
    (!x1. ~(INCLUDEspec_h x1 = EMPTYspec_h)) /\
    (!x1 x1' x2'. ~(INCLUDEspec_h x1 = SEQspec_h x1' x2')) /\
    (!x1 x1' x2' x3' x4'.
      ~(INCLUDEspec_h x1 = FUNCTORspec_h x1' x2' x3' x4')) /\
    (!x1' x2'. ~(EMPTYspec_h = SEQspec_h x1' x2')) /\
    (!x1' x2' x3' x4'. ~(EMPTYspec_h = FUNCTORspec_h x1' x2' x3' x4')) /\
    (!x1 x2 x1' x2' x3' x4'.
      ~(SEQspec_h x1 x2 = FUNCTORspec_h x1' x2' x3' x4'))) /\
   (!x1'. ~(NONE = SOME x1'))
HOFMLSignatures_constructors_one_one
|- ((!x1 x1'. (SIGsigexp_h x1 = SIGsigexp_h x1') = x1 = x1') /\
    (!x1 x1'. (SIGIDsigexp_h x1 = SIGIDsigexp_h x1') = x1 = x1')) /\
   ((!x1 x1'. (VALspec_h x1 = VALspec_h x1') = x1 = x1') /\
    (!x1 x1'. (EXCEPTIONspec_h x1 = EXCEPTIONspec_h x1') = x1 = x1') /\
    (!x1 x1'. (STRUCTUREspec_h x1 = STRUCTUREspec_h x1') = x1 = x1') /\
    (!x1 x2 x1' x2'.
      (LOCALspec_h x1 x2 = LOCALspec_h x1' x2') = (x1 = x1') /\ (x2 = x2')) /\
    (!x1 x1'. (OPENspec_h x1 = OPENspec_h x1') = x1 = x1') /\
    (!x1 x1'. (INCLUDEspec_h x1 = INCLUDEspec_h x1') = x1 = x1') /\
    (!x1 x2 x1' x2'.
      (SEQspec_h x1 x2 = SEQspec_h x1' x2') = (x1 = x1') /\ (x2 = x2')) /\
    (!x1 x2 x3 x4 x1' x2' x3' x4'.
      (FUNCTORspec_h x1 x2 x3 x4 = FUNCTORspec_h x1' x2' x3' x4') =
      (x1 = x1') /\ (x2 = x2') /\ (x3 = x3') /\ (x4 = x4'))) /\
   (!x1 x2 x3 x1' x2' x3'.
     (STRIDstrdesc_h x1 x2 x3 = STRIDstrdesc_h x1' x2' x3') =
     (x1 = x1') /\ (x2 = x2') /\ (x3 = x3')) /\
   (!x1 x1'. (SOME x1 = SOME x1') = x1 = x1')
HOFMLSignatures_cases_thm
|- (!x1. (?y. x1 = SIGsigexp_h y) \/ (?y. x1 = SIGIDsigexp_h y)) /\
   (!x2.
     (?y. x2 = VALspec_h y) \/
     (?y. x2 = EXCEPTIONspec_h y) \/
     (?y. x2 = STRUCTUREspec_h y) \/
     (?y y'. x2 = LOCALspec_h y y') \/
     (?y. x2 = OPENspec_h y) \/
     (?y. x2 = INCLUDEspec_h y) \/
     (x2 = EMPTYspec_h) \/
     (?y y'. x2 = SEQspec_h y y') \/
     (?y y''' y'' y'. x2 = FUNCTORspec_h y y''' y'' y')) /\
   (!x3. ?y y'' y'. x3 = STRIDstrdesc_h y y'' y') /\
   (!x4. (x4 = NONE) \/ (?y. x4 = SOME y))
joint_ty_sigbind_h_sigbind_h_option_sigbind_h_Axiom
|- !f0 e f1.
     ?!fn.
       (!s0 s1 j. fn (JOINT_int_BINDsigbind_h s0 s1 j) = f0 (fn j) s0 s1 j) /\
       (fn JOINT_int_sigbind_h_NONE_sigbind_h = e) /\
       (!j. fn (JOINT_int_sigbind_h_SOME_sigbind_h j) = f1 (fn j) j)
HOFMLSigbindrec_thm
|- !BINDsigbind_h_case sigbind_h_NONE_sigbind_h_case
    sigbind_h_SOME_sigbind_h_case.
     ?y y'.
       (!x1 x2 x3.
         y (BINDsigbind_h x1 x2 x3) = BINDsigbind_h_case (y' x3) x1 x2 x3) /\
       (y' NONE = sigbind_h_NONE_sigbind_h_case) /\
       (!x1. y' (SOME x1) = sigbind_h_SOME_sigbind_h_case (y x1) x1)
HOFMLSigbindinduction_thm
|- !sigbind_h_Prop sigbind_h_option_sigbind_h_Prop.
     (!y y'' y'.
       sigbind_h_option_sigbind_h_Prop y' ==>
       sigbind_h_Prop (BINDsigbind_h y y'' y')) /\
     sigbind_h_option_sigbind_h_Prop NONE /\
     (!y. sigbind_h_Prop y ==> sigbind_h_option_sigbind_h_Prop (SOME y)) ==>
     (!x1. sigbind_h_Prop x1) /\ (!x2. sigbind_h_option_sigbind_h_Prop x2)
HOFMLSigbindunique_thm
|- !BINDsigbind_h_case sigbind_h_NONE_sigbind_h_case
    sigbind_h_SOME_sigbind_h_case fn1 fn2 fn1' fn2'.
     (!y y'' y'.
       fn1 (BINDsigbind_h y y'' y') = BINDsigbind_h_case (fn2 y') y y'' y') /\
     (fn2 NONE = sigbind_h_NONE_sigbind_h_case) /\
     (!y. fn2 (SOME y) = sigbind_h_SOME_sigbind_h_case (fn1 y) y) ==>
     (!y y'' y'.
       fn1' (BINDsigbind_h y y'' y') =
       BINDsigbind_h_case (fn2' y') y y'' y') /\
     (fn2' NONE = sigbind_h_NONE_sigbind_h_case) /\
     (!y. fn2' (SOME y) = sigbind_h_SOME_sigbind_h_case (fn1' y) y) ==>
     (fn1 = fn1') /\ (fn2 = fn2')
HOFMLSigbindconstructors_distinct
|- !x1'. ~(NONE = SOME x1')
HOFMLSigbindconstructors_one_one
|- (!x1 x2 x3 x1' x2' x3'.
     (BINDsigbind_h x1 x2 x3 = BINDsigbind_h x1' x2' x3') =
     (x1 = x1') /\ (x2 = x2') /\ (x3 = x3')) /\
   (!x1 x1'. (SOME x1 = SOME x1') = x1 = x1')
HOFMLSigbindcases_thm
|- (!x1. ?y y'' y'. x1 = BINDsigbind_h y y'' y') /\
   (!x2. (x2 = NONE) \/ (?y. x2 = SOME y))
sigdec_h_Axiom
|- !f0 e f1.
     ?!fn.
       (!s. fn (SIGNATUREsigdec_h s) = f0 s) /\
       (fn EMPTYsigdec_h = e) /\
       (!s1 s2. fn (SEQsigdec_h s1 s2) = f1 (fn s1) (fn s2) s1 s2)
joint_ty_funbind_h_funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_moddec_h_sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strbind_h_strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_strexp_h_Axiom
|- !f0 f1 e0 f2 f3 f4 f5 f6 e1 f7 f8 e2 f9 f10 e3 f11 f12 f13 f14 f15.
     ?!fn.
       (!f' s0 s1 j1 j2 j3.
         fn (JOINT_int_BINDfunbind_h f' s0 s1 j1 j2 j3) =
         f0 (fn j1) (fn j2) (fn j3) f' s0 s1 j1 j2 j3) /\
       (!f' l. fn (JOINT_int_REBINDfunbind_h f' l) = f1 f' l) /\
       (fn JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_funbind_h =
        e0) /\
       (!j.
         fn
           (JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h
             j) =
         f2 (fn j) j) /\
       (!d. fn (JOINT_int_DECmoddec_h d) = f3 d) /\
       (!j. fn (JOINT_int_STRUCTUREmoddec_h j) = f4 (fn j) j) /\
       (!j1 j2.
         fn (JOINT_int_LOCALmoddec_h j1 j2) = f5 (fn j1) (fn j2) j1 j2) /\
       (!n. fn (JOINT_int_OPENmoddec_h n) = f6 n) /\
       (fn JOINT_int_EMPTYmoddec_h = e1) /\
       (!j1 j2.
         fn (JOINT_int_SEQmoddec_h j1 j2) = f7 (fn j1) (fn j2) j1 j2) /\
       (!j. fn (JOINT_int_FUNCTORmoddec_h j) = f8 (fn j) j) /\
       (fn JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_sigexp_h =
        e2) /\
       (!s.
         fn
           (JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h s) =
         f9 s) /\
       (!s j1 j2 j3.
         fn (JOINT_int_BINDstrbind_h s j1 j2 j3) =
         f10 (fn j1) (fn j2) (fn j3) s j1 j2 j3) /\
       (fn JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_NONE_strbind_h =
        e3) /\
       (!j.
         fn
           (JOINT_int_funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h
             j) =
         f11 (fn j) j) /\
       (!j. fn (JOINT_int_STRUCTstrexp_h j) = f12 (fn j) j) /\
       (!l. fn (JOINT_int_LONGSTRIDstrexp_h l) = f13 l) /\
       (!l' j. fn (JOINT_int_APPstrexp_h l' j) = f14 (fn j) l' j) /\
       (!j1 j2. fn (JOINT_int_LETstrexp_h j1 j2) = f15 (fn j1) (fn j2) j1 j2)
HOFMLStructures_rec_thm
|- !BINDfunbind_h_case REBINDfunbind_h_case
    funbind_h_moddec_h_strbind_h_strexp_h_NONE_funbind_h_case
    funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h_case DECmoddec_h_case
    STRUCTUREmoddec_h_case LOCALmoddec_h_case OPENmoddec_h_case
    EMPTYmoddec_h_case SEQmoddec_h_case FUNCTORmoddec_h_case
    funbind_h_moddec_h_strbind_h_strexp_h_NONE_sigexp_h_case
    funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h_case
    BINDstrbind_h_case
    funbind_h_moddec_h_strbind_h_strexp_h_NONE_strbind_h_case
    funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h_case
    STRUCTstrexp_h_case LONGSTRIDstrexp_h_case APPstrexp_h_case
    LETstrexp_h_case.
     ?y y'''''' y''''' y'''' y''' y'' y'.
       (!x1 x2 x3 x4 x5 x6.
         y (BINDfunbind_h x1 x2 x3 x4 x5 x6) =
         BINDfunbind_h_case (y'''' x4) (y' x5) (y'''''' x6) x1 x2 x3 x4 x5
           x6) /\
       (!x1 x2. y (REBINDfunbind_h x1 x2) = REBINDfunbind_h_case x1 x2) /\
       (y'''''' NONE =
        funbind_h_moddec_h_strbind_h_strexp_h_NONE_funbind_h_case) /\
       (!x1.
         y'''''' (SOME x1) =
         funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h_case (y x1)
           x1) /\
       (!x1. y''''' (DECmoddec_h x1) = DECmoddec_h_case x1) /\
       (!x1.
         y''''' (STRUCTUREmoddec_h x1) =
         STRUCTUREmoddec_h_case (y''' x1) x1) /\
       (!x1 x2.
         y''''' (LOCALmoddec_h x1 x2) =
         LOCALmoddec_h_case (y''''' x1) (y''''' x2) x1 x2) /\
       (!x1. y''''' (OPENmoddec_h x1) = OPENmoddec_h_case x1) /\
       (y''''' EMPTYmoddec_h = EMPTYmoddec_h_case) /\
       (!x1 x2.
         y''''' (SEQmoddec_h x1 x2) =
         SEQmoddec_h_case (y''''' x1) (y''''' x2) x1 x2) /\
       (!x1. y''''' (FUNCTORmoddec_h x1) = FUNCTORmoddec_h_case (y x1) x1) /\
       (y'''' NONE =
        funbind_h_moddec_h_strbind_h_strexp_h_NONE_sigexp_h_case) /\
       (!x1.
         y'''' (SOME x1) =
         funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h_case x1) /\
       (!x1 x2 x3 x4.
         y''' (BINDstrbind_h x1 x2 x3 x4) =
         BINDstrbind_h_case (y'''' x2) (y' x3) (y'' x4) x1 x2 x3 x4) /\
       (y'' NONE =
        funbind_h_moddec_h_strbind_h_strexp_h_NONE_strbind_h_case) /\
       (!x1.
         y'' (SOME x1) =
         funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h_case (y''' x1)
           x1) /\
       (!x1. y' (STRUCTstrexp_h x1) = STRUCTstrexp_h_case (y''''' x1) x1) /\
       (!x1. y' (LONGSTRIDstrexp_h x1) = LONGSTRIDstrexp_h_case x1) /\
       (!x1 x2. y' (APPstrexp_h x1 x2) = APPstrexp_h_case (y' x2) x1 x2) /\
       (!x1 x2.
         y' (LETstrexp_h x1 x2) = LETstrexp_h_case (y''''' x1) (y' x2) x1 x2)
HOFMLStructures_induction_thm
|- !funbind_h_Prop funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_Prop
    moddec_h_Prop sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_Prop
    strbind_h_Prop strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_Prop
    strexp_h_Prop.
     (!y y''''''''''''' y'''''''''''' y''''''''''' y'''''''''' y'''''''''.
       sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_Prop
         y''''''''''' ==>
       strexp_h_Prop y'''''''''' ==>
       funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_Prop
         y''''''''' ==>
       funbind_h_Prop
         (BINDfunbind_h y y''''''''''''' y'''''''''''' y'''''''''''
            y''''''''''
           y''''''''')) /\
     (!y y''''''''. funbind_h_Prop (REBINDfunbind_h y y'''''''')) /\
     funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_Prop NONE /\
     (!y.
       funbind_h_Prop y ==>
       funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_Prop
         (SOME y)) /\
     (!y. moddec_h_Prop (DECmoddec_h y)) /\
     (!y. strbind_h_Prop y ==> moddec_h_Prop (STRUCTUREmoddec_h y)) /\
     (!y y'''''''.
       moddec_h_Prop y ==>
       moddec_h_Prop y''''''' ==>
       moddec_h_Prop (LOCALmoddec_h y y''''''')) /\
     (!y. moddec_h_Prop (OPENmoddec_h y)) /\
     moddec_h_Prop EMPTYmoddec_h /\
     (!y y''''''.
       moddec_h_Prop y ==>
       moddec_h_Prop y'''''' ==>
       moddec_h_Prop (SEQmoddec_h y y'''''')) /\
     (!y. funbind_h_Prop y ==> moddec_h_Prop (FUNCTORmoddec_h y)) /\
     sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_Prop NONE /\
     (!y.
       sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_Prop (SOME y)) /\
     (!y y''''' y'''' y'''.
       sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_Prop y''''' ==>
       strexp_h_Prop y'''' ==>
       strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_Prop y''' ==>
       strbind_h_Prop (BINDstrbind_h y y''''' y'''' y''')) /\
     strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_Prop NONE /\
     (!y.
       strbind_h_Prop y ==>
       strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_Prop
         (SOME y)) /\
     (!y. moddec_h_Prop y ==> strexp_h_Prop (STRUCTstrexp_h y)) /\
     (!y. strexp_h_Prop (LONGSTRIDstrexp_h y)) /\
     (!y y''. strexp_h_Prop y'' ==> strexp_h_Prop (APPstrexp_h y y'')) /\
     (!y y'.
       moddec_h_Prop y /\ strexp_h_Prop y' ==>
       strexp_h_Prop (LETstrexp_h y y')) ==>
     (!x1. funbind_h_Prop x1) /\
     (!x2. funbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_Prop x2) /\
     (!x3. moddec_h_Prop x3) /\
     (!x4. sigexp_h_option_funbind_h_moddec_h_strbind_h_strexp_h_Prop x4) /\
     (!x5. strbind_h_Prop x5) /\
     (!x6. strbind_h_option_funbind_h_moddec_h_strbind_h_strexp_h_Prop x6) /\
     (!x7. strexp_h_Prop x7)
HOFMLStructures_unique_thm
|- !BINDfunbind_h_case REBINDfunbind_h_case
    funbind_h_moddec_h_strbind_h_strexp_h_NONE_funbind_h_case
    funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h_case DECmoddec_h_case
    STRUCTUREmoddec_h_case LOCALmoddec_h_case OPENmoddec_h_case
    EMPTYmoddec_h_case SEQmoddec_h_case FUNCTORmoddec_h_case
    funbind_h_moddec_h_strbind_h_strexp_h_NONE_sigexp_h_case
    funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h_case
    BINDstrbind_h_case
    funbind_h_moddec_h_strbind_h_strexp_h_NONE_strbind_h_case
    funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h_case
    STRUCTstrexp_h_case LONGSTRIDstrexp_h_case APPstrexp_h_case
    LETstrexp_h_case fn1 fn2 fn3 fn4 fn5 fn6 fn7 fn1' fn2' fn3' fn4' fn5' fn6'
    fn7'.
     (!y y''''''''''''' y'''''''''''' y''''''''''' y'''''''''' y'''''''''.
       fn1
         (BINDfunbind_h y y''''''''''''' y'''''''''''' y'''''''''''
            y''''''''''
           y''''''''') =
       BINDfunbind_h_case (fn4 y''''''''''') (fn7 y'''''''''')
         (fn2 y''''''''')
         y
         y'''''''''''''
         y''''''''''''
         y'''''''''''
         y''''''''''
         y''''''''') /\
     (!y y''''''''.
       fn1 (REBINDfunbind_h y y'''''''') =
       REBINDfunbind_h_case y y'''''''') /\
     (fn2 NONE = funbind_h_moddec_h_strbind_h_strexp_h_NONE_funbind_h_case) /\
     (!y.
       fn2 (SOME y) =
       funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h_case (fn1 y) y) /\
     (!y. fn3 (DECmoddec_h y) = DECmoddec_h_case y) /\
     (!y. fn3 (STRUCTUREmoddec_h y) = STRUCTUREmoddec_h_case (fn5 y) y) /\
     (!y y'''''''.
       fn3 (LOCALmoddec_h y y''''''') =
       LOCALmoddec_h_case (fn3 y) (fn3 y''''''') y y''''''') /\
     (!y. fn3 (OPENmoddec_h y) = OPENmoddec_h_case y) /\
     (fn3 EMPTYmoddec_h = EMPTYmoddec_h_case) /\
     (!y y''''''.
       fn3 (SEQmoddec_h y y'''''') =
       SEQmoddec_h_case (fn3 y) (fn3 y'''''') y y'''''') /\
     (!y. fn3 (FUNCTORmoddec_h y) = FUNCTORmoddec_h_case (fn1 y) y) /\
     (fn4 NONE = funbind_h_moddec_h_strbind_h_strexp_h_NONE_sigexp_h_case) /\
     (!y.
       fn4 (SOME y) =
       funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h_case y) /\
     (!y y''''' y'''' y'''.
       fn5 (BINDstrbind_h y y''''' y'''' y''') =
       BINDstrbind_h_case (fn4 y''''') (fn7 y'''') (fn6 y''') y y''''' y''''
         y''') /\
     (fn6 NONE = funbind_h_moddec_h_strbind_h_strexp_h_NONE_strbind_h_case) /\
     (!y.
       fn6 (SOME y) =
       funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h_case (fn5 y) y) /\
     (!y. fn7 (STRUCTstrexp_h y) = STRUCTstrexp_h_case (fn3 y) y) /\
     (!y. fn7 (LONGSTRIDstrexp_h y) = LONGSTRIDstrexp_h_case y) /\
     (!y y''. fn7 (APPstrexp_h y y'') = APPstrexp_h_case (fn7 y'') y y'') /\
     (!y y'.
       fn7 (LETstrexp_h y y') = LETstrexp_h_case (fn3 y) (fn7 y') y y') ==>
     (!y y''''''''''''' y'''''''''''' y''''''''''' y'''''''''' y'''''''''.
       fn1'
         (BINDfunbind_h y y''''''''''''' y'''''''''''' y'''''''''''
            y''''''''''
           y''''''''') =
       BINDfunbind_h_case (fn4' y''''''''''') (fn7' y'''''''''')
         (fn2' y''''''''')
         y
         y'''''''''''''
         y''''''''''''
         y'''''''''''
         y''''''''''
         y''''''''') /\
     (!y y''''''''.
       fn1' (REBINDfunbind_h y y'''''''') =
       REBINDfunbind_h_case y y'''''''') /\
     (fn2' NONE =
      funbind_h_moddec_h_strbind_h_strexp_h_NONE_funbind_h_case) /\
     (!y.
       fn2' (SOME y) =
       funbind_h_moddec_h_strbind_h_strexp_h_SOME_funbind_h_case (fn1' y)
         y) /\
     (!y. fn3' (DECmoddec_h y) = DECmoddec_h_case y) /\
     (!y. fn3' (STRUCTUREmoddec_h y) = STRUCTUREmoddec_h_case (fn5' y) y) /\
     (!y y'''''''.
       fn3' (LOCALmoddec_h y y''''''') =
       LOCALmoddec_h_case (fn3' y) (fn3' y''''''') y y''''''') /\
     (!y. fn3' (OPENmoddec_h y) = OPENmoddec_h_case y) /\
     (fn3' EMPTYmoddec_h = EMPTYmoddec_h_case) /\
     (!y y''''''.
       fn3' (SEQmoddec_h y y'''''') =
       SEQmoddec_h_case (fn3' y) (fn3' y'''''') y y'''''') /\
     (!y. fn3' (FUNCTORmoddec_h y) = FUNCTORmoddec_h_case (fn1' y) y) /\
     (fn4' NONE = funbind_h_moddec_h_strbind_h_strexp_h_NONE_sigexp_h_case) /\
     (!y.
       fn4' (SOME y) =
       funbind_h_moddec_h_strbind_h_strexp_h_SOME_sigexp_h_case y) /\
     (!y y''''' y'''' y'''.
       fn5' (BINDstrbind_h y y''''' y'''' y''') =
       BINDstrbind_h_case (fn4' y''''') (fn7' y'''') (fn6' y''') y y'''''
         y''''
         y''') /\
     (fn6' NONE =
      funbind_h_moddec_h_strbind_h_strexp_h_NONE_strbind_h_case) /\
     (!y.
       fn6' (SOME y) =
       funbind_h_moddec_h_strbind_h_strexp_h_SOME_strbind_h_case (fn5' y)
         y) /\
     (!y. fn7' (STRUCTstrexp_h y) = STRUCTstrexp_h_case (fn3' y) y) /\
     (!y. fn7' (LONGSTRIDstrexp_h y) = LONGSTRIDstrexp_h_case y) /\
     (!y y''. fn7' (APPstrexp_h y y'') = APPstrexp_h_case (fn7' y'') y y'') /\
     (!y y'.
       fn7' (LETstrexp_h y y') = LETstrexp_h_case (fn3' y) (fn7' y') y y') ==>
     (fn1 = fn1') /\
     (fn2 = fn2') /\
     (fn3 = fn3') /\
     (fn4 = fn4') /\
     (fn5 = fn5') /\
     (fn6 = fn6') /\
     (fn7 = fn7')
HOFMLStructures_constructors_distinct
|- (!x1 x2 x3 x4 x5 x6 x1' x2'.
     ~(BINDfunbind_h x1 x2 x3 x4 x5 x6 = REBINDfunbind_h x1' x2')) /\
   (!x1'. ~(NONE = SOME x1')) /\
   ((!x1 x1'. ~(DECmoddec_h x1 = STRUCTUREmoddec_h x1')) /\
    (!x1 x1' x2'. ~(DECmoddec_h x1 = LOCALmoddec_h x1' x2')) /\
    (!x1 x1'. ~(DECmoddec_h x1 = OPENmoddec_h x1')) /\
    (!x1. ~(DECmoddec_h x1 = EMPTYmoddec_h)) /\
    (!x1 x1' x2'. ~(DECmoddec_h x1 = SEQmoddec_h x1' x2')) /\
    (!x1 x1'. ~(DECmoddec_h x1 = FUNCTORmoddec_h x1')) /\
    (!x1 x1' x2'. ~(STRUCTUREmoddec_h x1 = LOCALmoddec_h x1' x2')) /\
    (!x1 x1'. ~(STRUCTUREmoddec_h x1 = OPENmoddec_h x1')) /\
    (!x1. ~(STRUCTUREmoddec_h x1 = EMPTYmoddec_h)) /\
    (!x1 x1' x2'. ~(STRUCTUREmoddec_h x1 = SEQmoddec_h x1' x2')) /\
    (!x1 x1'. ~(STRUCTUREmoddec_h x1 = FUNCTORmoddec_h x1')) /\
    (!x1 x2 x1'. ~(LOCALmoddec_h x1 x2 = OPENmoddec_h x1')) /\
    (!x1 x2. ~(LOCALmoddec_h x1 x2 = EMPTYmoddec_h)) /\
    (!x1 x2 x1' x2'. ~(LOCALmoddec_h x1 x2 = SEQmoddec_h x1' x2')) /\
    (!x1 x2 x1'. ~(LOCALmoddec_h x1 x2 = FUNCTORmoddec_h x1')) /\
    (!x1. ~(OPENmoddec_h x1 = EMPTYmoddec_h)) /\
    (!x1 x1' x2'. ~(OPENmoddec_h x1 = SEQmoddec_h x1' x2')) /\
    (!x1 x1'. ~(OPENmoddec_h x1 = FUNCTORmoddec_h x1')) /\
    (!x1' x2'. ~(EMPTYmoddec_h = SEQmoddec_h x1' x2')) /\
    (!x1'. ~(EMPTYmoddec_h = FUNCTORmoddec_h x1')) /\
    (!x1 x2 x1'. ~(SEQmoddec_h x1 x2 = FUNCTORmoddec_h x1'))) /\
   (!x1'. ~(NONE = SOME x1')) /\
   (!x1'. ~(NONE = SOME x1')) /\
   (!x1 x1'. ~(STRUCTstrexp_h x1 = LONGSTRIDstrexp_h x1')) /\
   (!x1 x1' x2'. ~(STRUCTstrexp_h x1 = APPstrexp_h x1' x2')) /\
   (!x1 x1' x2'. ~(STRUCTstrexp_h x1 = LETstrexp_h x1' x2')) /\
   (!x1 x1' x2'. ~(LONGSTRIDstrexp_h x1 = APPstrexp_h x1' x2')) /\
   (!x1 x1' x2'. ~(LONGSTRIDstrexp_h x1 = LETstrexp_h x1' x2')) /\
   (!x1 x2 x1' x2'. ~(APPstrexp_h x1 x2 = LETstrexp_h x1' x2'))
HOFMLStructures_constructors_one_one
|- ((!x1 x2 x3 x4 x5 x6 x1' x2' x3' x4' x5' x6'.
      (BINDfunbind_h x1 x2 x3 x4 x5 x6 =
       BINDfunbind_h x1' x2' x3' x4' x5' x6') =
      (x1 = x1') /\
      (x2 = x2') /\
      (x3 = x3') /\
      (x4 = x4') /\
      (x5 = x5') /\
      (x6 = x6')) /\
    (!x1 x2 x1' x2'.
      (REBINDfunbind_h x1 x2 = REBINDfunbind_h x1' x2') =
      (x1 = x1') /\ (x2 = x2'))) /\
   (!x1 x1'. (SOME x1 = SOME x1') = x1 = x1') /\
   ((!x1 x1'. (DECmoddec_h x1 = DECmoddec_h x1') = x1 = x1') /\
    (!x1 x1'. (STRUCTUREmoddec_h x1 = STRUCTUREmoddec_h x1') = x1 = x1') /\
    (!x1 x2 x1' x2'.
      (LOCALmoddec_h x1 x2 = LOCALmoddec_h x1' x2') =
      (x1 = x1') /\ (x2 = x2')) /\
    (!x1 x1'. (OPENmoddec_h x1 = OPENmoddec_h x1') = x1 = x1') /\
    (!x1 x2 x1' x2'.
      (SEQmoddec_h x1 x2 = SEQmoddec_h x1' x2') = (x1 = x1') /\ (x2 = x2')) /\
    (!x1 x1'. (FUNCTORmoddec_h x1 = FUNCTORmoddec_h x1') = x1 = x1')) /\
   (!x1 x1'. (SOME x1 = SOME x1') = x1 = x1') /\
   (!x1 x2 x3 x4 x1' x2' x3' x4'.
     (BINDstrbind_h x1 x2 x3 x4 = BINDstrbind_h x1' x2' x3' x4') =
     (x1 = x1') /\ (x2 = x2') /\ (x3 = x3') /\ (x4 = x4')) /\
   (!x1 x1'. (SOME x1 = SOME x1') = x1 = x1') /\
   (!x1 x1'. (STRUCTstrexp_h x1 = STRUCTstrexp_h x1') = x1 = x1') /\
   (!x1 x1'. (LONGSTRIDstrexp_h x1 = LONGSTRIDstrexp_h x1') = x1 = x1') /\
   (!x1 x2 x1' x2'.
     (APPstrexp_h x1 x2 = APPstrexp_h x1' x2') = (x1 = x1') /\ (x2 = x2')) /\
   (!x1 x2 x1' x2'.
     (LETstrexp_h x1 x2 = LETstrexp_h x1' x2') = (x1 = x1') /\ (x2 = x2'))
HOFMLStructures_cases_thm
|- (!x1.
     (?y y''''' y'''' y''' y'' y'.
       x1 = BINDfunbind_h y y''''' y'''' y''' y'' y') \/
     (?y y'. x1 = REBINDfunbind_h y y')) /\
   (!x2. (x2 = NONE) \/ (?y. x2 = SOME y)) /\
   (!x3.
     (?y. x3 = DECmoddec_h y) \/
     (?y. x3 = STRUCTUREmoddec_h y) \/
     (?y y'. x3 = LOCALmoddec_h y y') \/
     (?y. x3 = OPENmoddec_h y) \/
     (x3 = EMPTYmoddec_h) \/
     (?y y'. x3 = SEQmoddec_h y y') \/
     (?y. x3 = FUNCTORmoddec_h y)) /\
   (!x4. (x4 = NONE) \/ (?y. x4 = SOME y)) /\
   (!x5. ?y y''' y'' y'. x5 = BINDstrbind_h y y''' y'' y') /\
   (!x6. (x6 = NONE) \/ (?y. x6 = SOME y)) /\
   (!x7.
     (?y. x7 = STRUCTstrexp_h y) \/
     (?y. x7 = LONGSTRIDstrexp_h y) \/
     (?y y'. x7 = APPstrexp_h y y') \/
     (?y y'. x7 = LETstrexp_h y y'))
topdec_h_Axiom
|- !f0 f1. ?!fn. (!m. fn (MODDEC_H m) = f0 m) /\ (!s. fn (SIGDEC_H s) = f1 s)
joint_ty_funid_int_h_prod_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_funintenv_h_int_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_strintenv_h_Axiom
|- !f0 e0 f1 f2 f3 f4 f5 e1 f6 f7 f8.
     ?!fn.
       (!f' j.
         fn (JOINT_int_funintenv_h_int_h_strintenv_h_ch44_funid_int_h f' j) =
         f0 (fn j) f' j) /\
       (fn
          JOINT_int_funintenv_h_int_h_strintenv_h_NIL_funid_int_h_prod_funintenv_h_int_h_strintenv_h =
        e0) /\
       (!j1 j2.
         fn
           (JOINT_int_funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h
              j1
             j2) =
         f1 (fn j1) (fn j2) j1 j2) /\
       (!j.
         fn
           (JOINT_int_funintenv_h_int_h_strintenv_h_FINMAP_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
             j) =
         f2 (fn j) j) /\
       (!j. fn (JOINT_int_FUNINTENV_H j) = f3 (fn j) j) /\
       (!j1 j2 s0 s1.
         fn (JOINT_int_INT_H j1 j2 s0 s1) = f4 (fn j1) (fn j2) s0 s1 j1 j2) /\
       (!s j.
         fn (JOINT_int_funintenv_h_int_h_strintenv_h_ch44_strid_int_h s j) =
         f5 (fn j) s j) /\
       (fn
          JOINT_int_funintenv_h_int_h_strintenv_h_NIL_strid_int_h_prod_funintenv_h_int_h_strintenv_h =
        e1) /\
       (!j1 j2.
         fn
           (JOINT_int_funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h
              j1
             j2) =
         f6 (fn j1) (fn j2) j1 j2) /\
       (!j.
         fn
           (JOINT_int_funintenv_h_int_h_strintenv_h_FINMAP_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h
             j) =
         f7 (fn j) j) /\
       (!j. fn (JOINT_int_STRINTENV_H j) = f8 (fn j) j)
HOFMLInterfaces_rec_thm
|- !funintenv_h_int_h_strintenv_h_ch44_funid_int_h_case
    funintenv_h_int_h_strintenv_h_NIL_funid_int_h_prod_funintenv_h_int_h_strintenv_h_case
    funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h_case
    funintenv_h_int_h_strintenv_h_FINMAP_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_case
    FUNINTENV_H_case INT_H_case
    funintenv_h_int_h_strintenv_h_ch44_strid_int_h_case
    funintenv_h_int_h_strintenv_h_NIL_strid_int_h_prod_funintenv_h_int_h_strintenv_h_case
    funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h_case
    funintenv_h_int_h_strintenv_h_FINMAP_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_case
    STRINTENV_H_case.
     ?y y'''''''' y''''''' y'''''' y''''' y'''' y''' y'' y'.
       (!x1 x2.
         y (x1,x2) =
         funintenv_h_int_h_strintenv_h_ch44_funid_int_h_case (y''''' x2) x1
           x2) /\
       (y'''''''' [] =
        funintenv_h_int_h_strintenv_h_NIL_funid_int_h_prod_funintenv_h_int_h_strintenv_h_case) /\
       (!x1 x2.
         y'''''''' (CONS x1 x2) =
         funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h_case
           (y x1)
           (y'''''''' x2)
           x1
           x2) /\
       (!x1.
         y''''''' (FINMAP x1) =
         funintenv_h_int_h_strintenv_h_FINMAP_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_case
           (y'''''''' x1)
           x1) /\
       (!x1. y'''''' (FUNINTENV_H x1) = FUNINTENV_H_case (y''''''' x1) x1) /\
       (!x1 x2 x3 x4.
         y''''' (INT_H x1 x2 x3 x4) =
         INT_H_case (y'''''' x1) (y' x2) x3 x4 x1 x2) /\
       (!x1 x2.
         y'''' (x1,x2) =
         funintenv_h_int_h_strintenv_h_ch44_strid_int_h_case (y''''' x2) x1
           x2) /\
       (y''' [] =
        funintenv_h_int_h_strintenv_h_NIL_strid_int_h_prod_funintenv_h_int_h_strintenv_h_case) /\
       (!x1 x2.
         y''' (CONS x1 x2) =
         funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h_case
           (y'''' x1)
           (y''' x2)
           x1
           x2) /\
       (!x1.
         y'' (FINMAP x1) =
         funintenv_h_int_h_strintenv_h_FINMAP_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_case
           (y''' x1)
           x1) /\
       (!x1. y' (STRINTENV_H x1) = STRINTENV_H_case (y'' x1) x1)
HOFMLInterfaces_induction_thm
|- !funid_int_h_prod_funintenv_h_int_h_strintenv_h_Prop
    funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_Prop
    funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_Prop
    funintenv_h_Prop h_Prop
    strid_int_h_prod_funintenv_h_int_h_strintenv_h_Prop
    strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_Prop
    strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_Prop
    strintenv_h_Prop.
     (!y y'''''''.
       h_Prop y''''''' ==>
       funid_int_h_prod_funintenv_h_int_h_strintenv_h_Prop (y,y''''''')) /\
     funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_Prop
       [] /\
     (!y y''''''.
       funid_int_h_prod_funintenv_h_int_h_strintenv_h_Prop y ==>
       funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_Prop
         y'''''' ==>
       funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_Prop
         (CONS y y'''''')) /\
     (!y.
       funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_Prop
         y ==>
       funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_Prop
         (FINMAP y)) /\
     (!y.
       funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_Prop
         y ==>
       funintenv_h_Prop (FUNINTENV_H y)) /\
     (!y y''''' y'''' y'''.
       funintenv_h_Prop y ==>
       strintenv_h_Prop y''''' ==>
       h_Prop (INT_H y y''''' y'''' y''')) /\
     (!y y''.
       h_Prop y'' ==>
       strid_int_h_prod_funintenv_h_int_h_strintenv_h_Prop (y,y'')) /\
     strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_Prop
       [] /\
     (!y y'.
       strid_int_h_prod_funintenv_h_int_h_strintenv_h_Prop y ==>
       strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_Prop
         y' ==>
       strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_Prop
         (CONS y y')) /\
     (!y.
       strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_Prop
         y ==>
       strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_Prop
         (FINMAP y)) /\
     (!y.
       strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_Prop
         y ==>
       strintenv_h_Prop (STRINTENV_H y)) ==>
     (!x1. funid_int_h_prod_funintenv_h_int_h_strintenv_h_Prop x1) /\
     (!x2.
       funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_Prop
         x2) /\
     (!x3.
       funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_Prop
         x3) /\
     (!x4. funintenv_h_Prop x4) /\
     (!x5. h_Prop x5) /\
     (!x6. strid_int_h_prod_funintenv_h_int_h_strintenv_h_Prop x6) /\
     (!x7.
       strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_Prop
         x7) /\
     (!x8.
       strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_finmap_funintenv_h_int_h_strintenv_h_Prop
         x8) /\
     (!x9. strintenv_h_Prop x9)
HOFMLInterfaces_unique_thm
|- !funintenv_h_int_h_strintenv_h_ch44_funid_int_h_case
    funintenv_h_int_h_strintenv_h_NIL_funid_int_h_prod_funintenv_h_int_h_strintenv_h_case
    funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h_case
    funintenv_h_int_h_strintenv_h_FINMAP_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_case
    FUNINTENV_H_case INT_H_case
    funintenv_h_int_h_strintenv_h_ch44_strid_int_h_case
    funintenv_h_int_h_strintenv_h_NIL_strid_int_h_prod_funintenv_h_int_h_strintenv_h_case
    funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h_case
    funintenv_h_int_h_strintenv_h_FINMAP_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_case
    STRINTENV_H_case fn1 fn2 fn3 fn4 fn5 fn6 fn7 fn8 fn9 fn1' fn2' fn3' fn4'
    fn5' fn6' fn7' fn8' fn9'.
     (!y y'''''''.
       fn1 (y,y''''''') =
       funintenv_h_int_h_strintenv_h_ch44_funid_int_h_case (fn5 y''''''') y
         y''''''') /\
     (fn2 [] =
      funintenv_h_int_h_strintenv_h_NIL_funid_int_h_prod_funintenv_h_int_h_strintenv_h_case) /\
     (!y y''''''.
       fn2 (CONS y y'''''') =
       funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h_case
         (fn1 y)
         (fn2 y'''''')
         y
         y'''''') /\
     (!y.
       fn3 (FINMAP y) =
       funintenv_h_int_h_strintenv_h_FINMAP_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_case
         (fn2 y)
         y) /\
     (!y. fn4 (FUNINTENV_H y) = FUNINTENV_H_case (fn3 y) y) /\
     (!y y''''' y'''' y'''.
       fn5 (INT_H y y''''' y'''' y''') =
       INT_H_case (fn4 y) (fn9 y''''') y'''' y''' y y''''') /\
     (!y y''.
       fn6 (y,y'') =
       funintenv_h_int_h_strintenv_h_ch44_strid_int_h_case (fn5 y'') y y'') /\
     (fn7 [] =
      funintenv_h_int_h_strintenv_h_NIL_strid_int_h_prod_funintenv_h_int_h_strintenv_h_case) /\
     (!y y'.
       fn7 (CONS y y') =
       funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h_case
         (fn6 y)
         (fn7 y')
         y
         y') /\
     (!y.
       fn8 (FINMAP y) =
       funintenv_h_int_h_strintenv_h_FINMAP_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_case
         (fn7 y)
         y) /\
     (!y. fn9 (STRINTENV_H y) = STRINTENV_H_case (fn8 y) y) ==>
     (!y y'''''''.
       fn1' (y,y''''''') =
       funintenv_h_int_h_strintenv_h_ch44_funid_int_h_case (fn5' y''''''') y
         y''''''') /\
     (fn2' [] =
      funintenv_h_int_h_strintenv_h_NIL_funid_int_h_prod_funintenv_h_int_h_strintenv_h_case) /\
     (!y y''''''.
       fn2' (CONS y y'''''') =
       funintenv_h_int_h_strintenv_h_CONS_funid_int_h_prod_funintenv_h_int_h_strintenv_h_case
         (fn1' y)
         (fn2' y'''''')
         y
         y'''''') /\
     (!y.
       fn3' (FINMAP y) =
       funintenv_h_int_h_strintenv_h_FINMAP_funid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_case
         (fn2' y)
         y) /\
     (!y. fn4' (FUNINTENV_H y) = FUNINTENV_H_case (fn3' y) y) /\
     (!y y''''' y'''' y'''.
       fn5' (INT_H y y''''' y'''' y''') =
       INT_H_case (fn4' y) (fn9' y''''') y'''' y''' y y''''') /\
     (!y y''.
       fn6' (y,y'') =
       funintenv_h_int_h_strintenv_h_ch44_strid_int_h_case (fn5' y'') y
         y'') /\
     (fn7' [] =
      funintenv_h_int_h_strintenv_h_NIL_strid_int_h_prod_funintenv_h_int_h_strintenv_h_case) /\
     (!y y'.
       fn7' (CONS y y') =
       funintenv_h_int_h_strintenv_h_CONS_strid_int_h_prod_funintenv_h_int_h_strintenv_h_case
         (fn6' y)
         (fn7' y')
         y
         y') /\
     (!y.
       fn8' (FINMAP y) =
       funintenv_h_int_h_strintenv_h_FINMAP_strid_int_h_prod_funintenv_h_int_h_strintenv_h_list_funintenv_h_int_h_strintenv_h_case
         (fn7' y)
         y) /\
     (!y. fn9' (STRINTENV_H y) = STRINTENV_H_case (fn8' y) y) ==>
     (fn1 = fn1') /\
     (fn2 = fn2') /\
     (fn3 = fn3') /\
     (fn4 = fn4') /\
     (fn5 = fn5') /\
     (fn6 = fn6') /\
     (fn7 = fn7') /\
     (fn8 = fn8') /\
     (fn9 = fn9')
HOFMLInterfaces_distinct_thm
|- (!x1' x2'. ~([] = CONS x1' x2')) /\ (!x1' x2'. ~([] = CONS x1' x2'))
HOFMLInterfaces_one_one_thm
|- (!x1 x2 x1' x2'. ((x1,x2) = (x1',x2')) = (x1 = x1') /\ (x2 = x2')) /\
   (!x1 x2 x1' x2'. (CONS x1 x2 = CONS x1' x2') = (x1 = x1') /\ (x2 = x2')) /\
   (!x1 x1'. (FINMAP x1 = FINMAP x1') = x1 = x1') /\
   (!x1 x1'. (FUNINTENV_H x1 = FUNINTENV_H x1') = x1 = x1') /\
   (!x1 x2 x3 x4 x1' x2' x3' x4'.
     (INT_H x1 x2 x3 x4 = INT_H x1' x2' x3' x4') =
     (x1 = x1') /\ (x2 = x2') /\ (x3 = x3') /\ (x4 = x4')) /\
   (!x1 x2 x1' x2'. ((x1,x2) = (x1',x2')) = (x1 = x1') /\ (x2 = x2')) /\
   (!x1 x2 x1' x2'. (CONS x1 x2 = CONS x1' x2') = (x1 = x1') /\ (x2 = x2')) /\
   (!x1 x1'. (FINMAP x1 = FINMAP x1') = x1 = x1') /\
   (!x1 x1'. (STRINTENV_H x1 = STRINTENV_H x1') = x1 = x1')
HOFMLInterfaces_cases_thm
|- (!x1. ?y y'. x1 = (y,y')) /\
   (!x2. (x2 = []) \/ (?y y'. x2 = CONS y y')) /\
   (!x3. ?y. x3 = FINMAP y) /\
   (!x4. ?y. x4 = FUNINTENV_H y) /\
   (!x5. ?y y''' y'' y'. x5 = INT_H y y''' y'' y') /\
   (!x6. ?y y'. x6 = (y,y')) /\
   (!x7. (x7 = []) \/ (?y y'. x7 = CONS y y')) /\
   (!x8. ?y. x8 = FINMAP y) /\
   (!x9. ?y. x9 = STRINTENV_H y)
sigenv_h
|- !f. ?!fn. !f'. fn (SIGENV_H f') = f f'
sigenv_h_induction_thm
|- !P. (!f'. P (SIGENV_H f')) ==> (!s. P s)
sigenv_h_cases_thm
|- !s. ?f'. s = SIGENV_H f'
sigenv_h_constructors_one_one
|- !f' f''. (SIGENV_H f' = SIGENV_H f'') = f' = f''
intbasis_h
|- !f. ?!fn. !s0 s1 f'. fn (INTBASIS_H s0 s1 f') = f s0 s1 f'
intbasis_h_induction_thm
|- !P. (!s0 s1 f'. P (INTBASIS_H s0 s1 f')) ==> (!i. P i)
intbasis_h_cases_thm
|- !i. ?s0 s1 f'. i = INTBASIS_H s0 s1 f'
intbasis_h_constructors_one_one
|- !s0 s1 f' s0' s1' f''.
     (INTBASIS_H s0 s1 f' = INTBASIS_H s0' s1' f'') =
     (s0 = s0') /\ (s1 = s1') /\ (f' = f'')
joint_ty_basis_h_env_h_funclos_h_funenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_int_h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_Axiom
|- !f0 f1 f2 f3 f4 e0 f5 f6 e1 f7 f8 f9 e2 f10 f11.
     ?!fn.
       (!s j. fn (JOINT_int_BASIS_H s j) = f0 (fn j) s j) /\
       (!j1 j2 v' e.
         fn (JOINT_int_ENV_H j1 j2 v' e) = f1 (fn j1) (fn j2) v' e j1 j2) /\
       (!s0 i s1 j1 j2.
         fn (JOINT_int_FUNCLOS_H s0 i s1 j1 j2) =
         f2 (fn j1) (fn j2) s0 i s1 j1 j2) /\
       (!j. fn (JOINT_int_FUNENV_H j) = f3 (fn j) j) /\
       (!f' j.
         fn
           (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h
              f'
             j) =
         f4 (fn j) f' j) /\
       (fn
          JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h =
        e0) /\
       (!j1 j2.
         fn
           (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
              j1
             j2) =
         f5 (fn j1) (fn j2) j1 j2) /\
       (!j.
         fn
           (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
             j) =
         f6 (fn j) j) /\
       (fn JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NONE_int_h =
        e1) /\
       (!i.
         fn
           (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h
             i) =
         f7 i) /\
       (!j. fn (JOINT_int_STRENV_H j) = f8 (fn j) j) /\
       (!s j.
         fn
           (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h
              s
             j) =
         f9 (fn j) s j) /\
       (fn
          JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h =
        e2) /\
       (!j1 j2.
         fn
           (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h
              j1
             j2) =
         f10 (fn j1) (fn j2) j1 j2) /\
       (!j.
         fn
           (JOINT_int_basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h
             j) =
         f11 (fn j) j)
HOFMLBases_rec_thm
|- !BASIS_H_case ENV_H_case FUNCLOS_H_case FUNENV_H_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_NONE_int_h_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h_case STRENV_H_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_case.
     ?y y''''''''''' y'''''''''' y''''''''' y'''''''' y''''''' y'''''' y'''''
      y'''' y''' y'' y'.
       (!x1 x2. y (BASIS_H x1 x2) = BASIS_H_case (y''''''''''' x2) x1 x2) /\
       (!x1 x2 x3 x4.
         y''''''''''' (ENV_H x1 x2 x3 x4) =
         ENV_H_case (y''''''''' x1) (y'''' x2) x3 x4 x1 x2) /\
       (!x1 x2 x3 x4 x5.
         y'''''''''' (FUNCLOS_H x1 x2 x3 x4 x5) =
         FUNCLOS_H_case (y''''' x4) (y x5) x1 x2 x3 x4 x5) /\
       (!x1. y''''''''' (FUNENV_H x1) = FUNENV_H_case (y'''''' x1) x1) /\
       (!x1 x2.
         y'''''''' (x1,x2) =
         basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h_case
           (y'''''''''' x2)
           x1
           x2) /\
       (y''''''' [] =
        basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case) /\
       (!x1 x2.
         y''''''' (CONS x1 x2) =
         basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
           (y'''''''' x1)
           (y''''''' x2)
           x1
           x2) /\
       (!x1.
         y'''''' (FINMAP x1) =
         basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
           (y''''''' x1)
           x1) /\
       (y''''' NONE =
        basis_h_env_h_funclos_h_funenv_h_strenv_h_NONE_int_h_case) /\
       (!x1.
         y''''' (SOME x1) =
         basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h_case x1) /\
       (!x1. y'''' (STRENV_H x1) = STRENV_H_case (y' x1) x1) /\
       (!x1 x2.
         y''' (x1,x2) =
         basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h_case
           (y''''''''''' x2)
           x1
           x2) /\
       (y'' [] =
        basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case) /\
       (!x1 x2.
         y'' (CONS x1 x2) =
         basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
           (y''' x1)
           (y'' x2)
           x1
           x2) /\
       (!x1.
         y' (FINMAP x1) =
         basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
           (y'' x1)
           x1)
HOFMLBases_induction_thm
|- !basis_h_Prop env_h_Prop funclos_h_Prop funenv_h_Prop
    funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
    funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
    funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
    h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop strenv_h_Prop
    strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
    strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
    strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop.
     (!y y''''''''''''.
       env_h_Prop y'''''''''''' ==> basis_h_Prop (BASIS_H y y'''''''''''')) /\
     (!y y''''''''''' y'''''''''' y'''''''''.
       funenv_h_Prop y ==>
       strenv_h_Prop y''''''''''' ==>
       env_h_Prop (ENV_H y y''''''''''' y'''''''''' y''''''''')) /\
     (!y y'''''''' y''''''' y'''''' y'''''.
       h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop y'''''' ==>
       basis_h_Prop y''''' ==>
       funclos_h_Prop (FUNCLOS_H y y'''''''' y''''''' y'''''' y''''')) /\
     (!y.
       funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
         y ==>
       funenv_h_Prop (FUNENV_H y)) /\
     (!y y''''.
       funclos_h_Prop y'''' ==>
       funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
         (y,y'''')) /\
     funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
       [] /\
     (!y y'''.
       funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
         y ==>
       funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
         y''' ==>
       funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
         (CONS y y''')) /\
     (!y.
       funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
         y ==>
       funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
         (FINMAP y)) /\
     h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop NONE /\
     (!y. h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop (SOME y)) /\
     (!y.
       strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
         y ==>
       strenv_h_Prop (STRENV_H y)) /\
     (!y y''.
       env_h_Prop y'' ==>
       strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
         (y,y'')) /\
     strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
       [] /\
     (!y y'.
       strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop y ==>
       strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
         y' ==>
       strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
         (CONS y y')) /\
     (!y.
       strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
         y ==>
       strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
         (FINMAP y)) ==>
     (!x1. basis_h_Prop x1) /\
     (!x2. env_h_Prop x2) /\
     (!x3. funclos_h_Prop x3) /\
     (!x4. funenv_h_Prop x4) /\
     (!x5.
       funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
         x5) /\
     (!x6.
       funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
         x6) /\
     (!x7.
       funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
         x7) /\
     (!x8. h_option_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop x8) /\
     (!x9. strenv_h_Prop x9) /\
     (!x10.
       strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop x10) /\
     (!x11.
       strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
         x11) /\
     (!x12.
       strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_finmap_basis_h_env_h_funclos_h_funenv_h_strenv_h_Prop
         x12)
HOFMLBases_unique_thm
|- !BASIS_H_case ENV_H_case FUNCLOS_H_case FUNENV_H_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_NONE_int_h_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h_case STRENV_H_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
    basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
    fn1 fn2 fn3 fn4 fn5 fn6 fn7 fn8 fn9 fn10 fn11 fn12 fn1' fn2' fn3' fn4'
    fn5' fn6' fn7' fn8' fn9' fn10' fn11' fn12'.
     (!y y''''''''''''.
       fn1 (BASIS_H y y'''''''''''') =
       BASIS_H_case (fn2 y'''''''''''') y y'''''''''''') /\
     (!y y''''''''''' y'''''''''' y'''''''''.
       fn2 (ENV_H y y''''''''''' y'''''''''' y''''''''') =
       ENV_H_case (fn4 y) (fn9 y''''''''''') y'''''''''' y''''''''' y
         y''''''''''') /\
     (!y y'''''''' y''''''' y'''''' y'''''.
       fn3 (FUNCLOS_H y y'''''''' y''''''' y'''''' y''''') =
       FUNCLOS_H_case (fn8 y'''''') (fn1 y''''') y y'''''''' y''''''' y''''''
         y''''') /\
     (!y. fn4 (FUNENV_H y) = FUNENV_H_case (fn7 y) y) /\
     (!y y''''.
       fn5 (y,y'''') =
       basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h_case
         (fn3 y'''')
         y
         y'''') /\
     (fn6 [] =
      basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case) /\
     (!y y'''.
       fn6 (CONS y y''') =
       basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
         (fn5 y)
         (fn6 y''')
         y
         y''') /\
     (!y.
       fn7 (FINMAP y) =
       basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
         (fn6 y)
         y) /\
     (fn8 NONE = basis_h_env_h_funclos_h_funenv_h_strenv_h_NONE_int_h_case) /\
     (!y.
       fn8 (SOME y) =
       basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h_case y) /\
     (!y. fn9 (STRENV_H y) = STRENV_H_case (fn12 y) y) /\
     (!y y''.
       fn10 (y,y'') =
       basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h_case
         (fn2 y'')
         y
         y'') /\
     (fn11 [] =
      basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case) /\
     (!y y'.
       fn11 (CONS y y') =
       basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
         (fn10 y)
         (fn11 y')
         y
         y') /\
     (!y.
       fn12 (FINMAP y) =
       basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
         (fn11 y)
         y) ==>
     (!y y''''''''''''.
       fn1' (BASIS_H y y'''''''''''') =
       BASIS_H_case (fn2' y'''''''''''') y y'''''''''''') /\
     (!y y''''''''''' y'''''''''' y'''''''''.
       fn2' (ENV_H y y''''''''''' y'''''''''' y''''''''') =
       ENV_H_case (fn4' y) (fn9' y''''''''''') y'''''''''' y''''''''' y
         y''''''''''') /\
     (!y y'''''''' y''''''' y'''''' y'''''.
       fn3' (FUNCLOS_H y y'''''''' y''''''' y'''''' y''''') =
       FUNCLOS_H_case (fn8' y'''''') (fn1' y''''') y y'''''''' y'''''''
         y''''''
         y''''') /\
     (!y. fn4' (FUNENV_H y) = FUNENV_H_case (fn7' y) y) /\
     (!y y''''.
       fn5' (y,y'''') =
       basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_funid_funclos_h_case
         (fn3' y'''')
         y
         y'''') /\
     (fn6' [] =
      basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case) /\
     (!y y'''.
       fn6' (CONS y y''') =
       basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
         (fn5' y)
         (fn6' y''')
         y
         y''') /\
     (!y.
       fn7' (FINMAP y) =
       basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_funid_funclos_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
         (fn6' y)
         y) /\
     (fn8' NONE =
      basis_h_env_h_funclos_h_funenv_h_strenv_h_NONE_int_h_case) /\
     (!y.
       fn8' (SOME y) =
       basis_h_env_h_funclos_h_funenv_h_strenv_h_SOME_int_h_case y) /\
     (!y. fn9' (STRENV_H y) = STRENV_H_case (fn12' y) y) /\
     (!y y''.
       fn10' (y,y'') =
       basis_h_env_h_funclos_h_funenv_h_strenv_h_ch44_strid_env_h_case
         (fn2' y'')
         y
         y'') /\
     (fn11' [] =
      basis_h_env_h_funclos_h_funenv_h_strenv_h_NIL_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case) /\
     (!y y'.
       fn11' (CONS y y') =
       basis_h_env_h_funclos_h_funenv_h_strenv_h_CONS_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
         (fn10' y)
         (fn11' y')
         y
         y') /\
     (!y.
       fn12' (FINMAP y) =
       basis_h_env_h_funclos_h_funenv_h_strenv_h_FINMAP_strid_env_h_prod_basis_h_env_h_funclos_h_funenv_h_strenv_h_list_basis_h_env_h_funclos_h_funenv_h_strenv_h_case
         (fn11' y)
         y) ==>
     (fn1 = fn1') /\
     (fn2 = fn2') /\
     (fn3 = fn3') /\
     (fn4 = fn4') /\
     (fn5 = fn5') /\
     (fn6 = fn6') /\
     (fn7 = fn7') /\
     (fn8 = fn8') /\
     (fn9 = fn9') /\
     (fn10 = fn10') /\
     (fn11 = fn11') /\
     (fn12 = fn12')
HOFMLBases_distinct_thm
|- (!x1' x2'. ~([] = CONS x1' x2')) /\
   (!x1'. ~(NONE = SOME x1')) /\
   (!x1' x2'. ~([] = CONS x1' x2'))
HOFMLBases_one_one_thm
|- (!x1 x2 x1' x2'.
     (BASIS_H x1 x2 = BASIS_H x1' x2') = (x1 = x1') /\ (x2 = x2')) /\
   (!x1 x2 x3 x4 x1' x2' x3' x4'.
     (ENV_H x1 x2 x3 x4 = ENV_H x1' x2' x3' x4') =
     (x1 = x1') /\ (x2 = x2') /\ (x3 = x3') /\ (x4 = x4')) /\
   (!x1 x2 x3 x4 x5 x1' x2' x3' x4' x5'.
     (FUNCLOS_H x1 x2 x3 x4 x5 = FUNCLOS_H x1' x2' x3' x4' x5') =
     (x1 = x1') /\ (x2 = x2') /\ (x3 = x3') /\ (x4 = x4') /\ (x5 = x5')) /\
   (!x1 x1'. (FUNENV_H x1 = FUNENV_H x1') = x1 = x1') /\
   (!x1 x2 x1' x2'. ((x1,x2) = (x1',x2')) = (x1 = x1') /\ (x2 = x2')) /\
   (!x1 x2 x1' x2'. (CONS x1 x2 = CONS x1' x2') = (x1 = x1') /\ (x2 = x2')) /\
   (!x1 x1'. (FINMAP x1 = FINMAP x1') = x1 = x1') /\
   (!x1 x1'. (SOME x1 = SOME x1') = x1 = x1') /\
   (!x1 x1'. (STRENV_H x1 = STRENV_H x1') = x1 = x1') /\
   (!x1 x2 x1' x2'. ((x1,x2) = (x1',x2')) = (x1 = x1') /\ (x2 = x2')) /\
   (!x1 x2 x1' x2'. (CONS x1 x2 = CONS x1' x2') = (x1 = x1') /\ (x2 = x2')) /\
   (!x1 x1'. (FINMAP x1 = FINMAP x1') = x1 = x1')
HOFMLBases_cases_thm
|- (!x1. ?y y'. x1 = BASIS_H y y') /\
   (!x2. ?y y''' y'' y'. x2 = ENV_H y y''' y'' y') /\
   (!x3. ?y y'''' y''' y'' y'. x3 = FUNCLOS_H y y'''' y''' y'' y') /\
   (!x4. ?y. x4 = FUNENV_H y) /\
   (!x5. ?y y'. x5 = (y,y')) /\
   (!x6. (x6 = []) \/ (?y y'. x6 = CONS y y')) /\
   (!x7. ?y. x7 = FINMAP y) /\
   (!x8. (x8 = NONE) \/ (?y. x8 = SOME y)) /\
   (!x9. ?y. x9 = STRENV_H y) /\
   (!x10. ?y y'. x10 = (y,y')) /\
   (!x11. (x11 = []) \/ (?y y'. x11 = CONS y y')) /\
   (!x12. ?y. x12 = FINMAP y)
basis_pack_h_Axiom
|- !f0 f1. ?!fn. (!b. fn (BASISbp_h b) = f0 b) /\ (!p. fn (PACKbp_h p) = f1 p)
basis_pack_h_induction_thm
|- !P. (!b. P (BASISbp_h b)) /\ (!p. P (PACKbp_h p)) ==> (!b. P b)
basis_pack_h_cases_thm
|- !b. (?b'. b = BASISbp_h b') \/ (?p. b = PACKbp_h p)
basis_pack_h_constructors_one_one
|- (!b b'. (BASISbp_h b = BASISbp_h b') = b = b') /\
   (!p p'. (PACKbp_h p = PACKbp_h p') = p = p')
basis_pack_h_constructors_distinct
|- !p b. ~(BASISbp_h b = PACKbp_h p)
strenv_pack_h_Axiom
|- !f0 f1.
     ?!fn. (!s. fn (STRENVsp_h s) = f0 s) /\ (!p. fn (PACKsp_h p) = f1 p)
strenv_pack_h_induction_thm
|- !P. (!s. P (STRENVsp_h s)) /\ (!p. P (PACKsp_h p)) ==> (!s. P s)
strenv_pack_h_cases_thm
|- !s. (?s'. s = STRENVsp_h s') \/ (?p. s = PACKsp_h p)
strenv_pack_h_constructors_one_one
|- (!s s'. (STRENVsp_h s = STRENVsp_h s') = s = s') /\
   (!p p'. (PACKsp_h p = PACKsp_h p') = p = p')
strenv_pack_h_constructors_distinct
|- !p s. ~(STRENVsp_h s = PACKsp_h p)
env_pack_h_Axiom
|- !f0 f1. ?!fn. (!e. fn (ENVep_h e) = f0 e) /\ (!p. fn (PACKep_h p) = f1 p)
env_pack_h_induction_thm
|- !P. (!e. P (ENVep_h e)) /\ (!p. P (PACKep_h p)) ==> (!e. P e)
env_pack_h_cases_thm
|- !e. (?e'. e = ENVep_h e') \/ (?p. e = PACKep_h p)
env_pack_h_constructors_one_one
|- (!e e'. (ENVep_h e = ENVep_h e') = e = e') /\
   (!p p'. (PACKep_h p = PACKep_h p') = p = p')
env_pack_h_constructors_distinct
|- !p e. ~(ENVep_h e = PACKep_h p)
HOFML_EVAL_SIG_RULES_SATISFIED
|- HOFML_eval_signatures_pred eval_sigexp_h eval_spec_h eval_strdesc_h
HOFML_eval_signatures_h_induction
|- !P_sigexp_h P_spec_h P_strdesc_h.
     (!i IB spec s1 s2.
       P_spec_h spec s1 IB s2 i ==>
       P_sigexp_h (SIGsigexp_h spec) s1 IB s2 i) /\
     (!i IB s sigid.
       (lookup_sigid_intbasis_h IB sigid = lift i) ==>
       P_sigexp_h (SIGIDsigexp_h sigid) s IB s i) /\
     (!IB valdesc vars s1 s2.
       eval_valdesc valdesc s1 s2 vars ==>
       P_spec_h (VALspec_h valdesc) s1 IB s2 (vars_in_int_h vars)) /\
     (!IB excons exdesc s1 s2.
       eval_exdesc exdesc s1 s2 excons ==>
       P_spec_h (EXCEPTIONspec_h exdesc) s1 IB s2 (excons_in_int_h excons)) /\
     (!IB SIE strdesc_h s1 s2.
       P_strdesc_h strdesc_h s1 IB s2 SIE ==>
       P_spec_h (STRUCTUREspec_h strdesc_h) s1 IB s2
         (strintenv_h_in_int_h SIE)) /\
     (!IB I1 I2 spec_h1 spec_h2 s1 s2 s3.
       P_spec_h spec_h1 s1 IB s2 I1 /\
       P_spec_h spec_h2 s2
         (add_strintenv_h_to_intbasis_h IB (strintenv_h_of_int_h I1))
         s3
         I2 ==>
       P_spec_h (LOCALspec_h spec_h1 spec_h2) s1 IB s3 I2) /\
     (!IB nonempty_int_h_list nonempty_lift_int_h_list nonempty_longstrid_list
       s.
       (nonempty_MAP (lookup_longstrid_intbasis_h IB)
          nonempty_longstrid_list =
        nonempty_lift_int_h_list) /\
       (nonempty_MAP lift nonempty_int_h_list = nonempty_lift_int_h_list) ==>
       P_spec_h (OPENspec_h nonempty_longstrid_list) s IB s
         (nonempty_FOLDL_WITH_INIT add_int_h nonempty_int_h_list)) /\
     (!IB nonempty_int_h_list nonempty_lift_int_h_list nonempty_sigid_list s.
       (nonempty_MAP (lookup_sigid_intbasis_h IB) nonempty_sigid_list =
        nonempty_lift_int_h_list) /\
       (nonempty_MAP lift nonempty_int_h_list = nonempty_lift_int_h_list) ==>
       P_spec_h (INCLUDEspec_h nonempty_sigid_list) s IB s
         (nonempty_FOLDL_WITH_INIT add_int_h nonempty_int_h_list)) /\
     (!IB s. P_spec_h EMPTYspec_h s IB s empty_int_h) /\
     (!IB I1 I2 spec_h1 spec_h2 s1 s2 s3.
       P_spec_h spec_h1 s1 IB s2 I1 /\
       P_spec_h spec_h2 s2
         (add_strintenv_h_to_intbasis_h IB (strintenv_h_of_int_h I1))
         s3
         I2 ==>
       P_spec_h (SEQspec_h spec_h1 spec_h2) s1 IB s3 (add_int_h I1 I2)) /\
     (!IB I1 I2 funid sigexp_h sigexp_h' strid s1 s2 s3.
       P_sigexp_h sigexp_h s1 IB s2 I1 /\
       P_sigexp_h sigexp_h' s2
         (add_strintenv_h_to_intbasis_h IB (strintenv_h_map strid I1))
         s3
         I2 ==>
       P_spec_h (FUNCTORspec_h funid strid sigexp_h sigexp_h') s1 IB s3
         (funintenv_h_in_int_h (funintenv_h_map funid I1))) /\
     (!i IB sigexp_h strid s1 s2.
       P_sigexp_h sigexp_h s1 IB s2 i ==>
       P_strdesc_h (STRIDstrdesc_h strid sigexp_h NONE) s1 IB s2
         (strintenv_h_map strid i)) /\
     (!i IB SIE sigexp_h strdesc_h strid s1 s2 s3.
       P_sigexp_h sigexp_h s1 IB s2 i /\
       P_strdesc_h strdesc_h s2 IB s3 SIE ==>
       P_strdesc_h (STRIDstrdesc_h strid sigexp_h (SOME strdesc_h)) s1 IB s3
         (add_strintenv_h (strintenv_h_map strid i) SIE)) ==>
     (!sigexp_h s1 IB s2 i.
       eval_sigexp_h sigexp_h s1 IB s2 i ==>
       P_sigexp_h sigexp_h s1 IB s2 i) /\
     (!spec_h s1 IB s2 i.
       eval_spec_h spec_h s1 IB s2 i ==> P_spec_h spec_h s1 IB s2 i) /\
     (!strdesc_h s1 IB s2 int_h.
       eval_strdesc_h strdesc_h s1 IB s2 int_h ==>
       P_strdesc_h strdesc_h s1 IB s2 int_h)
Rule175a_h
|- !sigexp_h s1 IB s2 i.
     eval_sigexp_h sigexp_h s1 IB s2 i ==>
     (!sigid.
       eval_sigbind_h (BINDsigbind_h sigid sigexp_h NONE) s1 IB s2
         (sigenv_h_map sigid i))
Rule175b_h
|- !sigbind_h IB s3 G sigexp_h s1 i.
     (?s2.
       eval_sigbind_h sigbind_h s2 IB s3 G /\
       eval_sigexp_h sigexp_h s1 IB s2 i) ==>
     (!sigid.
       eval_sigbind_h (BINDsigbind_h sigid sigexp_h (SOME sigbind_h)) s1 IB s3
         (add_sigenv_h (sigenv_h_map sigid i) G))
eval_sigbind_h_induction_thm
|- !P.
     (!sigexp_h s1 IB s2 i.
       eval_sigexp_h sigexp_h s1 IB s2 i ==>
       (!sigid.
         P (BINDsigbind_h sigid sigexp_h NONE) s1 IB s2
           (sigenv_h_map sigid i))) /\
     (!sigbind_h IB s3 G sigexp_h s1 i.
       (?s2. P sigbind_h s2 IB s3 G /\ eval_sigexp_h sigexp_h s1 IB s2 i) ==>
       (!sigid.
         P (BINDsigbind_h sigid sigexp_h (SOME sigbind_h)) s1 IB s3
           (add_sigenv_h (sigenv_h_map sigid i) G))) ==>
     (!sigbind_h s1 IB s2 G.
       eval_sigbind_h sigbind_h s1 IB s2 G ==> P sigbind_h s1 IB s2 G)
Rule172_h
|- !sigbind_h s1 IB s2 G.
     eval_sigbind_h sigbind_h s1 IB s2 G ==>
     eval_sigdec_h (SIGNATUREsigdec_h sigbind_h) s1 IB s2 G
Rule_173_h
|- !s IB. eval_sigdec_h EMPTYsigdec_h s IB s empty_sigenv_h
Rule_174_h
|- !sigdec_h1 s1 IB G1 sigdec_h2 s3 G2.
     (?s2.
       eval_sigdec_h sigdec_h1 s1 IB s2 G1 /\
       eval_sigdec_h sigdec_h2 s2 (add_sigenv_h_to_intbasis_h IB G1) s3
         G2) ==>
     eval_sigdec_h (SEQsigdec_h sigdec_h1 sigdec_h2) s1 IB s3
       (add_sigenv_h G1 G2)
eval_sigdec_h_induction_thm
|- !P.
     (!sigbind_h s1 IB s2 G.
       eval_sigbind_h sigbind_h s1 IB s2 G ==>
       P (SIGNATUREsigdec_h sigbind_h) s1 IB s2 G) /\
     (!s IB. P EMPTYsigdec_h s IB s empty_sigenv_h) /\
     (!sigdec_h1 s1 IB G1 sigdec_h2 s3 G2.
       (?s2.
         P sigdec_h1 s1 IB s2 G1 /\
         P sigdec_h2 s2 (add_sigenv_h_to_intbasis_h IB G1) s3 G2) ==>
       P (SEQsigdec_h sigdec_h1 sigdec_h2) s1 IB s3 (add_sigenv_h G1 G2)) ==>
     (!sigdec_h s1 IB s2 G.
       eval_sigdec_h sigdec_h s1 IB s2 G ==> P sigdec_h s1 IB s2 G)
HOFML_EVAL_STRUCT_RULES_SATISFIED
|- HOFML_eval_structures_pred eval_strexp_h eval_moddec_h eval_strbind_h
     eval_funbind_h
HOFML_eval_structures_induction
|- !P_strexp_h P_moddec_h P_strbind_h P_funbind_h.
     (!B E moddec_h s1 s2.
       P_moddec_h moddec_h s1 B s2 (ENVep_h E) ==>
       P_strexp_h (STRUCTstrexp_h moddec_h) s1 B s2 (ENVep_h E)) /\
     (!B p moddec_h s1 s2.
       P_moddec_h moddec_h s1 B s2 (PACKep_h p) ==>
       P_strexp_h (STRUCTstrexp_h moddec_h) s1 B s2 (PACKep_h p)) /\
     (!B E longstrid s.
       (lift E = lookup_longstrid_basis_h B longstrid) ==>
       P_strexp_h (LONGSTRIDstrexp_h longstrid) s B s (ENVep_h E)) /\
     (!B B' E E' i longfunid strexp_h strexp_h' strid s1 s2 s3.
       (lift (FUNCLOS_H strid i strexp_h' NONE B') =
        lookup_longfunid_basis_h B longfunid) /\
       P_strexp_h strexp_h s1 B s2 (ENVep_h E) /\
       P_strexp_h strexp_h' s2
         (add_basis_h B'
           (strenv_h_in_basis_h (strenv_h_map strid (cut_env_h E i))))
         s3
         (ENVep_h E') ==>
       P_strexp_h (APPstrexp_h longfunid strexp_h) s1 B s3 (ENVep_h E')) /\
     (!B B' i longfunid p strexp_h strexp_h' strid s1 s2.
       (lift (FUNCLOS_H strid i strexp_h' NONE B') =
        lookup_longfunid_basis_h B longfunid) /\
       P_strexp_h strexp_h s1 B s2 (PACKep_h p) ==>
       P_strexp_h (APPstrexp_h longfunid strexp_h) s1 B s2 (PACKep_h p)) /\
     (!B B' E i longfunid p strexp_h strexp_h' strid s1 s2 s3.
       (lift (FUNCLOS_H strid i strexp_h' NONE B') =
        lookup_longfunid_basis_h B longfunid) /\
       P_strexp_h strexp_h s1 B s2 (ENVep_h E) /\
       P_strexp_h strexp_h' s2
         (add_basis_h B'
           (strenv_h_in_basis_h (strenv_h_map strid (cut_env_h E i))))
         s3
         (PACKep_h p) ==>
       P_strexp_h (APPstrexp_h longfunid strexp_h) s1 B s3 (PACKep_h p)) /\
     (!B B' E E' i i' longfunid strexp_h strexp_h' strid s1 s2 s3.
       (lift (FUNCLOS_H strid i strexp_h' (SOME i') B') =
        lookup_longfunid_basis_h B longfunid) /\
       P_strexp_h strexp_h s1 B s2 (ENVep_h E) /\
       P_strexp_h strexp_h' s2
         (add_basis_h B'
           (strenv_h_in_basis_h (strenv_h_map strid (cut_env_h E i))))
         s3
         (ENVep_h E') ==>
       P_strexp_h (APPstrexp_h longfunid strexp_h) s1 B s3
         (ENVep_h (cut_env_h E' i'))) /\
     (!B B' i i' longfunid p strexp_h strexp_h' strid s1 s2.
       (lift (FUNCLOS_H strid i strexp_h' (SOME i') B') =
        lookup_longfunid_basis_h B longfunid) /\
       P_strexp_h strexp_h s1 B s2 (PACKep_h p) ==>
       P_strexp_h (APPstrexp_h longfunid strexp_h) s1 B s2 (PACKep_h p)) /\
     (!B B' E i i' longfunid p strexp_h strexp_h' strid s1 s2 s3.
       (lift (FUNCLOS_H strid i strexp_h' (SOME i') B') =
        lookup_longfunid_basis_h B longfunid) /\
       P_strexp_h strexp_h s1 B s2 (ENVep_h E) /\
       P_strexp_h strexp_h' s2
         (add_basis_h B'
           (strenv_h_in_basis_h (strenv_h_map strid (cut_env_h E i))))
         s3
         (PACKep_h p) ==>
       P_strexp_h (APPstrexp_h longfunid strexp_h) s1 B s3 (PACKep_h p)) /\
     (!B E E' moddec_h strexp_h s1 s2 s3.
       P_moddec_h moddec_h s1 B s2 (ENVep_h E) /\
       P_strexp_h strexp_h s2 (add_env_h_to_basis_h B E) s3 (ENVep_h E') ==>
       P_strexp_h (LETstrexp_h moddec_h strexp_h) s1 B s3 (ENVep_h E')) /\
     (!B p moddec_h strexp_h s1 s2.
       P_moddec_h moddec_h s1 B s2 (PACKep_h p) ==>
       P_strexp_h (LETstrexp_h moddec_h strexp_h) s1 B s2 (PACKep_h p)) /\
     (!B E p moddec_h strexp_h s1 s2 s3.
       P_moddec_h moddec_h s1 B s2 (ENVep_h E) /\
       P_strexp_h strexp_h s2 (add_env_h_to_basis_h B E) s3 (PACKep_h p) ==>
       P_strexp_h (LETstrexp_h moddec_h strexp_h) s1 B s3 (PACKep_h p)) /\
     (!B E' dec s1 s2.
       eval_dec dec s1 (cut_env_h_to_env (env_h_of_basis_h B)) s2
         (ENVep E') ==>
       P_moddec_h (DECmoddec_h dec) s1 B s2 (ENVep_h (env_in_env_h E'))) /\
     (!B dec p s1 s2.
       eval_dec dec s1 (cut_env_h_to_env (env_h_of_basis_h B)) s2
         (PACKep p) ==>
       P_moddec_h (DECmoddec_h dec) s1 B s2 (PACKep_h p)) /\
     (!B SE strbind_h s1 s2.
       P_strbind_h strbind_h s1 B s2 (STRENVsp_h SE) ==>
       P_moddec_h (STRUCTUREmoddec_h strbind_h) s1 B s2
         (ENVep_h (strenv_h_in_env_h SE))) /\
     (!B p strbind_h s1 s2.
       P_strbind_h strbind_h s1 B s2 (PACKsp_h p) ==>
       P_moddec_h (STRUCTUREmoddec_h strbind_h) s1 B s2 (PACKep_h p)) /\
     (!B E1 E2 moddec_h1 moddec_h2 s1 s2 s3.
       P_moddec_h moddec_h1 s1 B s2 (ENVep_h E1) /\
       P_moddec_h moddec_h2 s2 (add_env_h_to_basis_h B E1) s3 (ENVep_h E2) ==>
       P_moddec_h (LOCALmoddec_h moddec_h1 moddec_h2) s1 B s3 (ENVep_h E2)) /\
     (!B p moddec_h1 moddec_h2 s1 s2.
       P_moddec_h moddec_h1 s1 B s2 (PACKep_h p) ==>
       P_moddec_h (LOCALmoddec_h moddec_h1 moddec_h2) s1 B s2 (PACKep_h p)) /\
     (!B E p moddec_h1 moddec_h2 s1 s2 s3.
       P_moddec_h moddec_h1 s1 B s2 (ENVep_h E) /\
       P_moddec_h moddec_h2 s2 (add_env_h_to_basis_h B E) s3 (PACKep_h p) ==>
       P_moddec_h (LOCALmoddec_h moddec_h1 moddec_h2) s1 B s3 (PACKep_h p)) /\
     (!B E_1_n longstrid_1_n s.
       (nonempty_MAP (lookup_longstrid_basis_h B) longstrid_1_n =
        nonempty_MAP lift E_1_n) ==>
       P_moddec_h (OPENmoddec_h longstrid_1_n) s B s
         (ENVep_h (nonempty_FOLDL_WITH_INIT add_env_h E_1_n))) /\
     (!B s. P_moddec_h EMPTYmoddec_h s B s (ENVep_h empty_env_h)) /\
     (!B E1 E2 moddec_h1 moddec_h2 s1 s2 s3.
       P_moddec_h moddec_h1 s1 B s2 (ENVep_h E1) /\
       P_moddec_h moddec_h2 s2 (add_env_h_to_basis_h B E1) s3 (ENVep_h E2) ==>
       P_moddec_h (SEQmoddec_h moddec_h1 moddec_h2) s1 B s3
         (ENVep_h (add_env_h E1 E2))) /\
     (!B p moddec_h1 moddec_h2 s1 s2.
       P_moddec_h moddec_h1 s1 B s2 (PACKep_h p) ==>
       P_moddec_h (SEQmoddec_h moddec_h1 moddec_h2) s1 B s2 (PACKep_h p)) /\
     (!B E p moddec_h1 moddec_h2 s1 s2 s3.
       P_moddec_h moddec_h1 s1 B s2 (ENVep_h E) /\
       P_moddec_h moddec_h2 s2 (add_env_h_to_basis_h B E) s3 (PACKep_h p) ==>
       P_moddec_h (SEQmoddec_h moddec_h1 moddec_h2) s1 B s3 (PACKep_h p)) /\
     (!B f funbind_h s1 s2.
       P_funbind_h funbind_h s1 B s2 f ==>
       P_moddec_h (FUNCTORmoddec_h funbind_h) s1 B s2
         (ENVep_h (funenv_h_in_env_h f))) /\
     (!B E strexp_h strid s1 s2.
       P_strexp_h strexp_h s1 B s2 (ENVep_h E) ==>
       P_strbind_h (BINDstrbind_h strid NONE strexp_h NONE) s1 B s2
         (STRENVsp_h (strenv_h_map strid E))) /\
     (!B p strexp_h strid s1 s2.
       P_strexp_h strexp_h s1 B s2 (PACKep_h p) ==>
       P_strbind_h (BINDstrbind_h strid NONE strexp_h NONE) s1 B s2
         (PACKsp_h p)) /\
     (!B E i sigexp_h strexp_h strid s1 s2 s3.
       P_strexp_h strexp_h s1 B s2 (ENVep_h E) /\
       eval_sigexp_h sigexp_h s2 (Inter_basis_h B) s3 i ==>
       P_strbind_h (BINDstrbind_h strid (SOME sigexp_h) strexp_h NONE) s1 B s3
         (STRENVsp_h (strenv_h_map strid (cut_env_h E i)))) /\
     (!B p sigexp_h strexp_h strid s1 s2.
       P_strexp_h strexp_h s1 B s2 (PACKep_h p) ==>
       P_strbind_h (BINDstrbind_h strid (SOME sigexp_h) strexp_h NONE) s1 B s2
         (PACKsp_h p)) /\
     (!B E SE strbind_h strexp_h strid s1 s2 s3.
       P_strexp_h strexp_h s1 B s2 (ENVep_h E) /\
       P_strbind_h strbind_h s2 B s3 (STRENVsp_h SE) ==>
       P_strbind_h (BINDstrbind_h strid NONE strexp_h (SOME strbind_h)) s1 B
         s3
         (STRENVsp_h (add_strenv_h (strenv_h_map strid E) SE))) /\
     (!B p strbind_h strexp_h strid s1 s2.
       P_strexp_h strexp_h s1 B s2 (PACKep_h p) ==>
       P_strbind_h (BINDstrbind_h strid NONE strexp_h (SOME strbind_h)) s1 B
         s2
         (PACKsp_h p)) /\
     (!B E p strbind_h strexp_h strid s1 s2 s3.
       P_strexp_h strexp_h s1 B s2 (ENVep_h E) /\
       P_strbind_h strbind_h s2 B s3 (PACKsp_h p) ==>
       P_strbind_h (BINDstrbind_h strid NONE strexp_h (SOME strbind_h)) s1 B
         s3
         (PACKsp_h p)) /\
     (!B E i SE sigexp_h strbind_h strexp_h strid s1 s2 s3 s4.
       P_strexp_h strexp_h s1 B s2 (ENVep_h E) /\
       eval_sigexp_h sigexp_h s2 (Inter_basis_h B) s3 i /\
       P_strbind_h strbind_h s3 B s4 (STRENVsp_h SE) ==>
       P_strbind_h
         (BINDstrbind_h strid (SOME sigexp_h) strexp_h (SOME strbind_h))
         s1
         B
         s4
         (STRENVsp_h
           (add_strenv_h (strenv_h_map strid (cut_env_h E i)) SE))) /\
     (!B p sigexp_h strbind_h strexp_h strid s1 s2.
       P_strexp_h strexp_h s1 B s2 (PACKep_h p) ==>
       P_strbind_h
         (BINDstrbind_h strid (SOME sigexp_h) strexp_h (SOME strbind_h))
         s1
         B
         s2
         (PACKsp_h p)) /\
     (!B E i p sigexp_h strbind_h strexp_h strid s1 s2 s3 s4.
       P_strexp_h strexp_h s1 B s2 (ENVep_h E) /\
       eval_sigexp_h sigexp_h s2 (Inter_basis_h B) s3 i /\
       P_strbind_h strbind_h s3 B s4 (PACKsp_h p) ==>
       P_strbind_h
         (BINDstrbind_h strid (SOME sigexp_h) strexp_h (SOME strbind_h))
         s1
         B
         s4
         (PACKsp_h p)) /\
     (!B funid i sigexp_h strexp_h strid s1 s2.
       eval_sigexp_h sigexp_h s1 (Inter_basis_h B) s2 i ==>
       P_funbind_h (BINDfunbind_h funid strid sigexp_h NONE strexp_h NONE) s1
         B
         s2
         (funenv_h_map funid (FUNCLOS_H strid i strexp_h NONE B))) /\
     (!B funid i i' sigexp_h sigexp_h' strexp_h strid s1 s2 s3.
       eval_sigexp_h sigexp_h s1 (Inter_basis_h B) s2 i /\
       eval_sigexp_h sigexp_h' s2
         (add_strintenv_h_to_intbasis_h (Inter_basis_h B)
           (strintenv_h_map strid i))
         s3
         i' ==>
       P_funbind_h
         (BINDfunbind_h funid strid sigexp_h (SOME sigexp_h') strexp_h NONE)
         s1
         B
         s3
         (funenv_h_map funid (FUNCLOS_H strid i strexp_h (SOME i') B))) /\
     (!B funbind_h funid f i sigexp_h strexp_h strid s1 s2 s3.
       eval_sigexp_h sigexp_h s1 (Inter_basis_h B) s2 i /\
       P_funbind_h funbind_h s2 B s3 f ==>
       P_funbind_h
         (BINDfunbind_h funid strid sigexp_h NONE strexp_h (SOME funbind_h))
         s1
         B
         s3
         (add_funenv_h
            (funenv_h_map funid (FUNCLOS_H strid i strexp_h NONE B))
           f)) /\
     (!B funbind_h funid f i i' sigexp_h sigexp_h' strexp_h strid s1 s2 s3 s4.
       eval_sigexp_h sigexp_h s1 (Inter_basis_h B) s2 i /\
       eval_sigexp_h sigexp_h' s2
         (add_strintenv_h_to_intbasis_h (Inter_basis_h B)
           (strintenv_h_map strid i))
         s3
         i' /\
       P_funbind_h funbind_h s3 B s4 f ==>
       P_funbind_h
         (BINDfunbind_h funid strid sigexp_h (SOME sigexp_h') strexp_h
           (SOME funbind_h))
         s1
         B
         s4
         (add_funenv_h
            (funenv_h_map funid (FUNCLOS_H strid i strexp_h (SOME i') B))
           f)) /\
     (!B funclos_h funid longfunid s.
       (lookup_longfunid_basis_h B longfunid = lift funclos_h) ==>
       P_funbind_h (REBINDfunbind_h funid longfunid) s B s
         (funenv_h_map funid funclos_h)) ==>
     (!strexp_h s1 B s2 ep.
       eval_strexp_h strexp_h s1 B s2 ep ==>
       P_strexp_h strexp_h s1 B s2 ep) /\
     (!moddec_h s1 B s2 ep.
       eval_moddec_h moddec_h s1 B s2 ep ==>
       P_moddec_h moddec_h s1 B s2 ep) /\
     (!strbind_h s1 B s2 sep.
       eval_strbind_h strbind_h s1 B s2 sep ==>
       P_strbind_h strbind_h s1 B s2 sep) /\
     (!funbind_h s1 B s2 fe.
       eval_funbind_h funbind_h s1 B s2 fe ==>
       P_funbind_h funbind_h s1 B s2 fe)
Rule191a_h
|- !moddec_h s1 B s2 E.
     eval_moddec_h moddec_h s1 B s2 (ENVep_h E) ==>
     eval_topdec_h (MODDEC_H moddec_h) s1 B s2
       (BASISbp_h (env_h_in_basis_h E))
Rule191b_h
|- !moddec_h s1 B s2 p.
     eval_moddec_h moddec_h s1 B s2 (PACKep_h p) ==>
     eval_topdec_h (MODDEC_H moddec_h) s1 B s2 (PACKbp_h p)
Rule192_h
|- !sigdec_h s1 B s2 G.
     eval_sigdec_h sigdec_h s1 (Inter_basis_h B) s2 G ==>
     eval_topdec_h (SIGDEC_H sigdec_h) s1 B s2
       (BASISbp_h (sigenv_h_in_basis_h G))
eval_topdec_h_induction_thm
|- !P.
     (!moddec_h s1 B s2 E.
       eval_moddec_h moddec_h s1 B s2 (ENVep_h E) ==>
       P (MODDEC_H moddec_h) s1 B s2 (BASISbp_h (env_h_in_basis_h E))) /\
     (!moddec_h s1 B s2 p.
       eval_moddec_h moddec_h s1 B s2 (PACKep_h p) ==>
       P (MODDEC_H moddec_h) s1 B s2 (PACKbp_h p)) /\
     (!sigdec_h s1 B s2 G.
       eval_sigdec_h sigdec_h s1 (Inter_basis_h B) s2 G ==>
       P (SIGDEC_H sigdec_h) s1 B s2 (BASISbp_h (sigenv_h_in_basis_h G))) ==>
     (!topdec_h s1 B s2 bp.
       eval_topdec_h topdec_h s1 B s2 bp ==> P topdec_h s1 B s2 bp)