author | Christian Urban <christian dot urban at kcl dot ac dot uk> |
Mon, 19 May 2014 16:45:46 +0100 | |
changeset 3236 | e2da10806a34 |
parent 3235 | 5ebd327ffb96 |
permissions | -rw-r--r-- |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
1 |
header {* Constant definitions *} |
2898
a95a497e1f4f
Make examples work with non-precompiled image
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2893
diff
changeset
|
2 |
|
a95a497e1f4f
Make examples work with non-precompiled image
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2893
diff
changeset
|
3 |
theory Consts imports Utils begin |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
4 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
5 |
fun Umn :: "nat \<Rightarrow> nat \<Rightarrow> lam" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
6 |
where |
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
7 |
[simp del]: "Umn 0 n = \<integral>(cn 0). Var (cn n)" |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
8 |
| [simp del]: "Umn (Suc m) n = \<integral>(cn (Suc m)). Umn m n" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
9 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
10 |
lemma [simp]: "2 = Suc 1" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
11 |
by auto |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
12 |
|
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
13 |
lemma split_lemma: |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
14 |
"(a = b \<and> X) \<or> (a \<noteq> b \<and> Y) \<longleftrightarrow> (a = b \<longrightarrow> X) \<and> (a \<noteq> b \<longrightarrow> Y)" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
15 |
by blast |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
16 |
|
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
17 |
lemma Lam_U: |
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
18 |
assumes "x \<noteq> y" "y \<noteq> z" "x \<noteq> z" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
19 |
shows "Umn 2 0 = \<integral>x. \<integral>y. \<integral>z. Var z" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
20 |
"Umn 2 1 = \<integral>x. \<integral>y. \<integral>z. Var y" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
21 |
"Umn 2 2 = \<integral>x. \<integral>y. \<integral>z. Var x" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
22 |
apply (simp_all add: Umn.simps Abs1_eq_iff lam.fresh fresh_at_base flip_def[symmetric] Umn.simps cnd permute_flip_at assms assms[symmetric] split_lemma) |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
23 |
apply (intro impI conjI) |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
24 |
apply (metis assms)+ |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
25 |
done |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
26 |
|
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
27 |
lemma supp_U1: "n \<le> m \<Longrightarrow> atom (cn n) \<notin> supp (Umn m n)" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
28 |
by (induct m) |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
29 |
(auto simp add: lam.supp supp_at_base Umn.simps le_Suc_eq) |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
30 |
|
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
31 |
lemma supp_U2: "supp (Umn m n) \<subseteq> {atom (cn n)}" |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
32 |
by (induct m) (auto simp add: lam.supp supp_at_base Umn.simps) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
33 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
34 |
lemma supp_U[simp]: "n \<le> m \<Longrightarrow> supp (Umn m n) = {}" |
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
35 |
using supp_U1 supp_U2 |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
36 |
by blast |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
37 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
38 |
lemma U_eqvt: |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
39 |
"n \<le> m \<Longrightarrow> p \<bullet> (Umn m n) = Umn m n" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
40 |
by (rule_tac [!] perm_supp_eq) (simp_all add: fresh_star_def fresh_def) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
41 |
|
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
42 |
definition VAR where "VAR \<equiv> \<integral>cx. \<integral>cy. (Var cy \<cdot> (Umn 2 2) \<cdot> Var cx \<cdot> Var cy)" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
43 |
definition "APP \<equiv> \<integral>cx. \<integral>cy. \<integral>cz. (Var cz \<cdot> Umn 2 1 \<cdot> Var cx \<cdot> Var cy \<cdot> Var cz)" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
44 |
definition "Abs \<equiv> \<integral>cx. \<integral>cy. (Var cy \<cdot> Umn 2 0 \<cdot> Var cx \<cdot> Var cy)" |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
45 |
|
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
46 |
lemma VAR_APP_Abs: |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
47 |
"x \<noteq> e \<Longrightarrow> VAR = \<integral>x. \<integral>e. (Var e \<cdot> Umn 2 2 \<cdot> Var x \<cdot> Var e)" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
48 |
"e \<noteq> x \<Longrightarrow> e \<noteq> y \<Longrightarrow> x \<noteq> y \<Longrightarrow> APP = \<integral>x. \<integral>y. \<integral>e. (Var e \<cdot> Umn 2 1 \<cdot> Var x \<cdot> Var y \<cdot> Var e)" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
49 |
"x \<noteq> e \<Longrightarrow> Abs = \<integral>x. \<integral>e. (Var e \<cdot> Umn 2 0 \<cdot> Var x \<cdot> Var e)" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
50 |
unfolding VAR_def APP_def Abs_def |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
51 |
by (simp_all add: Abs1_eq_iff lam.fresh flip_def[symmetric] U_eqvt fresh_def lam.supp supp_at_base split_lemma permute_flip_at) |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
52 |
(auto simp only: cx_cy_cz cx_cy_cz[symmetric]) |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
53 |
|
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
54 |
lemma VAR_app: |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
55 |
"VAR \<cdot> x \<cdot> e \<approx> e \<cdot> Umn 2 2 \<cdot> x \<cdot> e" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
56 |
by (rule lam2_fast_app[OF VAR_APP_Abs(1)]) simp_all |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
57 |
|
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
58 |
lemma APP_app: |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
59 |
"APP \<cdot> x \<cdot> y \<cdot> e \<approx> e \<cdot> Umn 2 1 \<cdot> x \<cdot> y \<cdot> e" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
60 |
by (rule lam3_fast_app[OF VAR_APP_Abs(2)]) (simp_all) |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
61 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
62 |
lemma Abs_app: |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
63 |
"Abs \<cdot> x \<cdot> e \<approx> e \<cdot> Umn 2 0 \<cdot> x \<cdot> e" |
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
64 |
by (rule lam2_fast_app[OF VAR_APP_Abs(3)]) simp_all |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
65 |
|
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
66 |
lemma supp_VAR_APP_Abs[simp]: |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
67 |
"supp VAR = {}" "supp APP = {}" "supp Abs = {}" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
68 |
by (simp_all add: VAR_def APP_def Abs_def lam.supp supp_at_base) blast+ |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
69 |
|
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
70 |
lemma VAR_APP_Abs_eqvt[eqvt]: |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
71 |
"p \<bullet> VAR = VAR" "p \<bullet> APP = APP" "p \<bullet> Abs = Abs" |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
72 |
by (rule_tac [!] perm_supp_eq) (simp_all add: fresh_star_def fresh_def) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
73 |
|
3235
5ebd327ffb96
changed nominal_primrec into the more appropriate nominal_function
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
3175
diff
changeset
|
74 |
nominal_function |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
75 |
Numeral :: "lam \<Rightarrow> lam" ("\<lbrace>_\<rbrace>" 1000) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
76 |
where |
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
77 |
"\<lbrace>Var x\<rbrace> = VAR \<cdot> (Var x)" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
78 |
| Ap: "\<lbrace>M \<cdot> N\<rbrace> = APP \<cdot> \<lbrace>M\<rbrace> \<cdot> \<lbrace>N\<rbrace>" |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
79 |
| "\<lbrace>\<integral>x. M\<rbrace> = Abs \<cdot> (\<integral>x. \<lbrace>M\<rbrace>)" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
80 |
proof auto |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
81 |
fix x :: lam and P |
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
82 |
assume "\<And>xa. x = Var xa \<Longrightarrow> P" "\<And>M N. x = M \<cdot> N \<Longrightarrow> P" "\<And>xa M. x = \<integral> xa. M \<Longrightarrow> P" |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
83 |
then show "P" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
84 |
by (rule_tac y="x" and c="0 :: perm" in lam.strong_exhaust) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
85 |
(auto simp add: Abs1_eq_iff fresh_star_def)[3] |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
86 |
next |
3088
5e74bd87bcda
SFT/LambdaTerms: rename 'var' to 'name' to match Lambda.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
3087
diff
changeset
|
87 |
fix x :: name and M and xa :: name and Ma |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
88 |
assume "[[atom x]]lst. M = [[atom xa]]lst. Ma" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
89 |
"eqvt_at Numeral_sumC M" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
90 |
then show "[[atom x]]lst. Numeral_sumC M = [[atom xa]]lst. Numeral_sumC Ma" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
91 |
apply - |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
92 |
apply (erule Abs_lst1_fcb) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
93 |
apply (simp_all add: Abs_fresh_iff) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
94 |
apply (erule fresh_eqvt_at) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
95 |
apply (simp_all add: finite_supp Abs1_eq_iff eqvt_at_def) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
96 |
done |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
97 |
next |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
98 |
show "eqvt Numeral_graph" unfolding eqvt_def Numeral_graph_def |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
99 |
by (rule, perm_simp, rule) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
100 |
qed |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
101 |
|
3236
e2da10806a34
changed nominal_primrec to nominal_function and termination to nominal_termination
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
3235
diff
changeset
|
102 |
nominal_termination (eqvt) by lexicographic_order |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
103 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
104 |
lemma supp_numeral[simp]: |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
105 |
"supp \<lbrace>x\<rbrace> = supp x" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
106 |
by (induct x rule: lam.induct) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
107 |
(simp_all add: lam.supp) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
108 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
109 |
lemma fresh_numeral[simp]: |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
110 |
"x \<sharp> \<lbrace>y\<rbrace> = x \<sharp> y" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
111 |
unfolding fresh_def by simp |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
112 |
|
3088
5e74bd87bcda
SFT/LambdaTerms: rename 'var' to 'name' to match Lambda.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
3087
diff
changeset
|
113 |
fun app_lst :: "name \<Rightarrow> lam list \<Rightarrow> lam" where |
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
114 |
"app_lst n [] = Var n" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
115 |
| "app_lst n (h # t) = (app_lst n t) \<cdot> h" |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
116 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
117 |
lemma app_lst_eqvt[eqvt]: "p \<bullet> (app_lst t ts) = app_lst (p \<bullet> t) (p \<bullet> ts)" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
118 |
by (induct ts arbitrary: t p) (simp_all add: eqvts) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
119 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
120 |
lemma supp_app_lst: "supp (app_lst x l) = {atom x} \<union> supp l" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
121 |
apply (induct l) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
122 |
apply (simp_all add: supp_Nil lam.supp supp_at_base supp_Cons) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
123 |
by blast |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
124 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
125 |
lemma app_lst_eq_iff: "app_lst n M = app_lst n N \<Longrightarrow> M = N" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
126 |
by (induct M N rule: list_induct2') simp_all |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
127 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
128 |
lemma app_lst_rev_eq_iff: "app_lst n (rev M) = app_lst n (rev N) \<Longrightarrow> M = N" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
129 |
by (drule app_lst_eq_iff) simp |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
130 |
|
3235
5ebd327ffb96
changed nominal_primrec into the more appropriate nominal_function
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
3175
diff
changeset
|
131 |
nominal_function |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
132 |
Ltgt :: "lam list \<Rightarrow> lam" ("\<guillemotleft>_\<guillemotright>" 1000) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
133 |
where |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
134 |
[simp del]: "atom x \<sharp> l \<Longrightarrow> \<guillemotleft>l\<guillemotright> = \<integral>x. (app_lst x (rev l))" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
135 |
unfolding eqvt_def Ltgt_graph_def |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
136 |
apply (rule, perm_simp, rule, rule) |
3088
5e74bd87bcda
SFT/LambdaTerms: rename 'var' to 'name' to match Lambda.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
3087
diff
changeset
|
137 |
apply (rule_tac x="x" and ?'a="name" in obtain_fresh) |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
138 |
apply (simp_all add: Abs1_eq_iff lam.fresh swap_fresh_fresh fresh_at_base) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
139 |
apply (simp add: eqvts swap_fresh_fresh) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
140 |
apply (case_tac "x = xa") |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
141 |
apply simp_all |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
142 |
apply (subgoal_tac "eqvt app_lst") |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
143 |
apply (erule fresh_fun_eqvt_app2) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
144 |
apply (simp_all add: fresh_at_base lam.fresh eqvt_def eqvts_raw fresh_rev) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
145 |
done |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
146 |
|
3236
e2da10806a34
changed nominal_primrec to nominal_function and termination to nominal_termination
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
3235
diff
changeset
|
147 |
nominal_termination (eqvt) by lexicographic_order |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
148 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
149 |
lemma ltgt_eq_iff[simp]: |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
150 |
"\<guillemotleft>M\<guillemotright> = \<guillemotleft>N\<guillemotright> \<longleftrightarrow> M = N" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
151 |
proof auto |
3088
5e74bd87bcda
SFT/LambdaTerms: rename 'var' to 'name' to match Lambda.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
3087
diff
changeset
|
152 |
obtain x :: name where "atom x \<sharp> (M, N)" using obtain_fresh by auto |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
153 |
then have *: "atom x \<sharp> M" "atom x \<sharp> N" using fresh_Pair by simp_all |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
154 |
then show "(\<guillemotleft>M\<guillemotright> = \<guillemotleft>N\<guillemotright>) \<Longrightarrow> (M = N)" by (simp add: Abs1_eq_iff app_lst_rev_eq_iff Ltgt.simps) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
155 |
qed |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
156 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
157 |
lemma Ltgt1_app: "\<guillemotleft>[M]\<guillemotright> \<cdot> N \<approx> N \<cdot> M" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
158 |
proof - |
3088
5e74bd87bcda
SFT/LambdaTerms: rename 'var' to 'name' to match Lambda.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
3087
diff
changeset
|
159 |
obtain x :: name where "atom x \<sharp> (M, N)" using obtain_fresh by auto |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
160 |
then have "atom x \<sharp> M" "atom x \<sharp> N" using fresh_Pair by simp_all |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
161 |
then show ?thesis |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
162 |
apply (subst Ltgt.simps) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
163 |
apply (simp add: fresh_Cons fresh_Nil) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
164 |
apply (rule b3, rule bI, simp add: b1) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
165 |
done |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
166 |
qed |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
167 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
168 |
lemma Ltgt3_app: "\<guillemotleft>[M,N,P]\<guillemotright> \<cdot> R \<approx> R \<cdot> M \<cdot> N \<cdot> P" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
169 |
proof - |
3088
5e74bd87bcda
SFT/LambdaTerms: rename 'var' to 'name' to match Lambda.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
3087
diff
changeset
|
170 |
obtain x :: name where "atom x \<sharp> (M, N, P, R)" using obtain_fresh by auto |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
171 |
then have *: "atom x \<sharp> (M,N,P)" "atom x \<sharp> R" using fresh_Pair by simp_all |
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
172 |
then have s: "Var x \<cdot> M \<cdot> N \<cdot> P [x ::= R] \<approx> R \<cdot> M \<cdot> N \<cdot> P" using b1 by simp |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
173 |
show ?thesis using * |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
174 |
apply (subst Ltgt.simps) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
175 |
apply (simp add: fresh_Cons fresh_Nil fresh_Pair_elim) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
176 |
apply auto[1] |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
177 |
apply (rule b3, rule bI, simp add: b1) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
178 |
done |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
179 |
qed |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
180 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
181 |
lemma supp_ltgt[simp]: |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
182 |
"supp \<guillemotleft>t\<guillemotright> = supp t" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
183 |
proof - |
3088
5e74bd87bcda
SFT/LambdaTerms: rename 'var' to 'name' to match Lambda.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
3087
diff
changeset
|
184 |
obtain x :: name where *:"atom x \<sharp> t" using obtain_fresh by auto |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
185 |
show ?thesis using * |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
186 |
by (simp_all add: Ltgt.simps lam.supp supp_at_base supp_Nil supp_app_lst supp_rev fresh_def) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
187 |
qed |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
188 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
189 |
lemma fresh_ltgt[simp]: |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
190 |
"x \<sharp> \<guillemotleft>[y]\<guillemotright> = x \<sharp> y" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
191 |
"x \<sharp> \<guillemotleft>[t,r,s]\<guillemotright> = x \<sharp> (t,r,s)" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
192 |
by (simp_all add: fresh_def supp_Cons supp_Nil supp_Pair) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
193 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
194 |
lemma Ltgt1_subst[simp]: |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
195 |
"\<guillemotleft>[M]\<guillemotright> [y ::= A] = \<guillemotleft>[M [y ::= A]]\<guillemotright>" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
196 |
proof - |
3088
5e74bd87bcda
SFT/LambdaTerms: rename 'var' to 'name' to match Lambda.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
3087
diff
changeset
|
197 |
obtain x :: name where a: "atom x \<sharp> (M, A, y, M [y ::= A])" using obtain_fresh by blast |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
198 |
have "x \<noteq> y" using a[simplified fresh_Pair fresh_at_base] by simp |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
199 |
then show ?thesis |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
200 |
apply (subst Ltgt.simps) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
201 |
using a apply (simp add: fresh_Nil fresh_Cons fresh_Pair_elim) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
202 |
apply (subst Ltgt.simps) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
203 |
using a apply (simp add: fresh_Pair_elim fresh_Nil fresh_Cons) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
204 |
apply (simp add: a) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
205 |
done |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
206 |
qed |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
207 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
208 |
lemma U_app: |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
209 |
"\<guillemotleft>[A,B,C]\<guillemotright> \<cdot> Umn 2 2 \<approx> A" "\<guillemotleft>[A,B,C]\<guillemotright> \<cdot> Umn 2 1 \<approx> B" "\<guillemotleft>[A,B,C]\<guillemotright> \<cdot> Umn 2 0 \<approx> C" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
210 |
by (rule b3, rule Ltgt3_app, rule lam3_fast_app, rule Lam_U, simp_all) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
211 |
(rule b3, rule Ltgt3_app, rule lam3_fast_app, rule Lam_U[simplified], simp_all)+ |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
212 |
|
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
213 |
definition "F1 \<equiv> \<integral>cx. (APP \<cdot> \<lbrace>VAR\<rbrace> \<cdot> (VAR \<cdot> Var cx))" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
214 |
definition "F2 \<equiv> \<integral>cx. \<integral>cy. \<integral>cz. ((APP \<cdot> (APP \<cdot> \<lbrace>APP\<rbrace> \<cdot> (Var cz \<cdot> Var cx))) \<cdot> (Var cz \<cdot> Var cy))" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
215 |
definition "F3 \<equiv> \<integral>cx. \<integral>cy. (APP \<cdot> \<lbrace>Abs\<rbrace> \<cdot> (Abs \<cdot> (\<integral>cz. (Var cy \<cdot> (Var cx \<cdot> Var cz)))))" |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
216 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
217 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
218 |
lemma Lam_F: |
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
219 |
"F1 = \<integral>x. (APP \<cdot> \<lbrace>VAR\<rbrace> \<cdot> (VAR \<cdot> Var x))" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
220 |
"a \<noteq> b \<Longrightarrow> a \<noteq> c \<Longrightarrow> c \<noteq> b \<Longrightarrow> F2 = \<integral>a. \<integral>b. \<integral>c. ((APP \<cdot> (APP \<cdot> \<lbrace>APP\<rbrace> \<cdot> (Var c \<cdot> Var a))) \<cdot> (Var c \<cdot> Var b))" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
221 |
"a \<noteq> b \<Longrightarrow> a \<noteq> x \<Longrightarrow> x \<noteq> b \<Longrightarrow> F3 = \<integral>a. \<integral>b. (APP \<cdot> \<lbrace>Abs\<rbrace> \<cdot> (Abs \<cdot> (\<integral>x. (Var b \<cdot> (Var a \<cdot> Var x)))))" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
222 |
by (simp_all add: F1_def F2_def F3_def Abs1_eq_iff lam.fresh supp_at_base VAR_APP_Abs_eqvt Numeral.eqvt flip_def[symmetric] fresh_at_base split_lemma permute_flip_at) |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
223 |
(auto simp add: cx_cy_cz cx_cy_cz[symmetric]) |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
224 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
225 |
lemma supp_F[simp]: |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
226 |
"supp F1 = {}" "supp F2 = {}" "supp F3 = {}" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
227 |
by (simp_all add: F1_def F2_def F3_def lam.supp supp_at_base) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
228 |
blast+ |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
229 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
230 |
lemma F_eqvt[eqvt]: |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
231 |
"p \<bullet> F1 = F1" "p \<bullet> F2 = F2" "p \<bullet> F3 = F3" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
232 |
by (rule_tac [!] perm_supp_eq) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
233 |
(simp_all add: fresh_star_def fresh_def) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
234 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
235 |
lemma F_app: |
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
236 |
"F1 \<cdot> A \<approx> APP \<cdot> \<lbrace>VAR\<rbrace> \<cdot> (VAR \<cdot> A)" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
237 |
"F2 \<cdot> A \<cdot> B \<cdot> C \<approx> (APP \<cdot> (APP \<cdot> \<lbrace>APP\<rbrace> \<cdot> (C \<cdot> A))) \<cdot> (C \<cdot> B)" |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
238 |
by (rule lam1_fast_app, rule Lam_F, simp_all) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
239 |
(rule lam3_fast_app, rule Lam_F, simp_all) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
240 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
241 |
lemma F3_app: |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
242 |
assumes f: "atom x \<sharp> A" "atom x \<sharp> B" (* or A and B have empty support *) |
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
243 |
shows "F3 \<cdot> A \<cdot> B \<approx> APP \<cdot> \<lbrace>Abs\<rbrace> \<cdot> (Abs \<cdot> (\<integral>x. (B \<cdot> (A \<cdot> Var x))))" |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
244 |
proof - |
3088
5e74bd87bcda
SFT/LambdaTerms: rename 'var' to 'name' to match Lambda.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
3087
diff
changeset
|
245 |
obtain y :: name where b: "atom y \<sharp> (x, A, B)" using obtain_fresh by blast |
5e74bd87bcda
SFT/LambdaTerms: rename 'var' to 'name' to match Lambda.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
3087
diff
changeset
|
246 |
obtain z :: name where c: "atom z \<sharp> (x, y, A, B)" using obtain_fresh by blast |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
247 |
have *: "x \<noteq> z" "x \<noteq> y" "y \<noteq> z" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
248 |
using b c by (simp_all add: fresh_Pair fresh_at_base) blast+ |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
249 |
have **: |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
250 |
"atom y \<sharp> z" "atom x \<sharp> z" "atom y \<sharp> x" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
251 |
"atom z \<sharp> y" "atom z \<sharp> x" "atom x \<sharp> y" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
252 |
"atom x \<sharp> A" "atom y \<sharp> A" "atom z \<sharp> A" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
253 |
"atom x \<sharp> B" "atom y \<sharp> B" "atom z \<sharp> B" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
254 |
using b c f by (simp_all add: fresh_Pair fresh_at_base) blast+ |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
255 |
show ?thesis |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
256 |
apply (simp add: Lam_F(3)[of y z x] * *[symmetric]) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
257 |
apply (rule b3) apply (rule b5) apply (rule bI) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
258 |
apply (simp add: ** fresh_Pair * *[symmetric]) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
259 |
apply (rule b3) apply (rule bI) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
260 |
apply (simp add: ** fresh_Pair * *[symmetric]) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
261 |
apply (rule b1) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
262 |
done |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
263 |
qed |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
264 |
|
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
265 |
definition Lam_A1_pre : "A1 \<equiv> \<integral>cx. \<integral>cy. (F1 \<cdot> Var cx)" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
266 |
definition Lam_A2_pre : "A2 \<equiv> \<integral>cx. \<integral>cy. \<integral>cz. (F2 \<cdot> Var cx \<cdot> Var cy \<cdot> \<guillemotleft>[Var cz]\<guillemotright>)" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
267 |
definition Lam_A3_pre : "A3 \<equiv> \<integral>cx. \<integral>cy. (F3 \<cdot> Var cx \<cdot> \<guillemotleft>[Var cy]\<guillemotright>)" |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
268 |
lemma Lam_A: |
3087
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
269 |
"x \<noteq> y \<Longrightarrow> A1 = \<integral>x. \<integral>y. (F1 \<cdot> Var x)" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
270 |
"a \<noteq> b \<Longrightarrow> a \<noteq> c \<Longrightarrow> c \<noteq> b \<Longrightarrow> A2 = \<integral>a. \<integral>b. \<integral>c. (F2 \<cdot> Var a \<cdot> Var b \<cdot> \<guillemotleft>[Var c]\<guillemotright>)" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
271 |
"a \<noteq> b \<Longrightarrow> A3 = \<integral>a. \<integral>b. (F3 \<cdot> Var a \<cdot> \<guillemotleft>[Var b]\<guillemotright>)" |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
272 |
by (simp_all add: Lam_A1_pre Lam_A2_pre Lam_A3_pre Abs1_eq_iff lam.fresh supp_at_base VAR_APP_Abs_eqvt Numeral.eqvt flip_def[symmetric] fresh_at_base F_eqvt Ltgt.eqvt split_lemma permute_flip_at cx_cy_cz cx_cy_cz[symmetric]) |
c95afd0dc594
SFT: Rename Lambda to LambdaTerms, rename constants to match Lambda, remove smt proofs.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
2984
diff
changeset
|
273 |
auto |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
274 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
275 |
lemma supp_A[simp]: |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
276 |
"supp A1 = {}" "supp A2 = {}" "supp A3 = {}" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
277 |
by (auto simp add: Lam_A1_pre Lam_A2_pre Lam_A3_pre lam.supp supp_at_base supp_Cons supp_Nil) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
278 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
279 |
lemma A_app: |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
280 |
"A1 \<cdot> A \<cdot> B \<approx> F1 \<cdot> A" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
281 |
"A2 \<cdot> A \<cdot> B \<cdot> C \<approx> F2 \<cdot> A \<cdot> B \<cdot> \<guillemotleft>[C]\<guillemotright>" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
282 |
"A3 \<cdot> A \<cdot> B \<approx> F3 \<cdot> A \<cdot> \<guillemotleft>[B]\<guillemotright>" |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
283 |
apply (rule lam2_fast_app, rule Lam_A, simp_all) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
284 |
apply (rule lam3_fast_app, rule Lam_A, simp_all) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
285 |
apply (rule lam2_fast_app, rule Lam_A, simp_all) |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
286 |
done |
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
287 |
|
3175
52730e5ec8cb
Synchronize Nominal2_Base_Exec with Nominal2_Base, equivariance for Let, avoid overloading approx twice and changes for new isabelle
Cezary Kaliszyk <cezarykaliszyk@gmail.com>
parents:
3088
diff
changeset
|
288 |
definition "NUM \<equiv> \<guillemotleft>[\<guillemotleft>[A1,A2,A3]\<guillemotright>]\<guillemotright>" |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
289 |
|
3175
52730e5ec8cb
Synchronize Nominal2_Base_Exec with Nominal2_Base, equivariance for Let, avoid overloading approx twice and changes for new isabelle
Cezary Kaliszyk <cezarykaliszyk@gmail.com>
parents:
3088
diff
changeset
|
290 |
lemma supp_NUM[simp]: |
52730e5ec8cb
Synchronize Nominal2_Base_Exec with Nominal2_Base, equivariance for Let, avoid overloading approx twice and changes for new isabelle
Cezary Kaliszyk <cezarykaliszyk@gmail.com>
parents:
3088
diff
changeset
|
291 |
"supp NUM = {}" |
52730e5ec8cb
Synchronize Nominal2_Base_Exec with Nominal2_Base, equivariance for Let, avoid overloading approx twice and changes for new isabelle
Cezary Kaliszyk <cezarykaliszyk@gmail.com>
parents:
3088
diff
changeset
|
292 |
by (auto simp only: NUM_def supp_ltgt supp_Pair supp_A supp_Cons supp_Nil) |
2893
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
293 |
|
589b1a0c75e6
Second Fixed Point Theorem
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff
changeset
|
294 |
end |