Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  Nominal2.thy

  Sprache: Isabelle
 

theory Nominal2
imports
  Nominal2_Base Nominal2_Abs Nominal2_FCB
keywords
  "nominal_datatype" :: thy_defn and
  "nominal_function" "nominal_inductive" "nominal_termination" :: thy_goal_defn and
  "avoids" "binds"
begin

ML_file nominal_dt_data.ML
ML open Nominal_Dt_Data

ML_file nominal_dt_rawfuns.ML
ML open Nominal_Dt_RawFuns

ML_file nominal_dt_alpha.ML
ML open Nominal_Dt_Alpha

ML_file nominal_dt_quot.ML
ML open Nominal_Dt_Quot

(*****************************************)
(* setup for induction principles method *)
ML_file nominal_induct.ML
method_setup nominal_induct =
  NominalInduct.nominal_induct_method
  nominal induction

(****************************************************)
(* inductive definition involving nominal datatypes *)
ML_file nominal_inductive.ML


(***************************************)
(* forked code of the function package *)
(* for defining nominal functions      *)
ML_file nominal_function_common.ML
ML_file nominal_function_core.ML
ML_file nominal_mutual.ML
ML_file nominal_function.ML
ML_file nominal_termination.ML


sectionInterface for nominal_datatype

ML 
  get_cnstrs dts =
 map snd dts

  get_typed_cnstrs dts =
 flat (map (fn ((bn, _, _), constrs) =>
 (map (fn (bn', _, _) => (Binding.name_of bn, Binding.name_of bn')) constrs)) dts)

  get_cnstr_strs dts =
 map (fn (bn, _, _) => Binding.name_of bn) (flat (get_cnstrs dts))

  get_bn_fun_strs bn_funs =
 map (fn (bn_fun, _, _) => Binding.name_of bn_fun) bn_funs
 



text Infrastructure for adding _raw to types and terms

ML 
  add_raw s = s ^ "_raw"
  add_raws ss = map add_raw ss
  raw_bind bn = Binding.suffix_name "_raw" bn

  replace_str ss s =
 case (AList.lookup (op =) ss s) of
 SOME s' => s'
 | NONE => s

  replace_typ ty_ss (Type (a, Ts)) = Type (replace_str ty_ss a, map (replace_typ ty_ss) Ts)
 | replace_typ ty_ss T = T

  raw_dts ty_ss dts =
 
 fun raw_dts_aux1 (bind, tys, _) =
 (raw_bind bind, map (replace_typ ty_ss) tys, NoSyn)

 fun raw_dts_aux2 ((bind, ty_args, _), constrs) =
 ((raw_bind bind, ty_args, NoSyn), map raw_dts_aux1 constrs)
 
 map raw_dts_aux2 dts
 

  replace_aterm trm_ss (Const (a, T)) = Const (replace_str trm_ss a, T)
 | replace_aterm trm_ss (Free (a, T)) = Free (replace_str trm_ss a, T)
 | replace_aterm trm_ss trm = trm

  replace_term trm_ss ty_ss trm =
 trm |> Term.map_aterms (replace_aterm trm_ss) |> map_types (replace_typ ty_ss)
 


ML 
  rawify_dts dts dts_env = raw_dts dts_env dts
 


ML 
  rawify_bn_funs dts_env cnstrs_env bn_fun_env bn_funs bn_eqs =
 
 val bn_funs' = map (fn (bn, ty, _) =>
 (raw_bind bn, SOME (replace_typ dts_env ty), NoSyn)) bn_funs

 val bn_eqs' = map (fn (attr, trm) =>
 ((attr, replace_term (cnstrs_env @ bn_fun_env) dts_env trm), [], [])) bn_eqs
 
 (bn_funs', bn_eqs')
 
 


ML 
  rawify_bclauses dts_env cnstrs_env bn_fun_env bclauses =
 
 fun rawify_bnds bnds =
 map (apfst (Option.map (replace_term (cnstrs_env @ bn_fun_env) dts_env))) bnds

 fun rawify_bclause (BC (mode, bnds, bdys)) = BC (mode, rawify_bnds bnds, bdys)
 
 (map o map o map) rawify_bclause bclauses
 
 



