Theory: common_ModML

Parents


Type constants


Term constants


Axioms


Definitions

sigid_TY_DEF
|- ?rep. TYPE_DEFINITION (TRP (\v tl. (?s. v = s) /\ (LENGTH tl = 0))) rep
sigid_ISO_DEF
|- (!a. ABS_sigid (REP_sigid a) = a) /\
   (!r.
     TRP (\v tl. (?s. v = s) /\ (LENGTH tl = 0)) r =
     REP_sigid (ABS_sigid r) =
     r)
SIGID_DEF
|- !s. SIGID s = ABS_sigid (Node s [])
SIGID_arg_DEF
|- !s. SIGID_arg (SIGID s) = s
funid_TY_DEF
|- ?rep. TYPE_DEFINITION (TRP (\v tl. (?s. v = s) /\ (LENGTH tl = 0))) rep
funid_ISO_DEF
|- (!a. ABS_funid (REP_funid a) = a) /\
   (!r.
     TRP (\v tl. (?s. v = s) /\ (LENGTH tl = 0)) r =
     REP_funid (ABS_funid r) =
     r)
FUNID_DEF
|- !s. FUNID s = ABS_funid (Node s [])
FUNID_arg_DEF
|- !s. FUNID_arg (FUNID s) = s
less_funid_DEF
|- !f1 f2. less_funid f1 f2 = ltstring (FUNID_arg f1) (FUNID_arg f2)
joint_ty_valdesc_valdesc_option_valdesc_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (TRP
         (\v tl.
           (?v. v = INL v) /\ (LENGTH tl = SUC 0) \/
           (v = INR (INL one)) /\ (LENGTH tl = 0) \/
           (v = INR (INR one)) /\ (LENGTH tl = SUC 0)))
       rep
joint_ty_valdesc_valdesc_option_valdesc_ISO_DEF
|- (!a.
     ABS_joint_ty_valdesc_valdesc_option_valdesc
       (REP_joint_ty_valdesc_valdesc_option_valdesc a) =
     a) /\
   (!r.
     TRP
       (\v tl.
         (?v. v = INL v) /\ (LENGTH tl = SUC 0) \/
         (v = INR (INL one)) /\ (LENGTH tl = 0) \/
         (v = INR (INR one)) /\ (LENGTH tl = SUC 0))
       r =
     REP_joint_ty_valdesc_valdesc_option_valdesc
       (ABS_joint_ty_valdesc_valdesc_option_valdesc r) =
     r)
