Nominal/Manual/Term4.thy
author Cezary Kaliszyk <kaliszyk@in.tum.de>
Wed, 05 May 2010 09:23:10 +0200
changeset 2063 e4e128e59c41
parent 2061 37337fd5e8a7
child 2120 2786ff1df475
permissions -rw-r--r--
Some cleaning in Term4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1270
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
     1
theory Term4
2061
37337fd5e8a7 Move Term4 to NewParser
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2060
diff changeset
     2
imports "../NewAlpha" "../Abs" "../Perm" "../Rsp" "../Lift" "Quotient_List" "../../Attic/Prove"
1270
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
     3
begin
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
     4
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
     5
atom_decl name
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
     6
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
     7
section {*** lam with indirect list recursion ***}
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
     8
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
     9
datatype rtrm4 =
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    10
  rVr4 "name"
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    11
| rAp4 "rtrm4" "rtrm4 list"
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    12
| rLm4 "name" "rtrm4"  --"bind (name) in (trm)"
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    13
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    14
(* there cannot be a clause for lists, as *)
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    15
(* permutations are  already defined in Nominal (also functions, options, and so on) *)
2060
04a881bf49e4 Fix Term4 for permutation signature change
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1906
diff changeset
    16
ML {*
04a881bf49e4 Fix Term4 for permutation signature change
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1906
diff changeset
    17
  val dtinfo = Datatype.the_info @{theory} "Term4.rtrm4";
04a881bf49e4 Fix Term4 for permutation signature change
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1906
diff changeset
    18
  val {descr, sorts, ...} = dtinfo;
04a881bf49e4 Fix Term4 for permutation signature change
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1906
diff changeset
    19
*}
04a881bf49e4 Fix Term4 for permutation signature change
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1906
diff changeset
    20
setup {* snd o (define_raw_perms descr sorts @{thm rtrm4.induct} 1) *}
2063
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    21
lemmas perm = permute_rtrm4_permute_rtrm4_list.simps(1-3)
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    22
lemma perm_fix:
1270
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    23
  fixes ts::"rtrm4 list"
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    24
  shows "permute_rtrm4_list p ts = p \<bullet> ts"
2063
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    25
  by (induct ts) simp_all
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    26
lemmas perm_fixed = perm[simplified perm_fix]
1862
310b7b768adf Lifting in Term4.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1856
diff changeset
    27
2061
37337fd5e8a7 Move Term4 to NewParser
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2060
diff changeset
    28
ML {* val bl = [[[BEmy 0], [BEmy 0, BEmy 1], [BSet ([(NONE, 0)], [1])]], [[], [BEmy 0, BEmy 1]]] *}
1270
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    29
2061
37337fd5e8a7 Move Term4 to NewParser
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2060
diff changeset
    30
