src/Cube/Cube.thy
author wenzelm
Mon, 05 Sep 2005 17:38:17 +0200
changeset 17260 df7c3b1f390a
parent 17252 e352f65d5893
child 17782 b3846df9d643
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3773
989ef5e9d543 syntactic constants;
wenzelm
parents: 1149
diff changeset
     1
17252
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
     2
header {* Barendregt's Lambda-Cube *}
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
     3
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
     4
theory Cube
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
     5
imports Pure
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
     6
begin
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
     7
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
     8
typedecl "term"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
     9
typedecl "context"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    10
typedecl typing
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    11
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    12
nonterminals
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    13
  context_ typing_
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    14
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    15
consts
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    16
  Abs           :: "[term, term => term] => term"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    17
  Prod          :: "[term, term => term] => term"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    18
  Trueprop      :: "[context, typing] => prop"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    19
  MT_context    :: "context"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    20
  Context       :: "[typing, context] => context"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    21
  star          :: "term"                               ("*")
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    22
  box           :: "term"                               ("[]")
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    23
  app           :: "[term, term] => term"               (infixl "^" 20)
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    24
  Has_type      :: "[term, term] => typing"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    25
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    26
syntax
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    27
  Trueprop      :: "[context_, typing_] => prop"        ("(_/ |- _)")
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    28
  Trueprop1     :: "typing_ => prop"                    ("(_)")
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    29
  ""            :: "id => context_"                     ("_")
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    30
  ""            :: "var => context_"                    ("_")
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    31
  MT_context    :: "context_"                           ("")
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    32
  Context       :: "[typing_, context_] => context_"    ("_ _")
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    33
  Has_type      :: "[term, term] => typing_"            ("(_:/ _)" [0, 0] 5)
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    34
  Lam           :: "[idt, term, term] => term"          ("(3Lam _:_./ _)" [0, 0, 0] 10)
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    35
  Pi            :: "[idt, term, term] => term"          ("(3Pi _:_./ _)" [0, 0] 10)
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    36
  arrow         :: "[term, term] => term"               (infixr "->" 10)
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    37
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    38
translations
17260
wenzelm
parents: 17252
diff changeset
    39
  ("prop") "x:X" == ("prop") "|- x:X"
wenzelm
parents: 17252
diff changeset
    40
  "Lam x:A. B"   == "Abs(A, %x. B)"
wenzelm
parents: 17252
diff changeset
    41
  "Pi x:A. B"    => "Prod(A, %x. B)"
wenzelm
parents: 17252
diff changeset
    42
  "A -> B"       => "Prod(A, _K(B))"
17252
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    43
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    44
syntax (xsymbols)
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    45
  Trueprop      :: "[context_, typing_] => prop"        ("(_/ \<turnstile> _)")
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    46
  box           :: "term"                               ("\<box>")
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    47
  Lam           :: "[idt, term, term] => term"          ("(3\<Lambda> _:_./ _)" [0, 0, 0] 10)
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    48
  Pi            :: "[idt, term, term] => term"          ("(3\<Pi> _:_./ _)" [0, 0] 10)
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    49
  arrow         :: "[term, term] => term"               (infixr "\<rightarrow>" 10)
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    50
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    51
print_translation {* [("Prod", dependent_tr' ("Pi", "arrow"))] *}
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    52
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    53
axioms
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    54
  s_b:          "*: []"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    55
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    56
  strip_s:      "[| A:*;  a:A ==> G |- x:X |] ==> a:A G |- x:X"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    57
  strip_b:      "[| A:[]; a:A ==> G |- x:X |] ==> a:A G |- x:X"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    58
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    59
  app:          "[| F:Prod(A, B); C:A |] ==> F^C: B(C)"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    60
17252
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    61
  pi_ss:        "[| A:*; !!x. x:A ==> B(x):* |] ==> Prod(A, B):*"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    62
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    63
  lam_ss:       "[| A:*; !!x. x:A ==> f(x):B(x); !!x. x:A ==> B(x):* |]
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    64
                   ==> Abs(A, f) : Prod(A, B)"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    65
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    66
  beta:          "Abs(A, f)^a == f(a)"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    67
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    68
lemmas simple = s_b strip_s strip_b app lam_ss pi_ss
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    69
lemmas rules = simple
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    70
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    71
lemma imp_elim:
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    72
  assumes "f:A->B" and "a:A" and "f^a:B ==> PROP P"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    73
  shows "PROP P" by (rule app prems)+
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    74
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    75
lemma pi_elim:
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    76
  assumes "F:Prod(A,B)" and "a:A" and "F^a:B(a) ==> PROP P"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    77
  shows "PROP P" by (rule app prems)+
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    78
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    79
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    80
locale L2 =
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    81
  assumes pi_bs: "[| A:[]; !!x. x:A ==> B(x):* |] ==> Prod(A,B):*"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    82
    and lam_bs: "[| A:[]; !!x. x:A ==> f(x):B(x); !!x. x:A ==> B(x):* |]
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    83
                   ==> Abs(A,f) : Prod(A,B)"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    84
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    85
lemmas (in L2) rules = simple lam_bs pi_bs
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    86
17260
wenzelm
parents: 17252
diff changeset
    87
17252
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    88
locale Lomega =
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    89
  assumes
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    90
    pi_bb: "[| A:[]; !!x. x:A ==> B(x):[] |] ==> Prod(A,B):[]"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    91
    and lam_bb: "[| A:[]; !!x. x:A ==> f(x):B(x); !!x. x:A ==> B(x):[] |]
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    92
                   ==> Abs(A,f) : Prod(A,B)"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    93
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    94
lemmas (in Lomega) rules = simple lam_bb pi_bb
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    95
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    96
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    97
locale LP =
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    98
  assumes pi_sb: "[| A:*; !!x. x:A ==> B(x):[] |] ==> Prod(A,B):[]"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
    99
    and lam_sb: "[| A:*; !!x. x:A ==> f(x):B(x); !!x. x:A ==> B(x):[] |]
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   100
                   ==> Abs(A,f) : Prod(A,B)"
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   101
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   102
lemmas (in LP) rules = simple lam_sb pi_sb
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   103
17260
wenzelm
parents: 17252
diff changeset
   104
17252
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   105
locale LP2 = LP + L2
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   106
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   107
lemmas (in LP2) rules = simple lam_bs pi_bs lam_sb pi_sb
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   108
17260
wenzelm
parents: 17252
diff changeset
   109
17252
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   110
locale Lomega2 = L2 + Lomega
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   111
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   112
lemmas (in Lomega2) rules = simple lam_bs pi_bs lam_bb pi_bb
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   113
17260
wenzelm
parents: 17252
diff changeset
   114
17252
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   115
locale LPomega = LP + Lomega
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   116
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   117
lemmas (in LPomega) rules = simple lam_bb pi_bb lam_sb pi_sb
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   118
17260
wenzelm
parents: 17252
diff changeset
   119
17252
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   120
locale CC = L2 + LP + Lomega
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   121
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   122
lemmas (in CC) rules = simple lam_bs pi_bs lam_bb pi_bb lam_sb pi_sb
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   123
e352f65d5893 converted to Isar theory format;
wenzelm
parents: 11260
diff changeset
   124
end