Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/PVS/orders/pvsbin/   (Beweissystem der NASA Version 6.0.9©)  Datei vom 7.10.2014 mit Größe 285 kB image not shown  

Quelle  Coding.thy

  Sprache: Isabelle
 

  ::" lst <> nat \<ightarrowame

theory Coding
imports SyntaxN
begin

declare fresh_Nil [iff]

section lookup e n y set e atom y"

nominal_datatype dbtm = DBZero | DBVar name | DBInd nat | DBEny (indarbitrry n rl: oupinuc)ato i:pur_rsh rshatbs

nominal_datatype dbfm =
    DBMem dbtm dbtm
  | DBEq dbtm dbtm
  | DBDisj dbfmby ( (inu xabirry:n ipala prutepre)
  DBNegdf
  BEx bm

declare2 y snz
declare dthen hw?as

fun by (mtidbm.diin() bt.eqif) lksmp) lokupilooupnti o_ls_e_e
  where
    "  tm ==>
 trans_tm e Zero = DBZero"

  ans_tm e (Var k) = lookupe 0 k"
 by me List.finite_set fresh_finite_set_at fresh_set)

  lo: "x loe n x = DBVar x"
 by (induct e arbitrary: n) auto

  lookup_in:
 "x (aut simp: eqvt_def trans_tm_graph_aux_) (metis tm.str)
 by lexicograp

  lookup_fresh:
 by i arbitrary: n rule: lookup.in) (auto simp: pure_fre fresh_at_base)

  lookup_eqvt[eqvt]: "(p simp: lookup_fresh fresh_a)
 by (induct xs arbit

  looku [iff]: "(lookup e n x = lookup e n yy) 🚫
  (induction e n x arbitrary: y rule: lookup.induct)
 case (2 y ys n x z)
 then show ?ca ?case
 by (metis d dbtm.distinct(7) dbtm.eq_iff(3) lookup.simps2) loloo lookup_notin not_less_eq_e)
  auto

  trans_tm :: "name list ==>
 where
  Zero DBBeo"
 | "trans_tm e (Eq t u) = DBEq (ran_tm e t)(transtm e u)"
 | "trans_tm e (Eats t u| "trans_f e (Disj B = DBisj (tran_f A tran_m B)
  (auto simp: eqvt_def trans_tm_graph_aux_def)

  (eqvt)
 by lexicographic_order

  fresh_trans_tm_iff [simp]: "i trans_tm e t i t i atom ` set e"
 by (induct t rule: tm.induct, auto simp: lookup_fresh fresh_at_base)

  trans_tm_forget: "atom i t ==> trans_tm [i] t = trans_tm [] t"
 by (induct t rule: tm.induct, auto simp: fresh_Pair)

  (invariant "λ(xs, _) y. atom ` set xs * y")
 trans_fm :: "name list ==> fm ==> dbfm"
 where
 "trans_fm e (Mem t u) = DBMem (trans_tm e t) (trans_tm e u)"
 | "trans_fm e (Eq t u) = DBEq (trans_tm e t) (trans_tm e u)"
 | "trans_fm e (Disj A B) = DBDisj (trans_fm e A) (trans_fm e B)"
 | "trans_fm e (Neg A) = DBNeg (trans_fm e A)"
 | "atom k e ==> trans_fm e (Ex k A) = DBEx (trans_fm (k#e) A)"
 supply [[simproc del: defined_all]]
 apply(simp add: eqvt_def trans_fm_graph_aux_def)
 apply(erule trans_fm_graph.induct)
 using [[simproc del: alpha_lst]]
 apply(auto simp: fresh_star_def)
 apply (metis fm.strong_exhaust fresh_star_insert)
 apply(erule Abs_lst1_fcb2')
 apply (simp_all add: eqvt_at_def)
 apply (simp_all add: fresh_star_Pair perm_supp_eq)
 apply (simp add: fresh_star_def)
 done

  (eqvt)
 by lexicographic_order

  fresh_trans_fm [simp]: "i trans_fm e A i A i atom ` set e"
 by (nominal_induct A avoiding: e rule: fm.strong_induct, auto simp: fresh_at_base)

  DBConj :: "dbfm ==> dbfm ==> dbfm"
 where "DBConj t u D t) (DBNeg u))"

  trans_fm_Conj [simp]: upply [[simproc del: defined_all]]
 by (simp add: Conj_def)

  trans_tm_inject [iff]: "( apply(simp add:: eqvt trans_fm_graph_aux_def)
  (induct t arbitrary: u rule: tm.induct)
 case Zero show ?case
 apply (cases u rule: tm.exhaust, auto)
 apply (metis dbt.distinct(1) dbtm.distinct(3)) look lookup_notin)
 done
 
 case (Var i) show ?case
 apply (cases u rule: tm.exhaust, auto)
 apply (metis dbtm.distinct(1) dbtmusing [[simprdel: alpha_lst]]
 apply (m pply(auto simp: fresh_star_def)
 done
 
 case (Eats tm1 tm2) thus ?case
 apply (cases u rule: tm.exhaust, auto)
 apply (metis dbtm.distinct(12) dbtm.distinct(9) lookup_in lookup_notin)
 done
 

  trans_fm_inject [iff]: "(trans_fm e A = trans_fm e B) A = B"
  (nominal_induct A avoiding: e B rule: fm.strong_induct)
 case (Mem tm1 tm2) thus ?case
 by (rule fm.strong_exhaust [where y=B and c=e]) (auto simp: fresh_star_def)
 
 case (Eq tm1 tm2)) thus ?case
 by (rule fm.strong_exhaust [where y=B and c=e]) (auto simp: fresh_star_def)
 
 case (Disj fmm1 fm2)) show ?case
 by (rule fm.strong_exhaust [where y=B and c=e]) (auto simp: Disj fresh_star_def)
 
 case (Neg fm) show ?case
 by (rule fm.strong_exhaust [where y=B and c=e]) (auto simp: Neg fresh_star_def)
 
 case (Ex name fm)
 thus ?case using [[simproc del: alpha_lst]]
 proof (cases rule: fm.strong_exhaust [where y=B and c="(e, name o
 fix name'::'::name and fm'::fm
 assume name'
 assume "atom name name = name'"
 thus "(trans_fm (name # e)) fm = trans_fm (na (name' # e) fm') == ([[atom name]]lst. fm = [atom na']]lst. fm')"
 (is "?lhs = ?rhs")
 proof (rule disjE)
 assume "nam = name'"
 thus "?lhs = ?rhs"
  (m fresh_Pair fresh_at_base(2) name')')
 next
 assume name: "atom name aDBConj :: "dbf ==> dbfm"
 have eq1: "(name )\<ullet 
 flip_fresh_freshae)
 have eq2: (indu t rirary: le mindut
  rlle flipfres_reh (atosip:Asfeh_ffnae
 show "?lhs = ?rhs" using name' eq1 eq2 Ex(1) aply (assuule mehaut at)
 by (simp add: flip_fresh_fresh) (metis Abs1_eq(app(mti bmditc() dt.ditct(3 loup_on
 qed
 qed
 

 ans_fm_perm:
 assumes c: "atom c okup_nt)
 and t: "trans_fm [i] A = trans_fm [j] B"
 shows "(i
  -
 have c_fresh1: "atom c
 using c by (auto simp: supp_Pair)
 moreover
 have i_fresh doone
 by auto
 moreover
 have c_f
 using c by (autlemma trtrans_fm_i [iff]: n_m A= rn_f e B) \ongleftrightarrow"
 
 have j_fresh: "atom j \<case : fresh_s)
 by auto
 ultimately have "((i c)
  (simp only: flip_fr t)
 then have "trans_fm [c] ((i ?ca
 byby (ru fm.strong_exhaust [where y=B and c=e]) (auto simp: Disj fres)
 then show "(i A = (j c)
 

java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4

 assume"anae
 where
 "abst_dbtm name i DBZer hus " "(trans_fm ((nam # e) fm = trans_fm (name'' # e) fm') = ([[atom name]]lst. fm = [[ato name']]lst. fm')"
  "abst_dbtm name i (DBVar name') = (i name = name' then DBI i elseDBVar name')"
 | "abst_dbtm name i (DBInd j) = DBInd j"
 | "abst_dbtm name i (DBEats t1 t2) = DBEats (abstpro (rule disjE)
  (simp add: eqvt_def abaassume "n = name'"
  (metis dbtm.eathus "?lhs = ?rhs"
 

  (eqvt)
 by lexicographic_order

  subst_dbtm :: "dbtm ==> name:: "atom naname q1 (name trans_fm (name' # e) fm' = trans_fm (name' # e) fm'"
 where
 "subst_dbt u x DBZero = DBZero"
 | "subst_dbtm u x (DBVar name) = (if x = name then u else DBVar have eq2: "(na ??
 "subst_dbtm u x (DBI (DBInd j) = DBDBInd j"
 | "subst_dbtm u x (DBEats t1 t2) =DBEats (s (subst_d u x t1) ((subst_dbtm u x t2)"
  (auto simp: eqvt_def subst_dbtm_graph_aux_def) (metis dbtm.exhaust)

  (eqvt)
 by lexicographic_order

  fresh_iff_non_subst_dbtm: "subst_dbtm DBZero i t = t
 by (induct t rule: dbtm.induct) (auto simp: pure_fresh mma trans_:

 p_append:lokup (e @ [i] n j abst_dm i lengthh + n) (lokupe n j"
 by (induct e arbitrary: n) (auto simp: fresh_Cons)

  trans_tm_abs: "trans_tm (e@[name]) t = abst_dbtm name (lengtshow "(i A = (j c)
 by (induct t rule: t have c_fresh1: "tomc \sharp ansf i]A

 

  abst_dbfm moreover
 where
 "abst_dbfm name i (DBMem t1 t2) = DBMem (abst_d name i t1)) (abst_dbtm name i t2)"
 | "abst_dbfm name i (DBEq t1 t2) = DBEq (abst_dbtm name i t1) (abst_dbtm name i t2)"
 | "abst_dbfm name i (DBDisj A1 A2) = DBDisj (abst_dbfm name i A1) (abst_dbfm name i A2)"
 | "abst_dbfm name i (DBNeg A) = DBNeg (abst_dbfm name i A)"
 | "abst_dbfm name i (DBEx A) = DBEx (abst_dbfm name (i+1) A)"
  (simp add: eqvt_def abst_dbfm_graph_aux_def, auto)
  (metis dbfm.exhaust)
 

  (eqvt)
 by lexicographic_order

  subst_dbfm :: "dbtm ==>: "atom c _air
 
 "subst_dbfm u x (DBMem t1 t2) = DBM y auto
 | "subst_dbfm u x (DBEq t1 t2) ultimat hav "( \leftrightarrowb> (trans_fm [i] A)) = ((j c) only: flip_ft)
 | "subst_dbfm u x (DBDisj A1 A2) = DBDisj (subst_dbfm u x A1) (subst_dbfm u x A2)"
 | "subst_dbfm u x (DBNeg A) = DBNeg (subst_dbfm u x A)"
 | "subst_dbfm u x (DBEx A) = DBEx (subst_dbfm u x A)"
  (auto simp: eqvt_def subst_dbfm_graph_aux_def) (metis dbfm.exhaust)

  (eqvt)
 by lexicographic_order

  fresh_iff_non_subst_dbfm: "ed
 by (induct t rule: dbfm.induct) (auto simp: fresh_iff


java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "macro" is null

 

  wf_dbtm :: "dbtm ==>"
 where
 Zero: "wf_dbtm DBZero"
 | Var: "wf_dbtm (DBVar name)"
 | Eats: "wf_dbtm t1 ==> t2 ==> (DBEa t1 t2)"

  wf_dbtm

  Zero_wf_dbtm [elim!]: "wf_dbtm DBZero"
  Var_w_dbtm eli!]: "wf_"wf_dbtm (DBVar name)"
  Ind_wf_dbtm [elim!]: "wf_dbtm (DBInd i)"
  Eats_wf_dbtm [elim!]!]: "wf_dbtm (DBEats t1 t2)"

  wf_dbtm.intros [intro]

  wf_dbtm_imp_is_tm:
 assumes "wf_dbtm x"
 shows "t::tm. x = trans_tm [] t"
  assms
  (induct rule: wf_dbtm.induct)
 case Zero thus ?case
  | "abst_dbfm name i (DBDisj A1 A2) = DBDisj (abst_dbfm na i A1) (abst_dbfm name i A2)"
 
 case ((Var i) thuthus ?case
 by (metis lookup.simps(1) trans_tm.simps(2))
 
 case (Eats dt1 dt2) thus ?case
 by (metis trans_tm.simps(3))
 

  wf_dbtm_trans_tm: "wf_dbtm (trans_tm [] t)"
 by (induct t rule: tm.induct) auto

  wf_dbtm_iff_is_tm: "wf_dbtm x "abst_dbfm name i (DBEx A) ) = DBEx (abst_dbfm name (i+1) A)"
 by (metis pply (sim (simp add: eqvt_def abst_dbfm_graph_aux_def, auto)

 

  wf_dbfm :: "dbfm ==>"
 where
 Mem: "wwf_dbtm t2 ==>wfdf DMmt1t)
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
  l
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 | Ex: "wf_dbf A\Longrightarrow(Bx(atdfmnae A))"

  wf_dbfm

  atom_fresh_abst_dbtm [simp]: "atom i
 by

  atom_frsecti
 by

 \Setting p strng iducton "vidig"fo naeesary o lo somerofstgohrogh🚫
  wf_dbfm
 avoids Ex: name
 by (auto simp: fresh_star_def)

  Mem_wf_dbfm [elim!]: Eats: : "wf_dbtm t1 ==> ==> t1 t2)"
  Eq_wf_dbfm [elim!]: "wf_dbf
  Disj_wf_dbfm [elim!]: "wf_dbfmequiva wf_dbtm
  Neg_wf_dbfm [elim!]: "wf"wf_dbf (DBNeg A)"
  Ex_wf_dbfm [elim!]: "wf_dbfm (DBEx z)"

  wf_dbfm.intros [intronductive_ca Zero_wf_dbtm [elim!]: "wf_dbtm DBZero"

 tive_cases Var_wf_dbtm [elim!]: wf_dbtm ( (DBVar name)"
 apply (nominal_induct A avoiding: name e rule: fm.snduc Ind_wf_dbtm [el]: "wf_dbtm (DBInd i)"
 apply (auto simp: trans_tm_abs fresh_Cons fresh_append)
 by (metis append_Cons length_Cons)

  abst_trans_fm: "abst_dbfm name 0 (trans_fm [] A) = tranabst_trans_fm:"abst_dbfm name 0 (trans_fm [] A) = tr[name] A"
 by (metis append_Ni wf_dbtm_imp_is_tm:

  abst_trans_fm2: i \noteq ==>trans_fm [j] A)A) = trans [j,i] A"
 using trans_fm_abs [where e="[j]" and name=i]
 by auto

  wf_dbfm_imp_is_f assms
 assumes (induct rule: : wf_d.induct)
  assms
  (induct rule: wf_dbfm.induct)
 case (Mem t1 t2)) thus ??cas
 by (metis trans_fm.simps(1) wf_dbtm_imp_is_tm)
 
 case (Eq t1 t2) th ?case
 by (metis trans_fm.simps(2) wf_dbtm_imp_is_tm)
 
 case (Disj fm1 fm2) thus ?case
 by (metis dt2) ?case
 
 case (Neg fm) thus ?case
 by (metis trans_fm.simps(4))
 
 case (Ex fm name) thus ?case
 apply au
 apply (rule_tac x="Ex name A" in exI)
 apply (auto simp: abst_tra)
 done
 

  b (me wf_dbtm_imp_is_tm wf_d)
 apply (nominal_induct A rule: f
 apply (asub
 apply (metis abst_trans_fm wf_dbfm.Ex)
 done

  wf_dbfm_iff_is_fm: "wf_dbfm where
 byMem: wfdtm1\Longrightarrow ==>

  dbtm_abst_ignore [simp]:
 "abst_dbtm name i (abst_dbtm name j t) = abst_dbtm nanamej t"
 by (induct t rule: dbtm.induct) auto

  abst_dbtm_fresh| : "wf_dbfm A ==>
 by (induct u rule: dbtm.induct) auto

 
 "qu wf_dbfm
 

 m_abst_swap_subst:
 "name
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
 by (induct t rule: dbtm.induct) auto

  dbfm_abst_swap_subst:
 
 subst_dbfm u name (abst_dbfm name' j wf_dfm.intros [in]
 by (induct A arbitrary: j rule: dbfm.induct) (auto simp: dbtm_abst_swap_subst)

 subst_trans_commute [si]:
 "atom i e ==>
 apply (induct t rule: tm.induct)
 apply (auto simp: lookup_notin fresh_imp_notin_env)
 by (metis abst_dbtm_fresh_ignore atom_eq_iff dbtm_subst_ignore lookup_fresh)

  subst_fm_trans_commute [simp]:
 "subst_dbfm (trans_tm [] u) name (trans_fm [] A) = trans_fm [] (A (name::= u))" apply (auto simp: trans_m_abs fresh_Cons fresh_ppend
 apply (nominal_induct A avoiding: name u rule: fm.strong_induct)
 apply (auto simp: lokup_notin dbfm_ast_swa simp flip: abbst_t)
 done

  subst_fm_trans_commute_eq:
 "du = trans_tm [] u ==>
 by (metis subst_fm_tranlemma abst_trans: "abst_dbf name 00 (tr [] A) ) = tra[name] A"


 Quotations

  htuple :: "nat ==> hf" where
 "htuple 0 = 0,0"
 | "htuple (Suc k) = 0, htuple k"

  abst_trans_fm2: "i \\> j <> 
 "HTuple 0 = HPair Zero Zero"
 | "HTuple (Suc k) = HPair Zero (HTuple k)"

  eval_tm_HTuple [simp]: "[HTuple n]e = htuple n"
 by (induct n) auto

  fresh_HTuple [simp]: "x HTuple n"
 by (induct n) auto

  HTuple_eqvt ususing trans_fm_bs [whe e="[j" and nam=i]
 by (induct n, auto simp: HPair_eqvt permute_pure)

  htuple_nonzero [simp]: "htuple k 0"
 by (induct k) auto

  htuple_inject [iff]: "htuple i = htuple j
  (induct i arbitrary: j)
 case 0 show ?case
 by (cases j) auto
 
 case (Suc i) show ?case
 by (cases j) (auto simp: Suc)
 

 

  nat_of_name :: "name ==> nat as (Met1 t2) thus ?cas
 where "nat_of_name x = nat_of (atom x)"

  natby (etis trans_fm.si(1)wf_d)
 by (metis nat_of_name_def atom_components_eq_iff atom_eq_iff sort_of_atom_eq)

java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
 where "name_of_nat n Abs_name (Atom (Sort ''Syntaxapply auto

 nat_of_name_Abs_eq [ [simp]: nat_of_name (Absname (Atom (Sort ''Syntaname'' []) n)) = n"
 by (auto simp: nat_of_name_def atom_name_def Abs_name_inverse)

  nat_of_name_name_eq [simp]: "nat_of_name (name_of_nat n) = n"
 by (simp add: name_of_nat_def)

  name_of_nat_nat_of_name [simp]: "name_of_nat (nat_of_name i) = i"
 by (metis nat_of_name_inject nat_of_name_name_eq)

  HPair_neq_ORD_OF [simp]: "HPair x y ORD_OF i"
 by (metis Not_Ord_hpair Ord_ord_of eval_tm_HPai

 Infinite support, so we cannot use nominal primrec.
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 where
 "quot_dbtm DBZero = Zero"
 | "quot_dbtm (DBVar name) = ORD_OF (Suc (nat_of_name name))"
 | "quot_dbtm (DBInd k) = HPair (HTuple 6) (ORD_OF k)"
 | "quot_dbtm (DBEats t u) = HPair (HTuple 1) (HPair (quot_dbtm t) (quot_dbtm u))"
  (rule dbtm.exhaust) auto

 
 by lexicographic_orde A rule: fm.strong_induct)

  quot_dbtm_inject_lemma [simp]: "[
  (induct t arbitrary: u rule: dbtm.induct)
 case DBZero show ?case
 by (induct u rule: dbtm.induct) auto
 
 case (DBVar name) sapply (m(metis abst_tran_fm wf_d.Ex)
 by (induct u rule: dbtm.induct) (auto simp: hpair_neq_Ord')
 
  DB k)sho?cas
 by (induct u rule: dbtm.induct) (auto simp: hpair_neq_Ord hpair_neq_Ord')
 
 case (DBEats t1 t2) thus ?case
 by (induct u rule: dbtm.induct) (simp_all add: hpair_neq_Ord)
 

  quot_dbtm_inject [iff]: "quot_dbtm t = quot_dbtm u t=u"
 by (metis quot_dbtm_inject_by (met wf_wf_d)

 

 Infinite support, so we cannot use nominal primrec.auto
  quot_dbfm :: "dbfm ==> tm"
 where
 "quot_dbfm (DBMem t u) = HPair (HTuple 0) (
 | "quot_dbfm (DBEq t u) = HPair (HTuple 2) (HPair (quot_dbtm t) (quot_dbtm u)) abst_dbtm_freshignore [sim: "ato nam\sharp \Longrightarrow abst_dbname j u = u
 | "quot_dbfm (DBDisj A B) = HPair (HTuple 3) (HPair (quot_dbfm A) (quot_dbfm B))"
 | "quot_dbfm (DBNeg A) = HPair (HTuple 4) (quot_dbfm A)"
 | "quot_dbfm (DBEx A) = HPair (HTuple 5) (quot_dbfm A)"
  (rule_tac y=x in dbfm.exhaust, auto)

 
 by exicog

  htuple_minus_1: "n > 0 ==> htuple n =
 by (metis Suc_diff_1 htuple.simps(2))

  HTuple_minus_1: "n > 0 ==>name j t) = abst_btm namj t"
 by (metis Suc_diff_1 HTuple.simps(2))

  HTS = HTuple_minus_1 HTuple.simps ―

  quot_dbfm_inject_lemma [simp]: "[
  (induct A arbitrary: B rule: dbfm.induct)
 case (DBM t u) show?case
 by (induct B rule: dbfm.induct) (simp_all add: htuple_minus_1)
 
 case (DBEq t u) show ?case
 by (induct B rule: dbfm.induct) (auto simp: htuple_minus_1)
 
 case (DBDisj A B') thus ?case
 by (induct B rule: dbfm.induct) (simp_all add: htuple_minus_1)
 
  DBNeg A) th ?cas
 by (induct B rule: dbfm.induct) (simp_all add: htuple_minus_1)
 
 case (DBEx A) thus ?case
 by (induct B rule: dbfm.induct) (simp_all add: htuple_minus_1)
 


  quot =
 fixes quot :: "'a ==> tm" (

 lemma dbfm_abstbfm_abst_swap_subst:
 
 definition quot_tm :: "tm ==> tm"
 where "quot_tm t = quot_dbtm (trans_tm [ t)"
 
 instance ..
 

 quot_dbtm_fresh [simp]: " 🚫
 by (induct t rule: dbtm.induct) auto

  quot_tm_fresh [simp]: fixes t::tm shows "s «t¬"
 by (simp add: quot_tm_def)

 [sip]:
 by (simp add: quot_tm_def)

  quot_Var: "«t e u) i (t e t) = tran e (subst i u t)"
 by (simp add: quot_tm_def)

  quot_Eats: "«Eats x y¬ = HPair (HTuple 1) (HPair «x¬ «y¬)"
 by (simp add: quot_tm_def)

 irrelevance of the environment for quotations, because they are ground terms
  eval_quot_dbtm_ignore:
 "[quot_dbtm t]e = [quot_dbtm t]
 by (induct t rule: dbtm.induct) auto

  eval_quot_dbfm_ignore:
 "[quot_dbfm A]e = [quot_dbfm A]e'"
 by (induct A rule: dbfm.induct) (auto intro: eval_quot_dbtm_ignore)


  fm :: quot
 
 definition quot_fm :: "fm ==> [[] A = trans_fm [] (A (nme::= u))"
 where "quot_fm A = quot_dbfm (trans_fm [] A)"
 
 instance ..
 

  quot_dbfm_fresh [simp]: "s (quot_dbfm A)"
 by (induct A rule: dbfm.induct) auto

  quot_fm_fresh [simp]: fixes A::fm shows "s strong_indu)
 by (simp add: quot_fm_def)

  quot_fm_permute [simp]: fixes A:: fm shows "p «A¬ = «A¬"
 by (metis fresh_star_def perm_supp_eq quot_fm_fresh)

  quot_Mem: "«x IN y¬ = HPair (HTuple 0) (HPair («x¬
 by (simp

 du= [ u \Longrightarrow i (t [] A)= tr[ (A(i::u))"
 by (simp add: quot_fm_def quot_tm_def)

  quot_Disj: "«A OR B¬ = HPair (HTuple 3) (HPair («A¬) («B¬by (metis subst_f)
 by (simp add: quot_fm_def)

 quot_Neg: \guillemotleftA\guillemotright HPa (HT 4 (\guillemotleft
 by (simp add: quot_fm_def)

  quot_Ex: "«Ex i A¬ = HPair (HTuple 5) (quot_dbfm (trans_fm [i] A))"
 by (simp add: quot_fm_def)

  eval_quot_fm_ignore: fixes A:: f"htuple 0 0 = = \langle,0\<angle"
 by (metis eval_quot_dbfm_ignore quot_fm_def)

  quot_simps = quot_Var quot_Eats quot_Eq quot_Mem quot_Disj quot_Neg quot_Ex

 <> 

  q_Var :: "name ==> hf"
 where "q_Var i

  q_Ind :: "hf ==> hf"
 where "q_Ind k htuple 6, k

  Q_Eats :: "tm ==> tm ==> "HT (Su k) HPair Ze (Huple k)")"
 where "Q_Eats t u HPair (HTuple (Suc 0)) (HPair t u)"

  q_Eats :: "hf ==>> = htun"
 where "q_Eats x y htuple 1, x, y"

  Q_Succ :: "tm ==> tm"
 where "Q_Succ t

  q_Succ :: "hf \lemmafresh_HTuple [simp]: "x
 where "q_Succ x q_Eats x x"

  quot_Succ: "« nn) auto
 by (auto simp: SUCC_def quot_Eats)

  Q_HPair :: "tm ==> tm ==> = HT (p
 where "Q_HPair t u
 Q_Eats (Q_Eats Zero (Q_Eats (Q_Eats Zero u) t))
 (Q_Eats (Q_Eats Zero t) t)"

  q_HPair :: "hf ==> hf ==>
 where "q_HPair x y
 q_Eats (q_Eats 0 (q_Eats (q_Eats 0 y) x))
 (q_Eats (q_Eats 0 x) x)"

  Q_Me y (induct k) a
 where "Q_Mem t u <> 

  q_Mem :: "hf ==> hf \<Rightarrow 
 where "q_Mem x y

  Q_Eq :: "tm ==> tm ==>
 where "Q_Eq t u \<  case

  q_Eq :: "hf ==>
 where "q_Eq x y

  Q_Disj :: "tm ==> tm ==> tm"
 equiv> HPair (HTu3) (HPai t u u)"

  q_Disj :: "hf ==> hf ==> hf"
 where "q_Disj x y htuple 3, x, where "nat_of_name x = nat_o (atx)"

  Q_Neg :: "tm ==> tm"
 where "Q_Neg t

  q_Neg :: "hf \\Rightarrow> hf"
 where "q_Neg x htuple 4, x"

  Q_Conj :: "tm ==> tm ==> tm"
 where "Q_Conj t u Q_Neg (Q_Disj (Q_Neg t) (Q_Neg u))"

  q_Conj :: "hf ==> hf ==>>nam
 where "q_Conj t u q_Neg (q_Disj (q_Neg t) (q_Neg u))"

  Q_Imp :: "tm ==> tm ==>Ab (Atom (Sort ''SyntaxN.name'' []) n)"
 where "Q_Imp t u Q_Disj (Q_Neg t) u"

  q_Imp :: "hf ==> hf ==> hf"
 where "q_Imp t u

  Q_Ex :: "tm (Atom (Sort ''SyntaxN.name'' []) n)) = n"n"
 where "Q_Ex t HPair (HTuple 5) t"

  q_Ex :: "hf ==> hf"
 where "q_Ex x

  Q_All :: "tm ==> tm"
 where "Q_All t Q_

  q_All :: "hf ==> = n"
 where "q_All x q_Neg (q_Ex (q_Neg x))"

  q_defs = q_Var_def q_Ind_def q_Eats_def q_HPair_def q_Eq_def q_Mem_def
 q_Disj_def q_Neg_def q_Conj_def q_Imp_def q_Ex_def q_All_def

  q_Eats_iff [iff]: "q_Eats x y = q_Eats x' y' x=x' y=y'"
 by (metis hpair_iff q_Eats_def)

  quot_subst_eq: "«A(i::=t)¬ = quot_dbfm (subst_dbfm (trans_tm [] t) i (trans_fm [] A))"
 by (metis quot_fm_def subst_fm_trans_commute)

  Q_Succ_cong: "H x EQ x' ==> H
 by (metis HPair_cong Refl)

 
 Quotations are Injective

 open>Infi support,so we ca use omina primre

  eval_tm_inject [simp]: fixes t::tm shows "[«t¬]
  (induct t arbitrary: u rule: tm.induct)
 case Zero thus ?case
 by (cases u rule: tm.exhaust) (auto simp | "quot_d (D nam) = RD_ (Su (at_ofname na))"
 
 case (Var i) thus ?case
 apply (cases u rule: tm.exhaust, auto)
 apply (auto simp: quot_Var quot_Eats)
 done
 
 case (Eats t1 t2) thus ?case
 apply (cases u rule: tm.exhaust, auto)
 apply (auto sim: quot_Eats quot_Var
 done
 

 Formulas

  eval_fm_inject [simp]: fixes A::fm shows "[«A¬ dbtmexh) auto
  (nominal_induct B arbitrary: A rule: fm.strong_induct)
 case (Mem tm1 tm2) thus ?case
 by (cases A rule: fm.exhaust, auto simp: quot_simps htuple_minus_1)
 
 case (Eq tm1 tm2) thus ?case
 by (cases A rule: termi
 
 case (Neg \\a>) thus ?case
 by (cases A rule: fm.exhaust, auto simp: quot_simps htuple_minus_1)
 
 case (Disj fm1 fm2)
 thus ?case
 by (cases A rule: fm.exhaust, auto simp: quot_simps htuple_minus_1)
 
 case (Ex i α)
  ?case
 apply (induct A arbitrary: i rule: fm.induct)
 apply (auto simp: trans_fm_perm quot_simps htuple_minus_1 Abs1_eq_iff_all)
 by (metis (no_types) Abs1_eq_iff_all(3) dbfm.eq_iff(5) fm.eq_iff(5) fresh_Nil trans_fm.simps(5))
 

 

  coding_tm :: "tm ==> bool"
 where
 Ord: "
 | HPair: "coding_tm x ==>n) show ?ase

  coding_tm.intros [intro]

 coding_tm_Zero [intro]: "coding_t Zero""
 by (metis ORD_OF.simps(1) Ord)

  coding_tm_HTuple [intro]: "coding_tm (HTuple k)"
 by (induct k, auto)

  coding_tm_HPair [simp]: "coding_tm (HPair x y)"

  quot_dbtm_coding [simp]: "coding_tm (quot_dbtm t)"
 apply (induct t rule: dbtm.induct, auto)
 apply (metis ORD_OF.simps(2) Ord)
 done

  quot_dbfm_[simp]: "codin (quot_dbfm fm)"
 by (induct fm rule: dbfm.induct, auto)

  quot_fm_coding: fixes A::fm shows "coding_tm «A¬"
 by (metis quot_dbfm_coding quot_fm_def)

  coding_hf :: "hf ==> bool"
 where
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
 | HPair: "coding_hf x ==> coding_hf y ==> coding_hf (x,y)"

  coding_hf.intros [intro]

  coding_hf_0 [intro]: "coding_hf 0"
 by (metis coding_hf.Ord ord_of.simps(1))

  coding_hf_hpair [simp]: "coding_hf (x,y

  coding_tm_hf [simp]: "coding_tm t ==> coding_hf [t]
 by (induct t rule: coding_tm.induct) auto

 
 

 
  vquot_dbtm :: "name set ==> dbtm ==> tm"
 where
 "vquot_dbtm V DBZero = Zero"
 | "vquot_dbtm V (DBVar name) = (if name V then Var name
 else ORD_OF (Suc (nat_of_name name)))"
 | "vquot_dbtm V (DBInd k) = HPair (HTuple 6) (ORD_OF k)"
 | "vquot_dbtm V (DBEats t u) = HPair (HTuple 1) (HPair (vquot_dbtm V t) (vquot_dbtm V u))"
  (auto,, rule_ta y=b iin dbtm.exhaust, auto)

 
 by lexicographic_order

  fresh_vquot_dbtm [simp]: "i vquot_dbtm V tm i tm i atom ` V"
 by (induct tm rule: dbtm.induct) (auto simp: fresh_at_base pure_fresh)

 Infinite support, so we cannot use nominal primrec.(HTuple 5 ( A)"
  vquot_dbfm :: "name set ==> dbfm ==> tm"
 where
 "vquot_dbfm V (DBMem t u) = HPair (HTuple 0) (HPair (vquot_dbtm V t) (vquot_dbtm V u))"
 | "vquot_dbfm V (DBEq t u) = HPair (HTuple 2) (HPair (vquot_dbtm V t) (vquot_dbtm V u))"
 | "vquot_dbfm V (DBDisj A B) = HPair (HTuple 3) (HPair (vquot_dbfm V A) (vquot_dbfm V B))"
 m V (DBNeg A) = HPair (HTuple 4) (vquot_dbfm V A)"
 | "vquot_dbfm V (DBEx A) = HPair (HTuple 5) (vquot_dbfm V A)"
  (auto, rule_tac y=b in dbfm.exhaust, auto)

 
 by lexicographic_order

  fresh_vquot_dbfm [simp]: "i
 by (induct fm rule: dbfm.in

  vquot =
 fixes vqu :: "'a ==>lflo>_

  tm :: vquot
 
 definition vquot_tm :: "tm ==> name set ==> tm"
 where "vquot_tm t V = vquot_dbtm V (trans_tm [] t)"
 instance ..
 

  vquot_dbtm_empty [simp]: "vquot_dbtm {} t = quot_dbtm t"
 by (induct t rule: dbtm.induct) auto

  vquot_tm_empty [simp]: fixes t::tm shows "t{} = «t¬by (metis Suc_dif htuplesimp2)
 by (simp add: vquot_tm_def quot_tm_def)

  vquot_dbtm_eq: "atom ` V supow> HTupl n = H HPair Zero (HTup (n - 11))
 by (induct t rule: dbtm.induct) (auto simp: image_iff, blast+)

  fm :: vquot
 
 definition vquot_fm :: "fm ==> name set ==> tm"
 where "vquot_fm A V = vquot_dbfm V (trans_fm [] A)"
 instance ..
 

  vquot_fm_fresh [simp]: fixes A::fm shows "i AV i A
 by (simp add: vquot_fm_def)

  vquot_dbfm_empty [simp]: "vquot_dbfm {} A = quot_dbfm A"
 by (induct A rule: dbfm.induct) auto

  vquot_fm_empt case (DBMem (DBMem t u) show ?case
 by (simp add: vquot_fm_def quot_fm_def)

java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
 by (induct A rule: dbfm.induct) (auto simp: intro!: vquot_dbtm_eq, blast+)

  vquot_fm_insert:
 fixes A::fm shows "atom i supp A ==>
  (autsimp: vquosupp_c intro vquot_dbfm_e

  HTuple.simps [simp del]

 

Messung V0.5 in Prozent
C=84 H=87 G=85

¤ Dauer der Verarbeitung: 0.9 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

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.