]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/matita/matitaTypes.ml
ocaml 3.09 transition
[helm.git] / helm / matita / matitaTypes.ml
index 8b4cb1f9deeadf80ddaa69034811ec566c76bed0..8bd32bb23eac45b32f53f8f88f818bc391222f02 100644 (file)
@@ -41,9 +41,14 @@ exception Option_error of string * string
 
 exception Unbound_identifier of string
 
+type incomplete_proof = {
+  proof: ProofEngineTypes.proof;
+  stack: Continuationals.Stack.t;
+}
+
 type proof_status =
   | No_proof
-  | Incomplete_proof of ProofEngineTypes.status
+  | Incomplete_proof of incomplete_proof
   | Proof of ProofEngineTypes.proof
   | Intermediate of Cic.metasenv
       (* Status in which the proof could be while it is being processed by the
@@ -67,6 +72,7 @@ type status = {
   proof_status: proof_status;
   options: options;
   objects: (UriManager.uri * string) list;
+  coercions: UriManager.uri list;
   notation_ids: CicNotation.notation_id list;
 }
 
@@ -74,8 +80,9 @@ let set_metasenv metasenv status =
   let proof_status =
     match status.proof_status with
     | No_proof -> Intermediate metasenv
-    | Incomplete_proof ((uri, _, proof, ty), goal) ->
-        Incomplete_proof ((uri, metasenv, proof, ty), goal)
+    | Incomplete_proof ({ proof = (uri, _, proof, ty) } as incomplete_proof) ->
+        Incomplete_proof
+          { incomplete_proof with proof = (uri, metasenv, proof, ty) }
     | Intermediate _ -> Intermediate metasenv 
     | Proof _ -> assert false
   in
@@ -83,8 +90,6 @@ let set_metasenv metasenv status =
 
 let dump_status status = 
   MatitaLog.message "status.aliases:\n";
-  MatitaLog.message
-  (DisambiguatePp.pp_environment status.aliases ^ "\n");
   MatitaLog.message "status.proof_status:"; 
   MatitaLog.message
     (match status.proof_status with
@@ -240,3 +245,47 @@ class type mathViewer =
       ?reuse:bool -> entry:mathViewer_entry -> UriManager.uri list -> unit
   end
   
+let qualify status name = get_string_option status "baseuri" ^ "/" ^ name
+
+let get_current_proof status =
+  match status.proof_status with
+  | Incomplete_proof { proof = p } -> p
+  | _ -> statement_error "no ongoing proof"
+
+let get_proof_metasenv status =
+  match status.proof_status with
+  | No_proof -> []
+  | Proof (_, metasenv, _, _)
+  | Incomplete_proof { proof = (_, metasenv, _, _) }
+  | Intermediate metasenv ->
+      metasenv
+
+let get_proof_context status goal =
+  match status.proof_status with
+  | Incomplete_proof { proof = (_, metasenv, _, _) } ->
+      let (_, context, _) = CicUtil.lookup_meta goal metasenv in
+      context
+  | _ -> []
+let get_proof_conclusion status goal =
+  match status.proof_status with
+  | Incomplete_proof { proof = (_, metasenv, _, _) } ->
+      let (_, _, conclusion) = CicUtil.lookup_meta goal metasenv in
+      conclusion
+  | _ -> statement_error "no ongoing proof"
+
+let get_stack status =
+  match status.proof_status with
+  | Incomplete_proof p -> p.stack
+  | Proof _ -> Continuationals.Stack.empty
+  | _ -> assert false
+
+let set_stack stack status =
+  match status.proof_status with
+  | Incomplete_proof p ->
+      { status with proof_status = Incomplete_proof { p with stack = stack } }
+  | Proof _ ->
+      assert (Continuationals.Stack.is_empty stack);
+      status
+  | _ -> assert false