author | berghofe |
Fri, 28 Apr 2006 17:58:33 +0200 | |
changeset 19500 | 188d4e44c1a6 |
parent 19477 | a95176d0f0dd |
child 22232 | 340cb955008e |
permissions | -rw-r--r-- |
19500 | 1 |
(* $Id$ *) |
18425 | 2 |
|
18661 | 3 |
theory Class |
19500 | 4 |
imports "../Nominal" |
18425 | 5 |
begin |
18395 | 6 |
|
18881 | 7 |
section {* Term-Calculus from Urban's PhD *} |
8 |
||
18395 | 9 |
atom_decl name coname |
10 |
||
18881 | 11 |
nominal_datatype trm = |
12 |
Ax "name" "coname" |
|
19319
7e1f85ceb1a2
added the first two simple proofs of the recursion
urbanc
parents:
18881
diff
changeset
|
13 |
| Cut "\<guillemotleft>coname\<guillemotright>trm" "\<guillemotleft>name\<guillemotright>trm" ("Cut <_>._ [_]._" [100,100,100,100] 100) |
7e1f85ceb1a2
added the first two simple proofs of the recursion
urbanc
parents:
18881
diff
changeset
|
14 |
| NotR "\<guillemotleft>name\<guillemotright>trm" "coname" ("NotR [_]._ _" [100,100,100] 100) |
18881 | 15 |
| NotL "\<guillemotleft>coname\<guillemotright>trm" "name" ("NotL <_>._ _" [100,100,100] 100) |
16 |
| AndR "\<guillemotleft>coname\<guillemotright>trm" "\<guillemotleft>coname\<guillemotright>trm" "coname" ("AndR <_>._ <_>._ _" [100,100,100,100,100] 100) |
|
19319
7e1f85ceb1a2
added the first two simple proofs of the recursion
urbanc
parents:
18881
diff
changeset
|
17 |
| AndL1 "\<guillemotleft>name\<guillemotright>trm" "name" ("AndL1 [_]._ _" [100,100,100] 100) |
7e1f85ceb1a2
added the first two simple proofs of the recursion
urbanc
parents:
18881
diff
changeset
|
18 |
| AndL2 "\<guillemotleft>name\<guillemotright>trm" "name" ("AndL2 [_]._ _" [100,100,100] 100) |
18881 | 19 |
| OrR1 "\<guillemotleft>coname\<guillemotright>trm" "coname" ("OrR1 <_>._ _" [100,100,100] 100) |
20 |
| OrR2 "\<guillemotleft>coname\<guillemotright>trm" "coname" ("OrR2 <_>._ _" [100,100,100] 100) |
|
19319
7e1f85ceb1a2
added the first two simple proofs of the recursion
urbanc
parents:
18881
diff
changeset
|
21 |
| OrL "\<guillemotleft>name\<guillemotright>trm" "\<guillemotleft>name\<guillemotright>trm" "name" ("OrL [_]._ [_]._ _" [100,100,100,100,100] 100) |
7e1f85ceb1a2
added the first two simple proofs of the recursion
urbanc
parents:
18881
diff
changeset
|
22 |
| ImpR "\<guillemotleft>name\<guillemotright>(\<guillemotleft>coname\<guillemotright>trm)" "coname" ("ImpR [_].<_>._ _" [100,100,100,100] 100) |
7e1f85ceb1a2
added the first two simple proofs of the recursion
urbanc
parents:
18881
diff
changeset
|
23 |
| ImpL "\<guillemotleft>coname\<guillemotright>trm" "\<guillemotleft>name\<guillemotright>trm" "name" ("ImpL <_>._ [_]._ _" [100,100,100,100,100] 100) |
7e1f85ceb1a2
added the first two simple proofs of the recursion
urbanc
parents:
18881
diff
changeset
|
24 |
|
19477 | 25 |
|
18881 | 26 |
text {* Induction principles *} |
18395 | 27 |
|
18881 | 28 |
thm trm.induct_weak --"weak" |
29 |
thm trm.induct --"strong" |
|
30 |
thm trm.induct' --"strong with explicit context (rarely needed)" |
|
31 |
||
32 |
text {* named terms *} |
|
33 |
||
34 |
nominal_datatype ntrm = N "\<guillemotleft>name\<guillemotright>trm" ("N (_)._" [100,100] 100) |
|
35 |
||
36 |
text {* conamed terms *} |
|
18395 | 37 |
|
18881 | 38 |
nominal_datatype ctrm = C "\<guillemotleft>coname\<guillemotright>trm" ("C <_>._" [100,100] 100) |
39 |
||
40 |
text {* We should now define the two forms of substitition :o( *} |
|
18395 | 41 |
|
18881 | 42 |
consts |
43 |
substn :: "trm \<Rightarrow> name \<Rightarrow> ctrm \<Rightarrow> trm" ("_[_::=_]" [100,100,100] 100) |
|
44 |
substc :: "trm \<Rightarrow> coname \<Rightarrow> ntrm \<Rightarrow> trm" ("_[_::=_]" [100,100,100] 100) |
|
45 |
||
19500 | 46 |
text {* does not work yet *} |
47 |
||
48 |
||
49 |
end |
|
50 |