src/HOLCF/explicit_domains/Focus_ex.thy
author regensbu
Fri, 06 Oct 1995 17:25:24 +0100
changeset 1274 ea0668a1c0ba
child 1479 21eb5e156d91
permissions -rw-r--r--
added 8bit pragmas added directory ax_ops for sections axioms and ops added directory domain for sections domain and generated this is the type definition package of David Oheimb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     1
(*
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     2
    ID:         $Id$
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     3
    Author: 	Franz Regensburger
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     4
    Copyright   1995 Technische Universitaet Muenchen
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     5
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     6
*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     7
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     8
(* Specification of the following loop back device
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     9
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    10
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    11
          g 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    12
           --------------------
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    13
          |      -------       |
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    14
       x  |     |       |      |  y
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    15
    ------|---->|       |------| ----->        
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    16
          |  z  |   f   | z    |
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    17
          |  -->|       |---   |
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    18
          | |   |       |   |  |
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    19
          | |    -------    |  |
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    20
          | |               |  |
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    21
          |  <--------------   |
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    22
          |                    | 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    23
           --------------------
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    24
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    25
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    26
First step: Notation in Agent Network Description Language (ANDL)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    27
-----------------------------------------------------------------
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    28
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    29
agent f
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    30
	input  channel i1:'b i2: ('b,'c) tc
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    31
	output channel o1:'c o2: ('b,'c) tc
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    32
is
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    33
	Rf(i1,i2,o1,o2)  (left open in the example)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    34
end f
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    35
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    36
agent g
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    37
	input  channel x:'b 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    38
	output channel y:'c 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    39
is network
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    40
	<y,z> = f`<x,z>
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    41
end network
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    42
end g
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    43
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    44
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    45
Remark: the type of the feedback depends at most on the types of the input and
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    46
        output of g. (No type miracles inside g)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    47
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    48
Second step: Translation of ANDL specification to HOLCF Specification
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    49
---------------------------------------------------------------------
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    50
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    51
Specification of agent f ist translated to predicate is_f
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    52
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    53
is_f :: ('b stream * ('b,'c) tc stream -> 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    54
		'c stream * ('b,'c) tc stream) => bool
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    55
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    56
is_f f  = ! i1 i2 o1 o2. 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    57
	f`<i1,i2> = <o1,o2> --> Rf(i1,i2,o1,o2)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    58
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    59
Specification of agent g is translated to predicate is_g which uses
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    60
predicate is_net_g
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    61
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    62
is_net_g :: ('b stream * ('b,'c) tc stream -> 'c stream * ('b,'c) tc stream) =>
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    63
	    'b stream => 'c stream => bool
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    64
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    65
is_net_g f x y = 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    66
	? z. <y,z> = f`<x,z> &
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    67
	! oy hz. <oy,hz> = f`<x,hz> --> z << hz 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    68
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    69
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    70
is_g :: ('b stream -> 'c stream) => bool
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    71
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    72
is_g g  = ? f. is_f f  & (! x y. g`x = y --> is_net_g f x y
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    73
	  
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    74
Third step: (show conservativity)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    75
-----------
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    76
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    77
Suppose we have a model for the theory TH1 which contains the axiom
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    78
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    79
	? f. is_f f 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    80
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    81
In this case there is also a model for the theory TH2 that enriches TH1 by
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    82
axiom
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    83
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    84
	? g. is_g g 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    85
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    86
The result is proved by showing that there is a definitional extension
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    87
that extends TH1 by a definition of g.
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    88
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    89
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    90
We define:
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    91
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    92
def_g g  = 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    93
         (? f. is_f f  & 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    94
	      g = (LAM x. cfst`(f`<x,fix`(LAM k.csnd`(f`<x,k>))>)) )
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    95
	
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    96
Now we prove:
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    97
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    98
	(?f. is_f f ) --> (? g. is_g g) 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    99
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   100
using the theorems
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   101
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   102
loopback_eq)	def_g = is_g			(real work) 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   103
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   104
L1)		(? f. is_f f ) --> (? g. def_g g)  (trivial)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   105
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   106
*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   107
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   108
Focus_ex = Stream +
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   109
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   110
types  tc 2
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   111
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   112
arities tc:: (pcpo,pcpo)pcpo
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   113
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   114
consts
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   115
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   116
is_f     ::
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   117
 "('b stream * ('b,'c) tc stream -> 'c stream * ('b,'c) tc stream) => bool"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   118
is_net_g :: "('b stream *('b,'c) tc stream -> 'c stream * ('b,'c) tc stream) =>
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   119
	    'b stream => 'c stream => bool"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   120
is_g     :: "('b stream -> 'c stream) => bool"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   121
def_g    :: "('b stream -> 'c stream) => bool"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   122
Rf	 :: 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   123
"('b stream * ('b,'c) tc stream * 'c stream * ('b,'c) tc stream) => bool"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   124
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   125
defs
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   126
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   127
is_f		"is_f f == (! i1 i2 o1 o2.
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   128
			f`<i1,i2> = <o1,o2> --> Rf(i1,i2,o1,o2))"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   129
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   130
is_net_g	"is_net_g f x y == (? z. 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   131
			<y,z> = f`<x,z> &
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   132
			(! oy hz. <oy,hz> = f`<x,hz> --> z << hz))" 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   133
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   134
is_g		"is_g g  == (? f.
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   135
			is_f f  & 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   136
			(!x y. g`x = y --> is_net_g f x y))"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   137
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   138
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   139
def_g		"def_g g == (? f.
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   140
			is_f f  & 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   141
	      		g = (LAM x. cfst`(f`<x,fix`(LAM k.csnd`(f`<x,k>))>)))" 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   142
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   143
end