1 /* THIS IS A COMPLETE COPY OF Isabelle2016-1 ...
4 ... WITH ADDITIONS AFTER "/---..---\"
6 Lambda terms, types, sorts.
8 Note: Isabelle/ML is the primary environment for logical operations.
11 package isac.gui.mawen.syntax.isabelle
13 import edu.tum.cs.isabelle.pure._
17 /* //---------- this would overwrite edu.tum.cs.isabelle.pure._ ----------\\
19 type Indexname = (String, Int)
21 type Sort = List[String]
22 val dummyS: Sort = List("")
24 sealed abstract class Typ
25 case class Type(name: String, args: List[Typ] = Nil) extends Typ
26 case class TFree(name: String, sort: Sort = dummyS) extends Typ
27 case class TVar(name: Indexname, sort: Sort = dummyS) extends Typ
28 val dummyT = Type("dummy")
30 sealed abstract class Term
31 case class Const(name: String, typ: Typ = dummyT) extends Term
32 case class Free(name: String, typ: Typ = dummyT) extends Term
33 case class Var(name: Indexname, typ: Typ = dummyT) extends Term
34 case class Bound(index: Int) extends Term
35 case class Abs(name: String, typ: Typ = dummyT, body: Term) extends Term
36 case class App(fun: Term, arg: Term) extends Term
38 \\---------- this would overwrite edu.tum.cs.isabelle.pure._ ----------// */
40 //----------------- ADDITIONS TO Isabelle2016-1 FOR ISAC -----------------\\
41 // see ~~/src/Pure/General/symbol.scala: is digit
42 def is_digit(sym: String): Boolean = sym.length == 1 && '0' <= sym(0) && sym(0) <= '9'
44 /* display variables */
45 def string_of_vname (xi : Indexname): String =
48 val idx = XLibrary.string_of_int(i.intValue)
49 val dot = idx.toList match {
50 case _ :: /*?HOW HANDLE THIS CHAR: "⇩" ::*/ _ => false
51 //case c :: _ => XSymbol.is_digit(c) //unreachable --^^
54 if (dot) "?" ++ x ++ "." ++ idx
56 if (i != 0) "?" ++ x ++ idx
60 /*maps f(t1,...,tn) to (f, [t1,...,tn]) ; naturally tail-recursive*/
61 def strip_comb(u : Term) : (Term, List[Term]) =
63 def stripc (u : Term, ts : List[Term]) : (Term, List[Term]) =
65 case App(f, t) => stripc (f, t::ts)