JOINT_int_VARvaldesc_DEF
|- !v' j.
     JOINT_int_VARvaldesc v' j =
     ABS_joint_ty_valdesc_valdesc_option_valdesc
       (Node (INL v') [REP_joint_ty_valdesc_valdesc_option_valdesc j])
JOINT_int_valdesc_NONE_valdesc_DEF
|- JOINT_int_valdesc_NONE_valdesc =
   ABS_joint_ty_valdesc_valdesc_option_valdesc (Node (INR (INL one)) [])
JOINT_int_valdesc_SOME_valdesc_DEF
|- !j.
     JOINT_int_valdesc_SOME_valdesc j =
     ABS_joint_ty_valdesc_valdesc_option_valdesc
       (Node (INR (INR one)) [REP_joint_ty_valdesc_valdesc_option_valdesc j])
joint_ty_valdesc_valdesc_option_valdesc_select_DEF
|- (!v' j.
     joint_ty_valdesc_valdesc_option_valdesc_select
       (JOINT_int_VARvaldesc v' j) =
     ((joint_ty_valdesc_valdesc_option_valdesc_select j = 2) => 1 | 0)) /\
   (joint_ty_valdesc_valdesc_option_valdesc_select
      JOINT_int_valdesc_NONE_valdesc =
    2) /\
   (!j.
     joint_ty_valdesc_valdesc_option_valdesc_select
       (JOINT_int_valdesc_SOME_valdesc j) =
     ((joint_ty_valdesc_valdesc_option_valdesc_select j = 1) => 2 | 0))
valdesc_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x. joint_ty_valdesc_valdesc_option_valdesc_select x = 1)
       rep
valdesc_REP_ABS
|- (!a. valdesc_abs (valdesc_rep a) = a) /\
   (!r.
     (\x. joint_ty_valdesc_valdesc_option_valdesc_select x = 1) r =
     valdesc_rep (valdesc_abs r) =
     r)
valdesc_option_valdesc_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (\x. joint_ty_valdesc_valdesc_option_valdesc_select x = 2)
       rep
valdesc_option_valdesc_REP_ABS
|- (!a. valdesc_option_valdesc_abs (valdesc_option_valdesc_rep a) = a) /\
   (!r.
     (\x. joint_ty_valdesc_valdesc_option_valdesc_select x = 2) r =
     valdesc_option_valdesc_rep (valdesc_option_valdesc_abs r) =
     r)
int_VARvaldesc_DEF
|- !x1 x2.
     int_VARvaldesc x1 x2 =
     valdesc_abs (JOINT_int_VARvaldesc x1 (valdesc_option_valdesc_rep x2))
int_valdesc_NONE_valdesc_DEF
|- int_valdesc_NONE_valdesc =
   valdesc_option_valdesc_abs JOINT_int_valdesc_NONE_valdesc
int_valdesc_SOME_valdesc_DEF
|- !x1.
     int_valdesc_SOME_valdesc x1 =
     valdesc_option_valdesc_abs
       (JOINT_int_valdesc_SOME_valdesc (valdesc_rep x1))
int_inj_valdesc_option_valdesc
|- (int_inj_valdesc_option_valdesc NONE = int_valdesc_NONE_valdesc) /\
   (!x0.
     int_inj_valdesc_option_valdesc (SOME x0) = int_valdesc_SOME_valdesc x0)
int_inv_valdesc_option_valdesc
|- (int_inv_valdesc_option_valdesc int_valdesc_NONE_valdesc = NONE) /\
   (!x1.
     int_inv_valdesc_option_valdesc (int_valdesc_SOME_valdesc x1) = SOME x1)
VARvaldesc
|- VARvaldesc =
   (\x0 x1. int_VARvaldesc x0 (int_inj_valdesc_option_valdesc x1))
dist_aux_ftn_valdesc_DEF
|- (!x1 x2. dist_aux_ftn_valdesc (int_VARvaldesc x1 x2) = 0) /\
   (dist_aux_ftn_valdesc_option_valdesc int_valdesc_NONE_valdesc = 1) /\
   (!x1.
     dist_aux_ftn_valdesc_option_valdesc (int_valdesc_SOME_valdesc x1) = 2)
int_VARvaldesc_arg1_DEF
|- !x1 x2. int_VARvaldesc_arg1 (int_VARvaldesc x1 x2) = x1
int_VARvaldesc_arg2_DEF
|- !x1 x2. int_VARvaldesc_arg2 (int_VARvaldesc x1 x2) = x2
int_valdesc_SOME_valdesc_arg_DEF
|- (!x1. int_valdesc_SOME_valdesc_arg (int_valdesc_SOME_valdesc x1) = x1) /\
   (int_valdesc_SOME_valdesc_arg int_valdesc_NONE_valdesc = (@x. T))
joint_ty_exdesc_exdesc_option_exdesc_TY_DEF
|- ?rep.
     TYPE_DEFINITION
       (TRP
         (\v tl.
           (?e. v = INL e) /\ (LENGTH tl = SUC 0) \/
           (v = INR (INL one)) /\ (LENGTH tl = 0) \/
           (v = INR (INR one)) /\ (LENGTH tl = SUC 0)))
       rep
joint_ty_exdesc_exdesc_option_exdesc_ISO_DEF
|- (!a.
     ABS_joint_ty_exdesc_exdesc_option_exdesc
       (REP_joint_ty_exdesc_exdesc_option_exdesc a) =
     a) /\
   (!r.
     TRP
       (\v tl.
         (?e. v = INL e) /\ (LENGTH tl = SUC 0) \/
         (v = INR (INL one)) /\ (LENGTH tl = 0) \/
         (v = INR (INR one)) /\ (LENGTH tl = SUC 0))
       r =
     REP_joint_ty_exdesc_exdesc_option_exdesc
       (ABS_joint_ty_exdesc_exdesc_option_exdesc r) =
     r)
JOINT_int_EXCONexdesc_DEF
|- !e j.
     JOINT_int_EXCONexdesc e j =
     ABS_joint_ty_exdesc_exdesc_option_exdesc
       (Node (INL e) [REP_joint_ty_exdesc_exdesc_option_exdesc j])
JOINT_int_exdesc_NONE_exdesc_DEF
|- JOINT_int_exdesc_NONE_exdesc =
   ABS_joint_ty_exdesc_exdesc_option_exdesc (Node (INR (INL one)) [])
JOINT_int_exdesc_SOME_exdesc_DEF
|- !j.
     JOINT_int_exdesc_SOME_exdesc j =
     ABS_joint_ty_exdesc_exdesc_option_exdesc
       (Node (INR (INR one)) [REP_joint_ty_exdesc_exdesc_option_exdesc j])
joint_ty_exdesc_exdesc_option_exdesc_select_DEF
|- (!e' j.
     joint_ty_exdesc_exdesc_option_exdesc_select
       (JOINT_int_EXCONexdesc e' j) =
     ((joint_ty_exdesc_exdesc_option_exdesc_select j = 2) => 1 | 0)) /\
   (joint_ty_exdesc_exdesc_option_exdesc_select JOINT_int_exdesc_NONE_exdesc =
    2) /\
   (!j.
     joint_ty_exdesc_exdesc_option_exdesc_select
       (JOINT_int_exdesc_SOME_exdesc j) =
     ((joint_ty_exdesc_exdesc_option_exdesc_select j = 1) => 2 | 0))
exdesc_TY_DEF
|- ?rep.
     TYPE_DEFINITION (\x. joint_ty_exdesc_exdesc_option_exdesc_select x = 1)
       rep
exdesc_REP_ABS
|- (!a. exdesc_abs (exdesc_rep a) = a) /\
   (!r.
     (\x. joint_ty_exdesc_exdesc_option_exdesc_select x = 1) r =
     exdesc_rep (exdesc_abs r) =
     r)
exdesc_option_exdesc_TY_DEF
|- ?rep.
     TYPE_DEFINITION (\x. joint_ty_exdesc_exdesc_option_exdesc_select x = 2)
       rep
exdesc_option_exdesc_REP_ABS
|- (!a. exdesc_option_exdesc_abs (exdesc_option_exdesc_rep a) = a) /\
   (!r.
     (\x. joint_ty_exdesc_exdesc_option_exdesc_select x = 2) r =
     exdesc_option_exdesc_rep (exdesc_option_exdesc_abs r) =
     r)
int_EXCONexdesc_DEF
|- !x1 x2.
     int_EXCONexdesc x1 x2 =
     exdesc_abs (JOINT_int_EXCONexdesc x1 (exdesc_option_exdesc_rep x2))
int_exdesc_NONE_exdesc_DEF
|- int_exdesc_NONE_exdesc =
   exdesc_option_exdesc_abs JOINT_int_exdesc_NONE_exdesc
int_exdesc_SOME_exdesc_DEF
|- !x1.
     int_exdesc_SOME_exdesc x1 =
     exdesc_option_exdesc_abs (JOINT_int_exdesc_SOME_exdesc (exdesc_rep x1))
int_inj_exdesc_option_exdesc
|- (int_inj_exdesc_option_exdesc NONE = int_exdesc_NONE_exdesc) /\
   (!x0. int_inj_exdesc_option_exdesc (SOME x0) = int_exdesc_SOME_exdesc x0)
int_inv_exdesc_option_exdesc
|- (int_inv_exdesc_option_exdesc int_exdesc_NONE_exdesc = NONE) /\
   (!x1. int_inv_exdesc_option_exdesc (int_exdesc_SOME_exdesc x1) = SOME x1)
EXCONexdesc
|- EXCONexdesc =
   (\x0 x1. int_EXCONexdesc x0 (int_inj_exdesc_option_exdesc x1))
dist_aux_ftn_exdesc_DEF
|- (!x1 x2. dist_aux_ftn_exdesc (int_EXCONexdesc x1 x2) = 0) /\
   (dist_aux_ftn_exdesc_option_exdesc int_exdesc_NONE_exdesc = 1) /\
   (!x1. dist_aux_ftn_exdesc_option_exdesc (int_exdesc_SOME_exdesc x1) = 2)
int_EXCONexdesc_arg1_DEF
|- !x1 x2. int_EXCONexdesc_arg1 (int_EXCONexdesc x1 x2) = x1
int_EXCONexdesc_arg2_DEF
|- !x1 x2. int_EXCONexdesc_arg2 (int_EXCONexdesc x1 x2) = x2
int_exdesc_SOME_exdesc_arg_DEF
|- (!x1. int_exdesc_SOME_exdesc_arg (int_exdesc_SOME_exdesc x1) = x1) /\
   (int_exdesc_SOME_exdesc_arg int_exdesc_NONE_exdesc = (@x. T))
eval_valdesc_DEF
|- ((!var s1 s2. eval_valdesc (VARvaldesc var NONE) s1 s2 {var}) /\
    (!valdesc s1 s2 vars.
      eval_valdesc valdesc s1 s2 vars ==>
      (!var.
        eval_valdesc (VARvaldesc var (SOME valdesc)) s1 s2
          ({var} UNION vars)))) /\
   (!P.
     (!var s1 s2. P (VARvaldesc var NONE) s1 s2 {var}) /\
     (!valdesc s1 s2 vars.
       P valdesc s1 s2 vars ==>
       (!var. P (VARvaldesc var (SOME valdesc)) s1 s2 ({var} UNION vars))) ==>
     (!valdesc s1 s2 vars.
       eval_valdesc valdesc s1 s2 vars ==> P valdesc s1 s2 vars))
eval_exdesc_DEF
|- ((!excon s1 s2. eval_exdesc (EXCONexdesc excon NONE) s1 s2 {excon}) /\
    (!exdesc s1 s2 excons.
      eval_exdesc exdesc s1 s2 excons ==>
      (!excon.
        eval_exdesc (EXCONexdesc excon (SOME exdesc)) s1 s2
          ({excon} UNION excons)))) /\
   (!P.
     (!excon s1 s2. P (EXCONexdesc excon NONE) s1 s2 {excon}) /\
     (!exdesc s1 s2 excons.
       P exdesc s1 s2 excons ==>
       (!excon.
         P (EXCONexdesc excon (SOME exdesc)) s1 s2
           ({excon} UNION excons))) ==>
     (!exdesc s1 s2 excons.
       eval_exdesc exdesc s1 s2 excons ==> P exdesc s1 s2 excons))

Theorems

sigid_Axiom
|- !f. ?!fn. !s. fn (SIGID s) = f s
sigid_induction_thm
|- !P. (!s. P (SIGID s)) ==> (!s. P s)
sigid_cases_thm
|- !s. ?s'. s = SIGID s'
sigid_constructors_one_one
|- !s s'. (SIGID s = SIGID s') = s = s'
funid_Axiom
|- !f. ?!fn. !s. fn (FUNID s) = f s
funid_induction_thm
|- !P. (!s. P (FUNID s)) ==> (!f. P f)
funid_cases_thm
|- !f. ?s. f = FUNID s
funid_constructors_one_one
|- !s s'. (FUNID s = FUNID s') = s = s'
joint_ty_valdesc_valdesc_option_valdesc_Axiom
|- !f0 e f1.
     ?!fn.
       (!v' j. fn (JOINT_int_VARvaldesc v' j) = f0 (fn j) v' j) /\
       (fn JOINT_int_valdesc_NONE_valdesc = e) /\
       (!j. fn (JOINT_int_valdesc_SOME_valdesc j) = f1 (fn j) j)
valdesc_rec_thm
|- !VARvaldesc_case valdesc_NONE_valdesc_case valdesc_SOME_valdesc_case.
     ?y y'.
       (!x1 x2. y (VARvaldesc x1 x2) = VARvaldesc_case (y' x2) x1 x2) /\
       (y' NONE = valdesc_NONE_valdesc_case) /\
       (!x1. y' (SOME x1) = valdesc_SOME_valdesc_case (y x1) x1)
valdesc_induction_thm
|- !valdesc_Prop valdesc_option_valdesc_Prop.
     (!y y'.
       valdesc_option_valdesc_Prop y' ==> valdesc_Prop (VARvaldesc y y')) /\
     valdesc_option_valdesc_Prop NONE /\
     (!y. valdesc_Prop y ==> valdesc_option_valdesc_Prop (SOME y)) ==>
     (!x1. valdesc_Prop x1) /\ (!x2. valdesc_option_valdesc_Prop x2)
valdesc_unique_thm
|- !VARvaldesc_case valdesc_NONE_valdesc_case valdesc_SOME_valdesc_case fn1
    fn2 fn1' fn2'.
     (!y y'. fn1 (VARvaldesc y y') = VARvaldesc_case (fn2 y') y y') /\
     (fn2 NONE = valdesc_NONE_valdesc_case) /\
     (!y. fn2 (SOME y) = valdesc_SOME_valdesc_case (fn1 y) y) ==>
     (!y y'. fn1' (VARvaldesc y y') = VARvaldesc_case (fn2' y') y y') /\
     (fn2' NONE = valdesc_NONE_valdesc_case) /\
     (!y. fn2' (SOME y) = valdesc_SOME_valdesc_case (fn1' y) y) ==>
     (fn1 = fn1') /\ (fn2 = fn2')
valdesc_constructors_distinct
|- !x1'. ~(NONE = SOME x1')
valdesc_constructors_one_one
|- (!x1 x2 x1' x2'.
     (VARvaldesc x1 x2 = VARvaldesc x1' x2') = (x1 = x1') /\ (x2 = x2')) /\
   (!x1 x1'. (SOME x1 = SOME x1') = x1 = x1')
valdesc_cases_thm
|- (!x1. ?y y'. x1 = VARvaldesc y y') /\
   (!x2. (x2 = NONE) \/ (?y. x2 = SOME y))
joint_ty_exdesc_exdesc_option_exdesc_Axiom
|- !f0 e f1.
     ?!fn.
       (!e' j. fn (JOINT_int_EXCONexdesc e' j) = f0 (fn j) e' j) /\
       (fn JOINT_int_exdesc_NONE_exdesc = e) /\
       (!j. fn (JOINT_int_exdesc_SOME_exdesc j) = f1 (fn j) j)
exdesc_rec_thm
|- !EXCONexdesc_case exdesc_NONE_exdesc_case exdesc_SOME_exdesc_case.
     ?y y'.
       (!x1 x2. y (EXCONexdesc x1 x2) = EXCONexdesc_case (y' x2) x1 x2) /\
       (y' NONE = exdesc_NONE_exdesc_case) /\
       (!x1. y' (SOME x1) = exdesc_SOME_exdesc_case (y x1) x1)
exdesc_induction_thm
|- !exdesc_Prop exdesc_option_exdesc_Prop.
     (!y y'.
       exdesc_option_exdesc_Prop y' ==> exdesc_Prop (EXCONexdesc y y')) /\
     exdesc_option_exdesc_Prop NONE /\
     (!y. exdesc_Prop y ==> exdesc_option_exdesc_Prop (SOME y)) ==>
     (!x1. exdesc_Prop x1) /\ (!x2. exdesc_option_exdesc_Prop x2)
exdesc_unique_thm
|- !EXCONexdesc_case exdesc_NONE_exdesc_case exdesc_SOME_exdesc_case fn1 fn2
    fn1' fn2'.
     (!y y'. fn1 (EXCONexdesc y y') = EXCONexdesc_case (fn2 y') y y') /\
     (fn2 NONE = exdesc_NONE_exdesc_case) /\
     (!y. fn2 (SOME y) = exdesc_SOME_exdesc_case (fn1 y) y) ==>
     (!y y'. fn1' (EXCONexdesc y y') = EXCONexdesc_case (fn2' y') y y') /\
     (fn2' NONE = exdesc_NONE_exdesc_case) /\
     (!y. fn2' (SOME y) = exdesc_SOME_exdesc_case (fn1' y) y) ==>
     (fn1 = fn1') /\ (fn2 = fn2')
exdesc_constructors_distinct
|- !x1'. ~(NONE = SOME x1')
exdesc_constructors_one_one
|- (!x1 x2 x1' x2'.
     (EXCONexdesc x1 x2 = EXCONexdesc x1' x2') = (x1 = x1') /\ (x2 = x2')) /\
   (!x1 x1'. (SOME x1 = SOME x1') = x1 = x1')
exdesc_cases_thm
|- (!x1. ?y y'. x1 = EXCONexdesc y y') /\
   (!x2. (x2 = NONE) \/ (?y. x2 = SOME y))
Rule184a
|- !var s1 s2. eval_valdesc (VARvaldesc var NONE) s1 s2 {var}
Rule184b
|- !valdesc s1 s2 vars.
     eval_valdesc valdesc s1 s2 vars ==>
     (!var.
       eval_valdesc (VARvaldesc var (SOME valdesc)) s1 s2 ({var} UNION vars))
eval_valdesc_induction_thm
|- !P.
     (!var s1 s2. P (VARvaldesc var NONE) s1 s2 {var}) /\
     (!valdesc s1 s2 vars.
       P valdesc s1 s2 vars ==>
       (!var. P (VARvaldesc var (SOME valdesc)) s1 s2 ({var} UNION vars))) ==>
     (!valdesc s1 s2 vars.
       eval_valdesc valdesc s1 s2 vars ==> P valdesc s1 s2 vars)
Rule185a
|- !excon s1 s2. eval_exdesc (EXCONexdesc excon NONE) s1 s2 {excon}
Rule185b
|- !exdesc s1 s2 excons.
     eval_exdesc exdesc s1 s2 excons ==>
     (!excon.
       eval_exdesc (EXCONexdesc excon (SOME exdesc)) s1 s2
         ({excon} UNION excons))
eval_exdesc_induction_thm
|- !P.
     (!excon s1 s2. P (EXCONexdesc excon NONE) s1 s2 {excon}) /\
     (!exdesc s1 s2 excons.
       P exdesc s1 s2 excons ==>
       (!excon.
         P (EXCONexdesc excon (SOME exdesc)) s1 s2
           ({excon} UNION excons))) ==>
     (!exdesc s1 s2 excons.
       eval_exdesc exdesc s1 s2 excons ==> P exdesc s1 s2 excons)