
diff -r 000000000000 -r a5a9c433f639 src/Cube/Cube.thy
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Cube/Cube.thy	Thu Sep 16 12:20:38 1993 +0200
@@ -0,0 +1,60 @@
+(*  Title:      Cube/cube.thy
+    ID:         $Id$
+    Author:     Tobias Nipkow
+    Copyright   1993  University of Cambridge
+
+Barendregt's Lambda-Cube
+*)
+
+Cube = Pure +
+
+types
+  term, context, typing 0
+
+arities
+  term :: logic
+
+consts
+  Abs, Prod     :: "[term, term => term] => term"
+  Trueprop      :: "[context, typing] => prop"          ("(_/ |- _)")
+  Trueprop1     :: "typing => prop"                     ("(_)")
+  MT_context    :: "context"                            ("")
+  ""            :: "id => context"                      ("_ ")
+  ""            :: "var => context"                     ("_ ")
+  Context       :: "[typing, context] => context"       ("_ _")
+  star          :: "term"                               ("*")
+  box           :: "term"                               ("[]")
+  "^"           :: "[term, term] => term"               (infixl 20)
+  Lam           :: "[id, term, term] => term"           ("(3Lam _:_./ _)" [0, 0, 0] 10)
+  Pi            :: "[id, term, term] => term"           ("(3Pi _:_./ _)" [0, 0] 10)
+  "->"          :: "[term, term] => term"               (infixr 10)
+  Has_type      :: "[term, term] => typing"             ("(_:/ _)" [0, 0] 5)
+
+translations
+  (prop) "x:X"  == (prop) "|- x:X"
+  "Lam x:A. B"  == "Abs(A, %x. B)"
+  "Pi x:A. B"   => "Prod(A, %x. B)"
+
+rules
+  s_b           "*: []"
+
+  strip_s       "[| A:*;  a:A ==> G |- x:X |] ==> a:A G |- x:X"
+  strip_b       "[| A:[]; a:A ==> G |- x:X |] ==> a:A G |- x:X"
+
+  app           "[| F:Prod(A, B); C:A |] ==> F^C: B(C)"
+
+  pi_ss         "[| A:*; !!x. x:A ==> B(x):* |] ==> Prod(A, B):*"
+
+  lam_ss        "[| A:*; !!x. x:A ==> f(x):B(x); !!x. x:A ==> B(x):* |] \
+\                   ==> Abs(A, f) : Prod(A, B)"
+
+  beta          "Abs(A, f)^a == f(a)"
+
+end
+
+
+ML
+
+val parse_translation = [("op ->", ndependent_tr "Prod")];
+val print_translation = [("Prod", dependent_tr' ("Pi", "op ->"))];
+