ML 
(* definition of the raw datatype *)


fun define_raw_dts dts cnstr_names cnstr_tys bn_funs bn_eqs bclauses lthy =
let
  val thy = Local_Theory.exit_global lthy
  val thy_name = Context.theory_base_name thy

  val dt_names = map (fn ((s, _, _), _) => Binding.name_of s) dts
  val dt_full_names = map (Long_Name.qualify thy_name) dt_names
  val dt_full_names' = add_raws dt_full_names
  val dts_env = dt_full_names ~~ dt_full_names'

  val cnstr_full_names = map (Long_Name.qualify thy_name) cnstr_names
  val cnstr_full_names' = map (fn (x, y) => Long_Name.qualify thy_name
    (Long_Name.qualify (add_raw x) (add_raw y))) cnstr_tys
  val cnstrs_env = cnstr_full_names ~~ cnstr_full_names'

  val bn_fun_strs = get_bn_fun_strs bn_funs
  val bn_fun_strs' = add_raws bn_fun_strs
  val bn_fun_env = bn_fun_strs ~~ bn_fun_strs'
  val bn_fun_full_env = map (apply2 (Long_Name.qualify thy_name))
    (bn_fun_strs ~~ bn_fun_strs')

  val raw_dts = rawify_dts dts dts_env
  val (raw_bn_funs, raw_bn_eqs) = rawify_bn_funs dts_env cnstrs_env bn_fun_env bn_funs bn_eqs
  val raw_bclauses = rawify_bclauses dts_env cnstrs_env bn_fun_full_env bclauses

  val (raw_full_dt_names', thy1) =
    BNF_LFP_Compat.add_datatype [BNF_LFP_Compat.Kill_Type_Args] raw_dts thy

  val lthy1 = Named_Target.theory_init thy1

  val dtinfos = map (Old_Datatype_Data.the_info (Proof_Context.theory_of lthy1)) raw_full_dt_names'
  val raw_fp_sugars = map (the o BNF_FP_Def_Sugar.fp_sugar_of lthy1) raw_full_dt_names'
  val {descr, ...} = hd dtinfos

  val raw_ty_args = hd (Old_Datatype_Aux.get_rec_types descr)
    |> snd o dest_Type
    |> map dest_TFree
  val raw_schematic_ty_args = (snd o dest_Type o #T o hd) raw_fp_sugars
  val typ_subst = raw_schematic_ty_args ~~ map TFree raw_ty_args
  val freezeT = Term.typ_subst_atomic typ_subst
  val freeze = Term.subst_atomic_types typ_subst
  val raw_tys = map (freezeT o #T) raw_fp_sugars

  val raw_cns_info = all_dtyp_constrs_types descr
  val raw_all_cns = map (map freeze o #ctrs o #ctr_sugar o #fp_ctr_sugar) raw_fp_sugars

  val raw_inject_thms = flat (map #inject dtinfos)
  val raw_distinct_thms = flat (map #distinct dtinfos)
  val raw_induct_thm = (hd o #common_co_inducts o the o #fp_co_induct_sugar o hd) raw_fp_sugars
  val raw_induct_thms = map (the_single o #co_inducts o the o #fp_co_induct_sugar) raw_fp_sugars
  val raw_exhaust_thms = map #exhaust dtinfos
  val raw_size_trms = map HOLogic.size_const raw_tys
  val raw_size_thms = these (Option.map (#2 o #2)
    (BNF_LFP_Size.size_of lthy1 (hd raw_full_dt_names')))

  val raw_result = RawDtInfo
    {raw_dt_names = raw_full_dt_names',
     raw_fp_sugars = raw_fp_sugars,
     raw_dts = raw_dts,
     raw_tys = raw_tys,
     raw_ty_args = raw_ty_args,
     raw_cns_info = raw_cns_info,
     raw_all_cns = raw_all_cns,
     raw_inject_thms = raw_inject_thms,
     raw_distinct_thms = raw_distinct_thms,
     raw_induct_thm = raw_induct_thm,
     raw_induct_thms = raw_induct_thms,
     raw_exhaust_thms = raw_exhaust_thms,
     raw_size_trms = raw_size_trms,
     raw_size_thms = raw_size_thms}
in
  (raw_bclauses, raw_bn_funs, raw_bn_eqs, raw_result, lthy1)
end



ML 
fun nominal_datatype2 opt_thms_name dts bn_funs bn_eqs bclauses lthy =
let
  val cnstr_names = get_cnstr_strs dts
  val cnstr_tys = get_typed_cnstrs dts

  val _ = trace_msg (K "Defining raw datatypes...")
  val (raw_bclauses, raw_bn_funs, raw_bn_eqs, raw_dt_info, lthy0) =
    define_raw_dts dts cnstr_names cnstr_tys bn_funs bn_eqs bclauses lthy

  val RawDtInfo
    {raw_dt_names,
     raw_tys,
     raw_ty_args,
     raw_fp_sugars,
     raw_all_cns,
     raw_inject_thms,
     raw_distinct_thms,
     raw_induct_thm,
     raw_induct_thms,
     raw_exhaust_thms,
     raw_size_trms,
     raw_size_thms, ...} = raw_dt_info

  val _ = trace_msg (K "Defining raw permutations...")
  val ((raw_perm_funs, raw_perm_simps, raw_perm_laws), lthy2a) = define_raw_perms raw_dt_info lthy0

  (* noting the raw permutations as eqvt theorems *)

  val lthy3 = snd (Local_Theory.note ((Binding.empty, @{attributes [eqvt]}), raw_perm_simps) lthy2a)

  val _ = trace_msg (K "Defining raw fv- and bn-functions...")
  val (raw_bns, raw_bn_defs, raw_bn_info, raw_bn_inducts, lthy3a) =
    define_raw_bns raw_dt_info raw_bn_funs raw_bn_eqs lthy3

  (* defining the permute_bn functions *)
  val (raw_perm_bns, raw_perm_bn_simps, lthy3b) =
    define_raw_bn_perms raw_dt_info raw_bn_info lthy3a

  val (raw_fvs, raw_fv_bns, raw_fv_defs, raw_fv_bns_induct, lthy3c) =
    define_raw_fvs raw_dt_info raw_bn_info raw_bclauses lthy3b

  val _ = trace_msg (K "Defining alpha relations...")
  val (alpha_result, lthy4) =
    define_raw_alpha raw_dt_info raw_bn_info raw_bclauses raw_fvs lthy3c

  val _ = trace_msg (K "Proving distinct theorems...")
  val alpha_distincts = raw_prove_alpha_distincts lthy4 alpha_result raw_dt_info

  val _ = trace_msg (K "Proving eq-iff theorems...")
  val alpha_eq_iff = raw_prove_alpha_eq_iff lthy4 alpha_result raw_dt_info

  val _ = trace_msg (K "Proving equivariance of bns, fvs, size and alpha...")
  val raw_bn_eqvt =
    raw_prove_eqvt raw_bns raw_bn_inducts (raw_bn_defs @ raw_perm_simps) lthy4

  (* noting the raw_bn_eqvt lemmas in a temporary theory *)
  val lthy_tmp =
    lthy4
    |> Local_Theory.begin_nested
    |> snd
    |> Local_Theory.note ((Binding.empty, @{attributes [eqvt]}), raw_bn_eqvt)
    |> snd
    |> Local_Theory.end_nested

  val raw_fv_eqvt =
    raw_prove_eqvt (raw_fvs @ raw_fv_bns) raw_fv_bns_induct (raw_fv_defs @ raw_perm_simps)
      lthy_tmp

  val raw_size_eqvt =
    let
      val RawDtInfo {raw_size_trms, raw_size_thms, raw_induct_thms, ...} = raw_dt_info
    in
      raw_prove_eqvt raw_size_trms raw_induct_thms (raw_size_thms @ raw_perm_simps)
        lthy_tmp
        |> map (rewrite_rule lthy_tmp
            @{thms permute_nat_def[THEN eq_reflection]})
        |> map (fn thm => thm RS @{thm sym})
    end

  val lthy5 = snd (Local_Theory.note ((Binding.empty, @{attributes [eqvt]}), raw_fv_eqvt) lthy_tmp)

  val alpha_eqvt =
    let
      val AlphaResult {alpha_trms, alpha_bn_trms, alpha_raw_induct, alpha_intros, ...} = alpha_result
    in
      Nominal_Eqvt.raw_equivariance lthy5 (alpha_trms @ alpha_bn_trms) alpha_raw_induct alpha_intros
    end

  val alpha_eqvt_norm = map (Nominal_ThmDecls.eqvt_transform lthy5) alpha_eqvt

  val _ = trace_msg (K "Proving equivalence of alpha...")
  val alpha_refl_thms = raw_prove_refl lthy5 alpha_result raw_induct_thm
  val alpha_sym_thms = raw_prove_sym lthy5 alpha_result alpha_eqvt_norm
  val alpha_trans_thms =
    raw_prove_trans lthy5 alpha_result (raw_distinct_thms @ raw_inject_thms) alpha_eqvt_norm

  val (alpha_equivp_thms, alpha_bn_equivp_thms) =
    raw_prove_equivp lthy5 alpha_result alpha_refl_thms alpha_sym_thms alpha_trans_thms

  val _ = trace_msg (K "Proving alpha implies bn...")
  val alpha_bn_imp_thms = raw_prove_bn_imp lthy5 alpha_result

  val _ = trace_msg (K "Proving respectfulness...")
  val raw_funs_rsp_aux =
    raw_fv_bn_rsp_aux lthy5 alpha_result raw_fvs raw_bns raw_fv_bns (raw_bn_defs @ raw_fv_defs)

  val raw_funs_rsp = map (Drule.eta_contraction_rule o mk_funs_rsp lthy5) raw_funs_rsp_aux

  fun match_const cnst th =
    (fst o dest_Const o snd o dest_comb o HOLogic.dest_Trueprop o Thm.prop_of) th =
    fst (dest_Const cnst);
  fun find_matching_rsp cnst =
    hd (filter (fn th => match_const cnst th) raw_funs_rsp);
  val raw_fv_rsp = map find_matching_rsp raw_fvs;
  val raw_bn_rsp = map find_matching_rsp raw_bns;
  val raw_fv_bn_rsp = map find_matching_rsp raw_fv_bns;

  val raw_size_rsp =
    raw_size_rsp_aux lthy5 alpha_result (raw_size_thms @ raw_size_eqvt)
      |> map (mk_funs_rsp lthy5)

  val raw_constrs_rsp =
    raw_constrs_rsp lthy5 alpha_result raw_all_cns (alpha_bn_imp_thms @ raw_funs_rsp_aux)

  val alpha_permute_rsp = map (mk_alpha_permute_rsp lthy5) alpha_eqvt

  val alpha_bn_rsp =
    raw_alpha_bn_rsp alpha_result alpha_bn_equivp_thms alpha_bn_imp_thms

  val raw_perm_bn_rsp = raw_perm_bn_rsp lthy5 alpha_result raw_perm_bns raw_perm_bn_simps

  val _ = trace_msg (K "Defining the quotient types...")
  val qty_descr = map (fn ((bind, vs, mx), _) => (map fst vs, bind, mx)) dts

  val (qty_infos, lthy7) =
    let
      val AlphaResult {alpha_trms, alpha_tys, ...} = alpha_result
    in
      define_qtypes qty_descr alpha_tys alpha_trms alpha_equivp_thms lthy5
    end

  val qtys = map #qtyp qty_infos
  val qty_full_names = map (fst o dest_Type) qtys
  val qty_names = map Long_Name.base_name qty_full_names

  val _ = trace_msg (K "Defining the quotient constants...")
  val qconstrs_descrs =
    (map2 o map2) (fn (b, _, mx) => fn (t, th) => (Variable.check_name b, t, mx, th))
      (get_cnstrs dts) (map (op ~~) (raw_all_cns ~~ raw_constrs_rsp))

  val qbns_descr =
    map2 (fn (b, _, mx) => fn (t, th) => (Variable.check_name b, t, mx, th)) bn_funs (raw_bns ~~ raw_bn_rsp)

  val qfvs_descr =
    map2 (fn n => fn (t, th) => ("fv_" ^ n, t, NoSyn, th)) qty_names (raw_fvs ~~ raw_fv_rsp)

  val qfv_bns_descr =
    map2 (fn (b, _, _) => fn (t, th) => ("fv_" ^ Variable.check_name b, t, NoSyn, th))
      bn_funs (raw_fv_bns ~~ raw_fv_bn_rsp)

  val qalpha_bns_descr =
    let
      val AlphaResult {alpha_bn_trms, ...} = alpha_result
    in
      map2 (fn (b, _, _) => fn (t, th) => ("alpha_" ^ Variable.check_name b, t, NoSyn, th))
        bn_funs (alpha_bn_trms ~~ alpha_bn_rsp)
    end

  val qperm_descr =
    map2 (fn n => fn (t, th) => ("permute_" ^ n, Type.legacy_freeze t, NoSyn, th))
       (raw_perm_funstake (ength) alpha_permute_rsp

  val qsize_descr =
    map2 (fn n =>"voids bin"
      ( ~~ takee_rsp

  val qperm_bn_descr =
    map2 (fn (b, _, _) => fn (t, th) => ("permute_" ^ Variable.check_name b, t, NoSyn, th))
      bn_funs(_perm_bnsbn_rsp

  val \>dt_rawfuns
    lthy8) =
      lthy7
      |> fold_map (define_qconsts qtys) qconstrs_descrs
      ||>> define_qconsts qtys qbns_descr
      ||>> define_qconstsqfvs_descr
      ||>> define_qconsts qtysML_fileopen.ML
      ||>> define_qconsts qtys qalpha_bns_descr
      ||>> define_qconsts qtys qperm_bn_descr

  val lthy9 =
    define_qperms qtys qty_full_names raw_ty_args qperm_descr raw_perm_laws lthy8

  val lthy9a =
    define_qsizes qtys qty_full_names raw_ty_args qsize_descr lthy9

  val
  val<opennominal_induct.MLinal_inductNominalInduct.nominal_induct_method
  val qfvs = map #qconst qfvs_info
  val qfv_bns = map #qconst qfv_bns_info
  val qalpha_bns = map #qconst qalpha_bns_info
  val=ap

  val(****************************************************)
  val <open<lose
    prod.case}

  val ([ qdistincts, qeq_iffs, qfv_defs, qbn_defs, qperm_simps, qfv_qbn_eqvts,
         qbn_inducts, qsize_eqvt, [qinduct], qexhausts, qsize_simps, qperm_bn_simps,
         qalpha_refl_thms, qalpha_sym_thms, qalpha_trans_thms ], lthyB) =
    lthy9a
    |>>> lift_thms qtys [] alpha_distincts
    ||>>> lift_thms qtys eq_iff_simps alpha_eq_iff
    ||>>> lift_thms qtys [] raw_fv_defs
    ||>>> lift_thms qtys [] raw_bn_defs
    ||>>> lift_thms qtys [] raw_perm_simps
    ||>>> lift_thms qtys [] (raw_fv_eqvt @ raw_bn_eqvt)
    ||>>> lift_thms qtys [] raw_bn_inducts
    ||>>> lift_thms qtys [] raw_size_eqvt
    ||>>> lift_thms qtys [] [raw_induct_thm]
    ||>>> lift_thms qtys [] raw_exhaust_thms
    ||>>> lift_thms qtys [] raw_size_thms
    ||>>> lift_thms qtys [] raw_perm_bn_simps
    ||>>> lift_thms
    ||>>hms
    ||>>> lift_thms qtys [] alpha_trans_thms

  val qinducts = Project_Rule.projections lthyB qinduct

  val _ = trace_msg (K "Proving supp lemmas and fs-instances...")
  valnominal_termination.ML

  (* finite supp lemmas *)
  val qfsupp_thms = prove_fsupp lthyB qtys qinduct qsupports_thms

  (* fs instances *)
  val lthyC = fs_instance qtys qty_full_names raw_ty_args qfsupp_thms lthyB

  val _ = trace_msg (K "Proving equality between fv and supp...")
  val qfv_supp_thms =
    prove_fv_supp qtys (flat qtrms) qfvs qfv_bns qalpha_bns qfv_defs qeq_iffs
      qperm_simps qfv_qbn_eqvts qinduct (flat raw_bclauses) lthyC
    |> map Drule.eta_contraction_rule

  (* postprocessing of eq and fv theorems *)
  val qeq_iffs' = qeq_iffs
    |> map (simplify (put_simpset HOL_basic_ss lthyC addsimps qfv_supp_thms))
    |> map (simplify (put_simpset HOL_basic_ss lthyC
        addsimps @{thms prod_fv_supp prod_alpha_eq Abs_eq_iff[symmetric]}))

  (* filters the theorems that are of the form "qfv = supp" *)
  val qfv_names = map (fst o dest_Const) qfvs
  fun\^st_Trueprop for 🍋HOL.eq _ for 
    
  _ se

  val qsupp_constrs = qfv_defs
    |> map (simplify (put_simpset HOL_basic_ss lthyC
        

lthmx\Longrightarrow\ x \<longleftrightarrow> a \<notin> y" by simp}
  val transform_thms
    [ @{lemma "a \<notin> (S \<union> <closejava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
      @{lemma "a \<
      @ML\>
      @{thm fresh_def[symmetric]}]

  val qfresh_constrs = qsupp_constrs
     p >Sansform_thm
    |> map (simplify (put_simpset HOL_basic_ss lthyC addsimps transform_thms))

  (* proving that the qbn result is finite *)
  val = prove_bns_finite qtys qinduct lthyC

  (* proving that perm_bns preserve alpha *)
  val qperm_bn_alpha_thms
    prove_perm_bn_alpha_thms qperm_bns qinduct qeq_iffs
      qalpha_refl_thms

  (* proving the relationship of bn and permute_bn *)
  val =
    prove_permute_bn_thms cnstr_full_names (fn,y) =>Long_Name thy_name

  val_=trace_msg (K "Proving stron exhaust lemmas...")
  val = lthyCqexhausts qbn_finite_thms'
    qfv_qbn_eqvts bn_fun_strs bn_fun_strs

  val = trace_msg strong)
  val qstrong_induct_thms =  prove_strong_induct lthyC qinduct qstrong_exhaust_thms qsize_simps bclauses

  (* noting the theorems *)

  (* generating the prefix for the theorem names *)
  valthms_name =
    the_default.name "_" qty_names
  fun s = Binding true s
  valcase_names_attr =Attrib.internal<here  = map.the_info.theory_of)) raw_full_dt_names

  sqty_full_names ' qdistincts qstrong_induct_thms

  val dest_TFree
     |> Local_Theorysyntax  false,pervasive, poshere} (K (fold register_info infos))
     |> Local_Theory.note ((thms_suffix "distinct", @{attributes [induct_simp, simp]}), qdistincts)
     |>Local_Theory. ((thms_suffix @attributes, simpqeq_iffs'java.lang.StringIndexOutOfBoundsException: Index 98 out of bounds for length 98
     ||>valraw_tys  (freezeTT raw_fp_sugars
     ||>> Local_Theory(thms_suffix "bn_defs", []), qbn_defs
     ||> Local_Theorynote "bn_inducts", []),qbn_inducts)
     ||>> Local_Theorythms_suffix "perm_simps, @{ttributes [eqvt, simp]]}), qperm_simps)
     ||>> Local_Theornote ((thms_suffix "fv_bn_eqvtvt
      al_Theorythms_suffix", @{attributes [sim]}), qsize_simps)
     |>> Local_.note ((thms_suffix "size_eqvt), qsize_eqvt
     ||>> Local_Theory __smap
     ||>> Local_Theory_ze'
     |>ocal_Theory_ixexhaust)
     ||>> Local_Theory=aw_fp_sugars
raw_tys
     ||>> Local_Theory
     |>Local_Theory", []), qfsupp_thms)
     ||>> Local_Theory.note ((thms_sraw_induct_thm = raw_induct_thm,
     |raw_exh = raw_exhaust_thms,
     ||>> Lraw_size_thms = raw_size_thms}
     ||>> Local_The.note ((thms_suffix "bn_finite
     ||>><>
     ||>> Local_Theory.note ((thms_suffix "permute_bn", []), qpermute_bn_thms)
     ||>> Local_Theory.note ((thms_suffix ] pha_refl_thms
     |Local_Theory", []]), qalpha_y_m)
     |> oalTer.no (thssff "_s[,lpha_trans_thms

in
  lthy9'
end
\close


section \  val (raw_bclauses raw_bn_funsraw_bn_eqsraw_dt_infolthy0)

ML
(* adds the default sort @{sort fs} to nominal specifications *)

fun augment_sort

fun augment_sort_typ
  p_type_tfreey)
\>

ML
(* generates the parsed datatypes and declares the constructors *)

fun dt_strs
let
  fun prep_spec(, tvs), constrs
    ((tname, mx |> map (c, atys, mx,_ = (c map snd, ')))

  val, spec_ctxt
    Old_Datatype (map dt_strs

  fun augment ((tname, tvs   (alpha_result)java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
    ((tname apsnd thy,),
      constrs

  val'=map dts

  fun_nstr_trms
    let
      val ty
    in
      map (fn
    end

  vals_s_induct

   IXME
  (* val (_, spec_ctxt') = Proof_Context.add_fixes constr_trms spec_ctxt *)ize_thmsraw_dt_info

  val thy
in(_thy_tmp
  (dts', thy= {hm
end


ML
(* parsing the binding function specifications and *)
(* declaring the function constants                *)
fun prepare_bn_funs = raw_prove_sym  alpha_eqvt_norm
let
  val (alpha_equivp_thms) =

  val
    Specification.read_multi_specs bn_eq_strs lthy

  fun _ = trace_msgProving

  val' = map bn_funs

in
  (Local_Theory lthy
  |> Sign bn_funs
  |pair', bn_eqs
end
 raw_bn_rsp find_matching_rsp

text raw_size_rsp_aux alpha_result @ raw_size_eqvt
ML
fun indexify lthy5 raw_all_cns @raw_funs_rsp_aux
let
  fun mapp
    |i(NONE mapp 1 
    raw_perm_bn_rsp lthy5 raw_perm_bns
in _ = trace_msg Defining
  mapp
end (qty_infos) =

fun xsx=
  case AList.lookup (op =) xs x of
    SOME qty_descr alpha_trms lthy5
  | NONE qtys #qtyp
\close>

ML<pen
fun prepare_bclauses dt_strs thy =
let
  val annos_bclauses =
    get_cnstrs dt_strs
    |> (map o map) (fn (_, antys, _, bns) => (map antys))

  fun env =
    case (Syntax dts (op ~~) (raw_all_cns ~~ raw_constrs_rsp))
      Free (x, _)
    |Consta,T)$Free (, )>SOME Const env)
    |_= error( term   bn_str not as function"

  funpoyvnstr=eok nvbn

  prep_bclausen de dr,ods
  t
    val binders' = map (prep_binle
    val bodn
  in
    BC (mode, binders', bodies')
  end

  scr =
  let
    val env = indexify annos (*
  
    pep_blas e)blasesr
  end
in
  ((map o map) prep_bclauses annos_bclauses, thy)
end
\ lt

text|| eieqostqts bnder
  adds an empty binding clause for every argument
  that||>> dfine_ qtysqvbsder
\<close ||>> defin qtysqalph_n_dsc

ML
fun included i bcs =
let
  fun incl (BC (_, bns, bds)) =
    member (op =) (map snd bns) i orelse member (op =) bds i
in
  exists incl bcs
end
\<closevaleq_if_simp = @{thms alphas per.simps prod_fv.sim prod_alpha_def rel

ML ) =
fun complete dt_strs bclau|>> lift_ qtys [] alpha_distincts
let
  val args =
    get_cnstrs dt_strs
    |> map o map) (fn (_, ntys, _, _) => length ant)

  fun complt n bcs =    ||>>> lift_th qtys [] raw_bn_inducts
  
    fun
  in
    bcs @ (flat (map_range (add
  end
in
  (map2 o map2) complt args bclauses
end
\<close>

ML lthyC = fs_ins qtys qty_full_names r qfsupp_thms lthyB
fun nominal_datatype2_cmd (opt_thms_name, dt_strs, bn_fun_strs, bn_eq_strs) lthy =
let
  (* this theory is used just for parsing *)
  val thy prove_fv_supp qtys (f qtrms) qfvs qfv_ qalpha_bns qfv_defsqeq_iffs

   (((dts, (bn_fu, bn_eqs)), bclauses), _) =
    thy
    |> pval qeq_iffs' = qeq_iffs
    ||>> pr bn_fun_strs bn_eq_strs
    ||>> prepare_bclauses dt_strs

  val bclauses' = complete dt_strs bclauses
in
  nominal_datatype2 opt_thms_name dts bn_funs bn_eqs bclauses' lthy
end qfv_na = map (fst o dest) qfvs
\<close>

ML
(* nominal datatype parser *)
local
  fun triple1 ((x, y), z) = (x,valtransform_thm = @{lemma "  Longrighta> a a
 fun triple2 ((x, y), z) = (y, x, z)
 fun tuple2 (((x, y), z), u) = (x, y, u, z)
 fun tuple3 ((x, y), (z, u)) = (x@{lemma "a a a
 

  opt_name = Scan.option (Parse.binding --| Args.colon)

  anno_typ = Scan.option (Parse.name --| @{keyword "::"}) -- Parse.typ

  bind_mode = @{keyword "binds"} |--
 .optional (Args.parens
 (Args.$$$ "list" >> K Lst || Args.$$$"set" -- Args.$$$ "+") >> K Res || Args.$$$ "s" >> K Set)) Lst

 
 .enum "," (bind_mode -- can.rep Parse.term -- (@key "in"} |-- Scan.repeat1 Parse) > tri

 cnstr_parser =
 Parse.binding -- Scan.repeat anno_typ -- bind_clauses -- Pa(*proving the relationship of b bn and permute_bn *)

(* datatype parser *)
val  = (K qstrong_exhaust_thms lthyC bclauses qeq_iffs
  (Parse.type_args_constrained
    eyword1| str_parser

(* binding function parser *)
val
  . eyword"} |-- Par.specification) ([],[)

(* main parser *)
java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 17
  opt_name -- Parse.and_list1 dt_parser -- bnfun_parser >> tuple3

end

(* Command Keyword *)
val _|>Lo.note ((thms_suffix "", @{attribu [induct_simp, simp]}), qdi
  "declaration nominaljava.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
    parser
\     al_Theory", []), bn_i)

end

Messung V0.5 in Prozent
C=82 H=75 G=78

¤ Dauer der Verarbeitung: 0.9 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen



NIST Cobol Testsuite



Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

      Eigene Quellcodes
      Fremde Quellcodes
     Quellcodebibliothek
      Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge