src/Pure/proofterm.ML
changeset 44302 0a1934c5c104
parent 44118 69e29cf993c0
child 44303 4e2abb045eac
equal deleted inserted replaced
44301:65f60d9ac4bf 44302:0a1934c5c104
  1400 
  1400 
  1401 fun fulfill_proof_future _ [] postproc body =
  1401 fun fulfill_proof_future _ [] postproc body =
  1402       if not (Multithreading.enabled ()) then Future.value (postproc (Future.join body))
  1402       if not (Multithreading.enabled ()) then Future.value (postproc (Future.join body))
  1403       else Future.map postproc body
  1403       else Future.map postproc body
  1404   | fulfill_proof_future thy promises postproc body =
  1404   | fulfill_proof_future thy promises postproc body =
  1405       singleton
  1405       (singleton o Future.forks)
  1406         (Future.forks {name = "Proofterm.fulfill_proof_future", group = NONE,
  1406         {name = "Proofterm.fulfill_proof_future", group = NONE,
  1407             deps = Future.task_of body :: map (Future.task_of o snd) promises, pri = 0,
  1407           deps = Future.task_of body :: map (Future.task_of o snd) promises, pri = 0,
  1408             interrupts = true})
  1408           interrupts = true}
  1409         (fn () =>
  1409         (fn () =>
  1410           postproc (fulfill_norm_proof thy (map (apsnd Future.join) promises) (Future.join body)));
  1410           postproc (fulfill_norm_proof thy (map (apsnd Future.join) promises) (Future.join body)));
  1411 
  1411 
  1412 
  1412 
  1413 (***** abstraction over sort constraints *****)
  1413 (***** abstraction over sort constraints *****)
  1459     fun make_body0 proof0 = PBody {oracles = oracles0, thms = thms0, proof = proof0};
  1459     fun make_body0 proof0 = PBody {oracles = oracles0, thms = thms0, proof = proof0};
  1460     val body0 =
  1460     val body0 =
  1461       if not (proofs_enabled ()) then Future.value (make_body0 MinProof)
  1461       if not (proofs_enabled ()) then Future.value (make_body0 MinProof)
  1462       else if not (Multithreading.enabled ()) then Future.value (make_body0 (full_proof0 ()))
  1462       else if not (Multithreading.enabled ()) then Future.value (make_body0 (full_proof0 ()))
  1463       else
  1463       else
  1464         singleton
  1464         (singleton o Future.forks)
  1465           (Future.forks
  1465           {name = "Proofterm.prepare_thm_proof", group = NONE,
  1466             {name = "Proofterm.prepare_thm_proof", group = NONE, deps = [], pri = ~1,
  1466             deps = [], pri = ~1, interrupts = true}
  1467               interrupts = true})
       
  1468           (make_body0 o full_proof0);
  1467           (make_body0 o full_proof0);
  1469 
  1468 
  1470     fun new_prf () = (serial (), fulfill_proof_future thy promises postproc body0);
  1469     fun new_prf () = (serial (), fulfill_proof_future thy promises postproc body0);
  1471     val (i, body') =
  1470     val (i, body') =
  1472       (*non-deterministic, depends on unknown promises*)
  1471       (*non-deterministic, depends on unknown promises*)