src/Pure/proofterm.ML
changeset 79219 8b371e684acf
parent 79217 5073bbdfa2b8
child 79220 f9d972b464c1
--- a/src/Pure/proofterm.ML	Fri Dec 08 20:56:21 2023 +0100
+++ b/src/Pure/proofterm.ML	Sat Dec 09 17:31:10 2023 +0100
@@ -82,6 +82,8 @@
   (*primitive operations*)
   val proof_enabled: int -> bool
   val zproof_enabled: int -> bool
+  val oracle_enabled: int -> bool
+  val get_proofs_level: unit -> int
   val proofs: int Unsynchronized.ref
   val any_proofs_enabled: unit -> bool
   val atomic_proof: proof -> bool
@@ -486,11 +488,18 @@
 
 (** proof objects with different levels of detail **)
 
-fun proof_enabled proofs = Word.andb (Word.fromInt proofs, 0w2) <> 0w0;
-fun zproof_enabled proofs = Word.andb (Word.fromInt proofs, 0w4) <> 0w0;
+fun proof_enabled proofs = proofs = 2 orelse proofs = 6;
+fun zproof_enabled proofs = proofs = 4 orelse proofs = 5 orelse proofs = 6;
+fun oracle_enabled proofs = not (proofs = 0 orelse proofs = 4);
 
 val proofs = Unsynchronized.ref 6;
 
+fun get_proofs_level () =
+  let val proofs = ! proofs in
+    if 0 <= proofs andalso proofs <= 6 andalso proofs <> 3 then proofs
+    else error ("Illegal level of detail for proof objects: " ^ string_of_int proofs)
+  end;
+
 fun any_proofs_enabled () =
   let val proofs = ! proofs
   in proof_enabled proofs orelse zproof_enabled proofs end;
@@ -2192,7 +2201,7 @@
     val (ucontext, prop1) = Logic.unconstrainT shyps prop;
 
     val PBody {oracles = oracles0, thms = thms0, zboxes = zboxes0, proof = (prf, zprf)} = body;
-    val proofs = ! proofs;
+    val proofs = get_proofs_level ();
     val prf' = if proof_enabled proofs then fold_rev implies_intr_proof hyps prf else MinProof;
     val zprf' = if zproof_enabled proofs then ZTerm.todo_proof zprf else ZDummy;
     val body0 = PBody {oracles = oracles0, thms = thms0, zboxes = zboxes0, proof = (prf', zprf')};