src/HOLCF/explicit_domains/Focus_ex.thy
author paulson
Mon, 23 Sep 1996 17:41:57 +0200
changeset 2002 ed423882c6a9
parent 1479 21eb5e156d91
permissions -rw-r--r--
Bad version of Otway-Rees and the new attack on it
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$
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
     3
    Author:     Franz Regensburger
1274
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
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    30
        input  channel i1:'b i2: ('b,'c) tc
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    31
        output channel o1:'c o2: ('b,'c) tc
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    32
is
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    33
        Rf(i1,i2,o1,o2)  (left open in the example)
1274
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
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    37
        input  channel x:'b 
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    38
        output channel y:'c 
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    39
is network
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    40
        <y,z> = f`<x,z>
1274
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 -> 
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    54
                'c stream * ('b,'c) tc stream) => bool
1274
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. 
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    57
        f`<i1,i2> = <o1,o2> --> Rf(i1,i2,o1,o2)
1274
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) =>
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    63
            'b stream => 'c stream => bool
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    64
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    65
is_net_g f x y = 
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    66
        ? z. <y,z> = f`<x,z> &
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    67
        ! oy hz. <oy,hz> = f`<x,hz> --> z << hz 
1274
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
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    73
          
1274
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
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    79
        ? f. is_f f 
1274
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
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    84
        ? g. is_g g 
1274
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  & 
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    94
              g = (LAM x. cfst`(f`<x,fix`(LAM k.csnd`(f`<x,k>))>)) )
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    95
        
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    96
Now we prove:
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    97
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
    98
        (?f. is_f f ) --> (? g. is_g g) 
1274
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
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
   102
loopback_eq)    def_g = is_g                    (real work) 
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   103
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
   104
L1)             (? f. is_f f ) --> (? g. def_g g)  (trivial)
1274
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) =>
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
   119
            'b stream => 'c stream => bool"
1274
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"
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
   122
Rf       :: 
1274
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
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
   127
is_f            "is_f f == (! i1 i2 o1 o2.
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
   128
                        f`<i1,i2> = <o1,o2> --> Rf(i1,i2,o1,o2))"
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   129
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
   130
is_net_g        "is_net_g f x y == (? z. 
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
   131
                        <y,z> = f`<x,z> &
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
   132
                        (! oy hz. <oy,hz> = f`<x,hz> --> z << hz))" 
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   133
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
   134
is_g            "is_g g  == (? f.
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
   135
                        is_f f  & 
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
   136
                        (!x y. g`x = y --> is_net_g f x y))"
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   137
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   138
1479
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
   139
def_g           "def_g g == (? f.
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
   140
                        is_f f  & 
21eb5e156d91 expanded tabs
clasohm
parents: 1274
diff changeset
   141
                        g = (LAM x. cfst`(f`<x,fix`(LAM k.csnd`(f`<x,k>))>)))" 
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   142
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   143
end