src/Pure/ProofGeneral/pgip_isabelle.ML
author wenzelm
Tue, 10 Jul 2007 23:29:43 +0200
changeset 23719 ccd9cb15c062
parent 23680 09ccdb1b93ba
child 23799 20f58293fc5e
permissions -rw-r--r--
more markup for inner and outer syntax; added enclose;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
     1
(*  Title:      Pure/ProofGeneral/pgip_isabelle.ML
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
     2
    ID:         $Id$
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
     3
    Author:     David Aspinall
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
     4
22165
eaec72532dd7 Add location_of_position. Needs work elsewhere.
aspinall
parents: 21940
diff changeset
     5
Prover-side PGIP abstraction: Isabelle configuration and mapping to Isabelle types.
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
     6
*)
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
     7
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
     8
signature PGIP_ISABELLE =
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
     9
sig
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    10
    val isabelle_pgml_version_supported : string
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    11
    val isabelle_pgip_version_supported : string
23603
4a2e36475367 Update PGML version, add system name
aspinall
parents: 22403
diff changeset
    12
    val systemid : string
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    13
    val accepted_inputs : (string * bool * (string list)) list 
22165
eaec72532dd7 Add location_of_position. Needs work elsewhere.
aspinall
parents: 21940
diff changeset
    14
eaec72532dd7 Add location_of_position. Needs work elsewhere.
aspinall
parents: 21940
diff changeset
    15
    val location_of_position : Position.T -> PgipTypes.location
22403
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    16
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    17
    (* Additional types of objects in Isar scripts *)
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    18
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    19
    val ObjTheoryBody : PgipTypes.objtype
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    20
    val ObjTheoryDecl : PgipTypes.objtype
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    21
    val ObjTheoryBodySubsection : PgipTypes.objtype
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    22
    val ObjProofBody : PgipTypes.objtype
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    23
    val ObjFormalComment : PgipTypes.objtype
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    24
    val ObjClass : PgipTypes.objtype
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    25
    val ObjTheoremSet : PgipTypes.objtype
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    26
    val ObjOracle : PgipTypes.objtype
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    27
    val ObjLocale : PgipTypes.objtype
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    28
	
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    29
end
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    30
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    31
structure PgipIsabelle : PGIP_ISABELLE =
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    32
struct
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    33
23603
4a2e36475367 Update PGML version, add system name
aspinall
parents: 22403
diff changeset
    34
val isabelle_pgml_version_supported = "2.0";
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    35
val isabelle_pgip_version_supported = "2.0"
23603
4a2e36475367 Update PGML version, add system name
aspinall
parents: 22403
diff changeset
    36
val systemid = "Isabelle"
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    37
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    38
(** Accepted commands **)
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    39
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    40
local
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    41
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    42
    (* These element names are a subset of those in pgip_input.ML.
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    43
       They must be handled in proof_general_pgip.ML/process_pgip_element. *)
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    44
						    
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    45
    val accepted_names =
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    46
    (* not implemented: "askconfig", "forget", "restoregoal" *)
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    47
    ["askpgip","askpgml","askprefs","getpref","setpref",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    48
     "proverinit","proverexit","startquiet","stopquiet",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    49
     "pgmlsymbolson", "pgmlsymbolsoff",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    50
     "dostep", "undostep", "redostep", "abortgoal", 
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    51
     "askids", "showid", "askguise",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    52
     "parsescript",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    53
     "showproofstate", "showctxt", "searchtheorems", "setlinewidth", "viewdoc",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    54
     "doitem", "undoitem", "redoitem", "abortheory",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    55
     "retracttheory", "loadfile", "openfile", "closefile",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    56
     "abortfile", "retractfile", "changecwd", "systemcmd"];
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    57
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    58
    fun element_async p = 
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    59
	false (* single threaded only *)
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    60
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    61
    fun supported_optional_attrs p = (case p of
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    62
					  "undostep" => ["times"]
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    63
					(* TODO: we could probably extend these too:
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    64
					| "redostep" => ["times"]
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    65
					| "undoitem" => ["times"]
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    66
					| "redoitem" => ["times"] *)
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    67
				        | _ => [])
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    68
in
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    69
val accepted_inputs = 
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    70
    (map (fn p=> (p, element_async p, supported_optional_attrs p))
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    71
         accepted_names);
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    72
end
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    73
22165
eaec72532dd7 Add location_of_position. Needs work elsewhere.
aspinall
parents: 21940
diff changeset
    74
eaec72532dd7 Add location_of_position. Needs work elsewhere.
aspinall
parents: 21940
diff changeset
    75
fun location_of_position pos = 
eaec72532dd7 Add location_of_position. Needs work elsewhere.
aspinall
parents: 21940
diff changeset
    76
    let val line = Position.line_of pos
eaec72532dd7 Add location_of_position. Needs work elsewhere.
aspinall
parents: 21940
diff changeset
    77
	val (url,descr) = 
23680
09ccdb1b93ba use Position.file_of;
wenzelm
parents: 23603
diff changeset
    78
	    (case Position.file_of pos of
09ccdb1b93ba use Position.file_of;
wenzelm
parents: 23603
diff changeset
    79
	       NONE => (NONE, NONE)
09ccdb1b93ba use Position.file_of;
wenzelm
parents: 23603
diff changeset
    80
	     | SOME fname => 
09ccdb1b93ba use Position.file_of;
wenzelm
parents: 23603
diff changeset
    81
	       let val path = Path.explode fname in
09ccdb1b93ba use Position.file_of;
wenzelm
parents: 23603
diff changeset
    82
		 case ThyLoad.check_file NONE path of
09ccdb1b93ba use Position.file_of;
wenzelm
parents: 23603
diff changeset
    83
		   SOME _ => (SOME (PgipTypes.pgipurl_of_path path), NONE)
09ccdb1b93ba use Position.file_of;
wenzelm
parents: 23603
diff changeset
    84
		 | NONE => (NONE, SOME fname)
09ccdb1b93ba use Position.file_of;
wenzelm
parents: 23603
diff changeset
    85
	       end);
09ccdb1b93ba use Position.file_of;
wenzelm
parents: 23603
diff changeset
    86
    in
22165
eaec72532dd7 Add location_of_position. Needs work elsewhere.
aspinall
parents: 21940
diff changeset
    87
	{ descr=descr, url=url, line=line, column=NONE, char=NONE, length=NONE }
23680
09ccdb1b93ba use Position.file_of;
wenzelm
parents: 23603
diff changeset
    88
    end
22403
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    89
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    90
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    91
val [ObjTheoryBody,
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    92
     ObjTheoryDecl,
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    93
     ObjTheoryBodySubsection,
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    94
     ObjProofBody,
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    95
     ObjFormalComment,
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    96
     ObjClass,
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    97
     ObjTheoremSet,
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    98
     ObjOracle,
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
    99
     ObjLocale] =
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
   100
    map PgipTypes.ObjOther 
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
   101
	["theory body", 
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
   102
	 "theory declaration",
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
   103
	 "theory subsection",
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
   104
	 "proof body",
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
   105
	 "formal comment",
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
   106
	 "class",
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
   107
	 "theorem set declaration",
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
   108
	 "oracle",
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
   109
	 "locale"];
12892a6677c6 Add Isabelle-specific objtypes
aspinall
parents: 22165
diff changeset
   110
22165
eaec72532dd7 Add location_of_position. Needs work elsewhere.
aspinall
parents: 21940
diff changeset
   111
	
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   112
end
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   113