local_setup {* fn ctxt => let val (_, _, ctxt') = define_raw_fv descr sorts [] bl ctxt in ctxt' end *}
2063
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    31
lemmas fv = fv_rtrm4.simps (*fv_rtrm4_list.simps*)
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    32
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    33
lemma fv_fix: "fv_rtrm4_list = Union o (set o (map fv_rtrm4))"
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    34
  by (rule ext) (induct_tac x, simp_all)
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    35
lemmas fv_fixed = fv[simplified fv_fix]
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    36
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    37
(* TODO: check remove 2 *)
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    38
local_setup {* snd o (prove_eqvt [@{typ rtrm4},@{typ "rtrm4 list"}] @{thm rtrm4.induct} @{thms perm_fixed fv_rtrm4.simps fv_rtrm4_list.simps} [@{term fv_rtrm4}, @{term fv_rtrm4_list}]) *}
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    39
thm eqvts(1-2)
2061
37337fd5e8a7 Move Term4 to NewParser
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2060
diff changeset
    40
37337fd5e8a7 Move Term4 to NewParser
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2060
diff changeset
    41
local_setup {* snd o define_raw_alpha dtinfo [] bl [@{term fv_rtrm4}, @{term fv_rtrm4_list}] *}
2063
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    42
local_setup {* (fn ctxt => snd (Local_Theory.note ((@{binding alpha4_inj}, []), (build_rel_inj @{thms alpha_rtrm4_alpha_rtrm4_list.intros} @{thms rtrm4.distinct rtrm4.inject list.distinct list.inject} @{thms alpha_rtrm4.cases alpha_rtrm4_list.cases} ctxt)) ctxt)) *}
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    43
lemmas alpha_inj = alpha4_inj(1-3)
1270
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    44
2063
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    45
lemma alpha_fix: "alpha_rtrm4_list = list_rel alpha_rtrm4"
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    46
  apply (rule ext)+
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    47
  apply (induct_tac x xa rule: list_induct2')
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    48
  apply (simp_all add: alpha_rtrm4_alpha_rtrm4_list.intros)
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    49
  apply clarify apply (erule alpha_rtrm4_list.cases) apply(simp_all)
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    50
  apply clarify apply (erule alpha_rtrm4_list.cases) apply(simp_all)
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    51
  apply rule
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    52
  apply (erule alpha_rtrm4_list.cases)
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    53
  apply simp_all
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    54
  apply (rule alpha_rtrm4_alpha_rtrm4_list.intros)
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    55
  apply simp_all
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    56
  done
1318
cce1b6d1b761 Some tests around Term4. Not sure how to fix the generated fv function.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1300
diff changeset
    57
2063
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    58
lemmas alpha_inj_fixed = alpha_inj[simplified alpha_fix (*fv_fix*)]
1318
cce1b6d1b761 Some tests around Term4. Not sure how to fix the generated fv function.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1300
diff changeset
    59
1270
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    60
notation
2063
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    61
    alpha_rtrm4 ("_ \<approx>4 _" [100, 100] 100)
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    62
and alpha_rtrm4_list ("_ \<approx>4l _" [100, 100] 100)
1270
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    63
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    64
local_setup {*
1906
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
    65
(fn ctxt => snd (Local_Theory.note ((@{binding alpha4_eqvt}, []),
2063
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    66
  build_alpha_eqvts [@{term alpha_rtrm4}, @{term alpha_rtrm4_list}] (fn _ => alpha_eqvt_tac @{thm alpha_rtrm4_alpha_rtrm4_list.induct} @{thms perm_fixed alpha4_inj} ctxt 1) ctxt) ctxt))
1318
cce1b6d1b761 Some tests around Term4. Not sure how to fix the generated fv function.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1300
diff changeset
    67
*}
1906
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
    68
thm alpha4_eqvt
2063
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    69
lemmas alpha4_eqvt_fixed = alpha4_eqvt(1)[simplified alpha_fix (*fv_fix*)]
1318
cce1b6d1b761 Some tests around Term4. Not sure how to fix the generated fv function.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1300
diff changeset
    70
1854
8442d81496d5 alpha4_eqvt and alpha4_reflp
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1853
diff changeset
    71
local_setup {* (fn ctxt => snd (Local_Theory.note ((@{binding alpha4_reflp}, []),
1906
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
    72
  build_alpha_refl [((0, @{term alpha_rtrm4}), 0), ((0, @{term alpha_rtrm4_list}), 0)] [@{term alpha_rtrm4}, @{term alpha_rtrm4_list}] @{thm rtrm4.induct} @{thms alpha4_inj} ctxt) ctxt)) *}
1854
8442d81496d5 alpha4_eqvt and alpha4_reflp
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1853
diff changeset
    73
thm alpha4_reflp
8442d81496d5 alpha4_eqvt and alpha4_reflp
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1853
diff changeset
    74
1906
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
    75
local_setup {* (fn ctxt => snd (Local_Theory.note ((@{binding alpha4_equivp}, []),
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
    76
  (build_equivps [@{term alpha_rtrm4}, @{term alpha_rtrm4_list}] @{thms alpha4_reflp} @{thm alpha_rtrm4_alpha_rtrm4_list.induct} @{thms rtrm4.inject list.inject} @{thms alpha4_inj} @{thms rtrm4.distinct list.distinct} @{thms alpha_rtrm4_list.cases alpha_rtrm4.cases} @{thms alpha4_eqvt} ctxt)) ctxt)) *}
2063
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    77
lemmas alpha4_equivp_fixed = alpha4_equivp[simplified alpha_fix fv_fix]
1318
cce1b6d1b761 Some tests around Term4. Not sure how to fix the generated fv function.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1300
diff changeset
    78
2063
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
    79
quotient_type
1318
cce1b6d1b761 Some tests around Term4. Not sure how to fix the generated fv function.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1300
diff changeset
    80
  trm4 = rtrm4 / alpha_rtrm4
cce1b6d1b761 Some tests around Term4. Not sure how to fix the generated fv function.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1300
diff changeset
    81
  by (simp_all add: alpha4_equivp)
cce1b6d1b761 Some tests around Term4. Not sure how to fix the generated fv function.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1300
diff changeset
    82
cce1b6d1b761 Some tests around Term4. Not sure how to fix the generated fv function.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1300
diff changeset
    83
local_setup {*
cce1b6d1b761 Some tests around Term4. Not sure how to fix the generated fv function.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1300
diff changeset
    84
(fn ctxt => ctxt
1855
0a306922ace7 alpha4_equivp and constant lifting.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1854
diff changeset
    85
 |> snd o (Quotient_Def.quotient_lift_const [] ("Vr4", @{term rVr4}))
1856
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
    86
 |> snd o (Quotient_Def.quotient_lift_const [@{typ "trm4"}] ("Ap4", @{term rAp4}))
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
    87
 |> snd o (Quotient_Def.quotient_lift_const [] ("Lm4", @{term rLm4}))
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
    88
 |> snd o (Quotient_Def.quotient_lift_const [] ("fv_trm4", @{term fv_rtrm4})))
1270
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    89
*}
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    90
print_theorems
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    91
1856
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
    92
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
    93
lemma fv_rtrm4_rsp:
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
    94
  "xa \<approx>4 ya \<Longrightarrow> fv_rtrm4 xa = fv_rtrm4 ya"
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
    95
  "x \<approx>4l y \<Longrightarrow> fv_rtrm4_list x = fv_rtrm4_list y"
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
    96
  apply (induct rule: alpha_rtrm4_alpha_rtrm4_list.inducts)
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
    97
  apply (simp_all add: alpha_gen)
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
    98
done
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
    99
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   100
local_setup {* snd o prove_const_rsp [] @{binding fv_rtrm4_rsp'} [@{term fv_rtrm4}]
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   101
  (fn _ => asm_full_simp_tac (@{simpset} addsimps @{thms fv_rtrm4_rsp}) 1) *}
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   102
print_theorems
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   103
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   104
local_setup {* snd o prove_const_rsp [] @{binding rVr4_rsp} [@{term rVr4}]
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   105
  (fn _ => constr_rsp_tac @{thms alpha4_inj} @{thms fv_rtrm4_rsp alpha4_equivp} 1) *}
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   106
local_setup {* snd o prove_const_rsp [] @{binding rLm4_rsp} [@{term rLm4}]
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   107
  (fn _ => constr_rsp_tac @{thms alpha4_inj} @{thms fv_rtrm4_rsp alpha4_equivp} 1) *}
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   108
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   109
lemma [quot_respect]:
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   110
  "(alpha_rtrm4 ===> list_rel alpha_rtrm4 ===> alpha_rtrm4) rAp4 rAp4"
2063
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
   111
  by (simp add: alpha_inj_fixed)
1856
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   112
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   113
local_setup {* snd o prove_const_rsp [] @{binding permute_rtrm4_rsp}
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   114
  [@{term "permute :: perm \<Rightarrow> rtrm4 \<Rightarrow> rtrm4"}]
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   115
  (fn _ => asm_simp_tac (HOL_ss addsimps @{thms alpha4_eqvt}) 1) *}
1270
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   116
1906
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   117
setup {* define_lifted_perms [@{typ trm4}] ["Term4.trm4"] [("permute_trm4", @{term "permute :: perm \<Rightarrow> rtrm4 \<Rightarrow> rtrm4"})] @{thms permute_rtrm4_permute_rtrm4_list_zero permute_rtrm4_permute_rtrm4_list_plus} *}
1862
310b7b768adf Lifting in Term4.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1856
diff changeset
   118
print_theorems
1318
cce1b6d1b761 Some tests around Term4. Not sure how to fix the generated fv function.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1300
diff changeset
   119
1906
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   120
(* Instead of permute for trm4_list we may need the following 2 lemmas: *)
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   121
lemma [quot_preserve]: "(id ---> map rep_trm4 ---> map abs_trm4) permute = permute"
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   122
  apply (simp add: expand_fun_eq)
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   123
  apply clarify
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   124
  apply (rename_tac "pi" x)
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   125
  apply (induct_tac x)
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   126
  apply simp
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   127
  apply simp
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   128
  apply (simp add: meta_eq_to_obj_eq[OF permute_trm4_def,simplified expand_fun_eq,simplified])
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   129
  done
1856
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   130
1906
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   131
lemma [quot_respect]: "(op = ===> list_rel alpha_rtrm4 ===> list_rel alpha_rtrm4) permute permute"
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   132
  apply simp
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   133
  apply (rule allI)+
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   134
  apply (induct_tac xa y rule: list_induct2')
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   135
  apply simp_all
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   136
  apply clarify
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   137
  apply (erule alpha4_eqvt)
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   138
  done
1856
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   139
1906
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   140
ML {*
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   141
  map (lift_thm [@{typ trm4}] @{context}) @{thms perm_fixed}
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   142
*}
1318
cce1b6d1b761 Some tests around Term4. Not sure how to fix the generated fv function.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1300
diff changeset
   143
1856
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   144
ML {* lift_thm [@{typ trm4}] @{context} @{thm rtrm4.induct} *}
1906
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   145
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   146
ML {*
2063
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
   147
  map (lift_thm [@{typ trm4}] @{context}) @{thms fv_rtrm4.simps[simplified fv_fix] fv_rtrm4_list.simps[simplified fv_fix]}
1906
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   148
*}
1856
c8e406f64db0 More on Manual/Trm4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1855
diff changeset
   149
1906
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   150
ML {*
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   151
val liftd =
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   152
  map (Local_Defs.unfold @{context} @{thms id_simps}) (
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   153
    map (Local_Defs.fold @{context} @{thms alphas}) (
2063
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
   154
      map (lift_thm [@{typ trm4}] @{context}) @{thms alpha_inj_fixed[unfolded alphas]}
1906
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   155
    )
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   156
  )
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   157
*}
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   158
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   159
ML {*
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   160
  map (lift_thm [@{typ trm4}] @{context})
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   161
  (flat (map (distinct_rel @{context} @{thms alpha_rtrm4.cases alpha_rtrm4_list.cases}) [(@{thms rtrm4.distinct},@{term "alpha_rtrm4"})]))
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   162
*}
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   163
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   164
ML {*
2063
e4e128e59c41 Some cleaning in Term4
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 2061
diff changeset
   165
  map (lift_thm [@{typ trm4}] @{context}) @{thms eqvts(1-2)[simplified fv_fix]}
1906
0dc61c2966da All lifted in Term4. Requires new isabelle.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1862
diff changeset
   166
*}
1270
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   167
8c3cf9f4f5f2 Split Terms into separate files and add them to tests.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   168
end