--- /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 ->"))];
+