equal
deleted
inserted
replaced
32 |
32 |
33 abbreviation |
33 abbreviation |
34 sconc_syn :: "'a seq => 'a seq => 'a seq" (infixr "@@" 65) where |
34 sconc_syn :: "'a seq => 'a seq => 'a seq" (infixr "@@" 65) where |
35 "xs @@ ys == sconc $ xs $ ys" |
35 "xs @@ ys == sconc $ xs $ ys" |
36 |
36 |
37 abbreviation |
37 inductive |
38 Finite :: "'a seq => bool" where |
38 Finite :: "'a seq => bool" |
39 "Finite x == x:sfinite" |
39 where |
|
40 sfinite_0: "Finite nil" |
|
41 | sfinite_n: "[| Finite tr; a~=UU |] ==> Finite (a##tr)" |
40 |
42 |
41 defs |
43 defs |
42 |
44 |
43 (* f not possible at lhs, as "pattern matching" only for % x arguments, |
45 (* f not possible at lhs, as "pattern matching" only for % x arguments, |
44 f cannot be written at rhs in front, as fix_eq3 does not apply later *) |
46 f cannot be written at rhs in front, as fix_eq3 does not apply later *) |
106 |
108 |
107 Infinite_def: |
109 Infinite_def: |
108 "Infinite x == ~(seq_finite x)" |
110 "Infinite x == ~(seq_finite x)" |
109 |
111 |
110 |
112 |
111 inductive "sfinite" |
113 declare Finite.intros [simp] |
112 intros |
|
113 sfinite_0: "nil:sfinite" |
|
114 sfinite_n: "[|tr:sfinite;a~=UU|] ==> (a##tr) : sfinite" |
|
115 |
|
116 declare sfinite.intros [simp] |
|
117 declare seq.rews [simp] |
114 declare seq.rews [simp] |
118 |
115 |
119 |
116 |
120 subsection {* recursive equations of operators *} |
117 subsection {* recursive equations of operators *} |
121 |
118 |
435 (* 3. a~=UU==> Finite(a##x)=Finite(x) *) |
432 (* 3. a~=UU==> Finite(a##x)=Finite(x) *) |
436 (* ---------------------------------------------------- *) |
433 (* ---------------------------------------------------- *) |
437 |
434 |
438 lemma Finite_UU_a: "Finite x --> x~=UU" |
435 lemma Finite_UU_a: "Finite x --> x~=UU" |
439 apply (rule impI) |
436 apply (rule impI) |
440 apply (erule sfinite.induct) |
437 apply (erule Finite.induct) |
441 apply simp |
438 apply simp |
442 apply simp |
439 apply simp |
443 done |
440 done |
444 |
441 |
445 lemma Finite_UU [simp]: "~(Finite UU)" |
442 lemma Finite_UU [simp]: "~(Finite UU)" |
447 apply fast |
444 apply fast |
448 done |
445 done |
449 |
446 |
450 lemma Finite_cons_a: "Finite x --> a~=UU --> x=a##xs --> Finite xs" |
447 lemma Finite_cons_a: "Finite x --> a~=UU --> x=a##xs --> Finite xs" |
451 apply (intro strip) |
448 apply (intro strip) |
452 apply (erule sfinite.elims) |
449 apply (erule Finite.cases) |
453 apply fastsimp |
450 apply fastsimp |
454 apply (simp add: seq.injects) |
451 apply (simp add: seq.injects) |
455 done |
452 done |
456 |
453 |
457 lemma Finite_cons: "a~=UU ==>(Finite (a##x)) = (Finite x)" |
454 lemma Finite_cons: "a~=UU ==>(Finite (a##x)) = (Finite x)" |