| author | wenzelm | 
| Fri, 04 Jun 2021 23:37:27 +0200 | |
| changeset 73806 | b982362eeca4 | 
| parent 73797 | f7ea394490f5 | 
| parent 73801 | e67c951f1c18 | 
| child 73807 | 6f367240f09b | 
| permissions | -rw-r--r-- | 
| 
73691
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
1  | 
/* Title: HOL/Tools/Mirabelle/mirabelle.scala  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
2  | 
Author: Makarius  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
3  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
4  | 
Isabelle/Scala front-end for Mirabelle.  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
5  | 
*/  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
6  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
7  | 
package isabelle.mirabelle  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
8  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
9  | 
import isabelle._  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
10  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
11  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
12  | 
object Mirabelle  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
13  | 
{
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
14  | 
/* actions and options */  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
15  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
16  | 
def action_names(): List[String] =  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
17  | 
  {
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
18  | 
val Pattern = """Mirabelle action: "(\w+)".*""".r  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
19  | 
    (for {
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
20  | 
file <-  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
21  | 
        File.find_files(Path.explode("~~/src/HOL/Tools/Mirabelle").file,
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
22  | 
          pred = _.getName.endsWith(".ML"))
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
23  | 
line <- split_lines(File.read(file))  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
24  | 
      name <- line match { case Pattern(a) => Some(a) case _ => None }
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
25  | 
} yield name).sorted  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
26  | 
}  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
27  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
28  | 
def sledgehammer_options(): List[String] =  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
29  | 
  {
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
30  | 
val Pattern = """val .*K *= *"(.*)" *\(\*(.*)\*\)""".r  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
31  | 
    split_lines(File.read(Path.explode("~~/src/HOL/Tools/Mirabelle/mirabelle_sledgehammer.ML"))).
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
32  | 
      flatMap(line => line match { case Pattern(a, b) => Some (a + b) case _ => None })
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
33  | 
}  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
34  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
35  | 
|
| 73692 | 36  | 
/* exported log content */  | 
| 
73691
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
37  | 
|
| 73692 | 38  | 
object Log  | 
| 
73691
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
39  | 
  {
 | 
| 73693 | 40  | 
def export_name(index: Int, theory: String = ""): String =  | 
41  | 
Export.compound_name(theory, "mirabelle/" + index)  | 
|
42  | 
||
| 73692 | 43  | 
val separator = "\n------------------\n"  | 
44  | 
||
45  | 
    sealed abstract class Entry { def print: String }
 | 
|
| 
73691
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
46  | 
|
| 73692 | 47  | 
case class Action(name: String, arguments: Properties.T, body: XML.Body) extends Entry  | 
48  | 
    {
 | 
|
49  | 
def print: String = "action: " + XML.content(body) + separator  | 
|
50  | 
}  | 
|
51  | 
case class Command(name: String, position: Properties.T, body: XML.Body) extends Entry  | 
|
52  | 
    {
 | 
|
53  | 
def print: String = "\n" + print_head + separator + Pretty.string_of(body)  | 
|
54  | 
def print_head: String =  | 
|
55  | 
      {
 | 
|
56  | 
val line = Position.Line.get(position)  | 
|
57  | 
val offset = Position.Offset.get(position)  | 
|
58  | 
val loc = line.toString + ":" + offset.toString  | 
|
59  | 
        "at " + loc + " (" + name + "):"
 | 
|
| 
73691
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
60  | 
}  | 
| 73692 | 61  | 
}  | 
62  | 
case class Report(result: Properties.T, body: XML.Body) extends Entry  | 
|
| 
73691
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
63  | 
    {
 | 
| 73692 | 64  | 
override def print: String = "\n" + separator + Pretty.string_of(body)  | 
| 
73691
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
65  | 
}  | 
| 73692 | 66  | 
|
67  | 
def entry(export_name: String, xml: XML.Tree): Entry =  | 
|
68  | 
      xml match {
 | 
|
69  | 
        case XML.Elem(Markup("action", (Markup.NAME, name) :: props), body) =>
 | 
|
70  | 
Action(name, props, body)  | 
|
71  | 
        case XML.Elem(Markup("command", (Markup.NAME, name) :: props), body) =>
 | 
|
72  | 
Command(name, props.filter(Markup.position_property), body)  | 
|
73  | 
        case XML.Elem(Markup("report", props), body) => Report(props, body)
 | 
|
74  | 
        case _ => error("Malformed export " + quote(export_name) + "\nbad XML: " + xml)
 | 
|
75  | 
}  | 
|
| 
73691
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
76  | 
}  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
77  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
78  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
79  | 
/* main mirabelle */  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
80  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
81  | 
def mirabelle(  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
82  | 
options: Options,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
83  | 
actions: List[String],  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
84  | 
output_dir: Path,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
85  | 
theories: List[String] = Nil,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
86  | 
selection: Sessions.Selection = Sessions.Selection.empty,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
87  | 
progress: Progress = new Progress,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
88  | 
dirs: List[Path] = Nil,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
89  | 
select_dirs: List[Path] = Nil,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
90  | 
numa_shuffling: Boolean = false,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
91  | 
max_jobs: Int = 1,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
92  | 
verbose: Boolean = false): Build.Results =  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
93  | 
  {
 | 
| 
73698
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
94  | 
require(!selection.requirements)  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
95  | 
|
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
96  | 
    progress.echo("Building required heaps ...")
 | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
97  | 
val build_results0 =  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
98  | 
Build.build(options, build_heap = true,  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
99  | 
selection = selection.copy(requirements = true), progress = progress, dirs = dirs,  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
100  | 
select_dirs = select_dirs, numa_shuffling = numa_shuffling, max_jobs = max_jobs,  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
101  | 
verbose = verbose)  | 
| 
73691
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
102  | 
|
| 
73698
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
103  | 
    if (build_results0.ok) {
 | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
104  | 
val build_options =  | 
| 73701 | 105  | 
options + "timeout_build=false" + "parallel_presentation=false" +  | 
| 
73698
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
106  | 
          ("mirabelle_actions=" + actions.mkString(";")) +
 | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
107  | 
          ("mirabelle_theories=" + theories.mkString(","))
 | 
| 
73691
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
108  | 
|
| 
73698
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
109  | 
      progress.echo("Running Mirabelle ...")
 | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
110  | 
val build_results =  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
111  | 
Build.build(build_options, clean_build = true,  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
112  | 
selection = selection, progress = progress, dirs = dirs, select_dirs = select_dirs,  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
113  | 
numa_shuffling = numa_shuffling, max_jobs = max_jobs, verbose = verbose)  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
114  | 
|
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
115  | 
      if (build_results.ok) {
 | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
116  | 
val structure = Sessions.load_structure(build_options, dirs = dirs, select_dirs = select_dirs)  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
117  | 
val store = Sessions.store(build_options)  | 
| 
73691
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
118  | 
|
| 
73698
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
119  | 
using(store.open_database_context())(db_context =>  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
120  | 
        {
 | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
121  | 
var seen_theories = Set.empty[String]  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
122  | 
          for {
 | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
123  | 
session <- structure.imports_selection(selection).iterator  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
124  | 
session_hierarchy = structure.hierarchy(session)  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
125  | 
theories <- db_context.input_database(session)((db, a) => Some(store.read_theories(db, a)))  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
126  | 
theory <- theories  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
127  | 
if !seen_theories(theory)  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
128  | 
index <- 1 to actions.length  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
129  | 
export <- db_context.read_export(session_hierarchy, theory, Log.export_name(index))  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
130  | 
body = export.uncompressed_yxml  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
131  | 
if body.nonEmpty  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
132  | 
          } {
 | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
133  | 
seen_theories += theory  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
134  | 
val export_name = Log.export_name(index, theory = theory)  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
135  | 
val log = body.map(Log.entry(export_name, _))  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
136  | 
val log_dir = Isabelle_System.make_directory(output_dir + Path.basic(theory))  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
137  | 
            val log_file = log_dir + Path.basic("mirabelle" + index).log
 | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
138  | 
            progress.echo("Writing " + log_file)
 | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
139  | 
File.write(log_file, terminate_lines(log.map(_.print)))  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
140  | 
}  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
141  | 
})  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
142  | 
}  | 
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
143  | 
|
| 
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
144  | 
build_results  | 
| 
73691
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
145  | 
}  | 
| 
73698
 
3d0952893db8
proper build of required session images vs. build with Mirabelle presentation;
 
wenzelm 
parents: 
73695 
diff
changeset
 | 
146  | 
else build_results0  | 
| 
73691
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
147  | 
}  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
148  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
149  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
150  | 
/* Isabelle tool wrapper */  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
151  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
152  | 
  val default_output_dir: Path = Path.explode("mirabelle")
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
153  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
154  | 
  val isabelle_tool = Isabelle_Tool("mirabelle", "testing tool for automated proof tools",
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
155  | 
Scala_Project.here, args =>  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
156  | 
  {
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
157  | 
    val build_options = Word.explode(Isabelle_System.getenv("ISABELLE_BUILD_OPTIONS"))
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
158  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
159  | 
var actions: List[String] = Nil  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
160  | 
var base_sessions: List[String] = Nil  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
161  | 
var select_dirs: List[Path] = Nil  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
162  | 
var numa_shuffling = false  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
163  | 
var output_dir = default_output_dir  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
164  | 
var theories: List[String] = Nil  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
165  | 
var exclude_session_groups: List[String] = Nil  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
166  | 
var all_sessions = false  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
167  | 
var dirs: List[Path] = Nil  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
168  | 
var session_groups: List[String] = Nil  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
169  | 
var max_jobs = 1  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
170  | 
var options = Options.init(opts = build_options)  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
171  | 
var verbose = false  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
172  | 
var exclude_sessions: List[String] = Nil  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
173  | 
|
| 
73797
 
f7ea394490f5
moved stride option from sledgehammer action to main mirabelle
 
desharna 
parents: 
73701 
diff
changeset
 | 
174  | 
    val default_stride = options.int("mirabelle_stride")
 | 
| 
73691
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
175  | 
    val default_timeout = options.seconds("mirabelle_timeout")
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
176  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
177  | 
    val getopts = Getopts("""
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
178  | 
Usage: isabelle mirabelle [OPTIONS] [SESSIONS ...]  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
179  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
180  | 
Options are:  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
181  | 
-A ACTION add to list of actions  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
182  | 
-B NAME include session NAME and all descendants  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
183  | 
-D DIR include session directory and select its sessions  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
184  | 
-N cyclic shuffling of NUMA CPU nodes (performance tuning)  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
185  | 
-O DIR output directory for log files (default: """ + default_output_dir + """,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
186  | 
-T THEORY theory restriction: NAME or NAME[LINE:END_LINE]  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
187  | 
-X NAME exclude sessions from group NAME and all descendants  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
188  | 
-a select all sessions  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
189  | 
-d DIR include session directory  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
190  | 
-g NAME select session group NAME  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
191  | 
-j INT maximum number of parallel jobs (default 1)  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
192  | 
-o OPTION override Isabelle system OPTION (via NAME=VAL or NAME)  | 
| 
73797
 
f7ea394490f5
moved stride option from sledgehammer action to main mirabelle
 
desharna 
parents: 
73701 
diff
changeset
 | 
193  | 
-s INT run actions on every nth goal (default """ + default_stride + """)  | 
| 
73691
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
194  | 
-t SECONDS timeout for each action (default """ + default_timeout + """)  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
195  | 
-v verbose  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
196  | 
-x NAME exclude session NAME and all descendants  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
197  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
198  | 
Apply the given actions at all theories and proof steps of the  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
199  | 
specified sessions.  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
200  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
201  | 
The absence of theory restrictions (option -T) means to check all  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
202  | 
theories fully. Otherwise only the named theories are checked.  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
203  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
204  | 
Each ACTION is either of the form NAME or NAME [OPTION, ...]  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
205  | 
following Isabelle/Isar outer syntax.  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
206  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
207  | 
  Available actions are:""" + action_names().mkString("\n    ", "\n    ", "") + """
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
208  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
209  | 
For the ACTION "sledgehammer", the following OPTIONs are available:""" +  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
210  | 
      sledgehammer_options().mkString("\n    ", "\n    ", "\n"),
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
211  | 
"A:" -> (arg => actions = actions ::: List(arg)),  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
212  | 
"B:" -> (arg => base_sessions = base_sessions ::: List(arg)),  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
213  | 
"D:" -> (arg => select_dirs = select_dirs ::: List(Path.explode(arg))),  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
214  | 
"N" -> (_ => numa_shuffling = true),  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
215  | 
"O:" -> (arg => output_dir = Path.explode(arg)),  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
216  | 
"T:" -> (arg => theories = theories ::: List(arg)),  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
217  | 
"X:" -> (arg => exclude_session_groups = exclude_session_groups ::: List(arg)),  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
218  | 
"a" -> (_ => all_sessions = true),  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
219  | 
"d:" -> (arg => dirs = dirs ::: List(Path.explode(arg))),  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
220  | 
"g:" -> (arg => session_groups = session_groups ::: List(arg)),  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
221  | 
"j:" -> (arg => max_jobs = Value.Int.parse(arg)),  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
222  | 
"o:" -> (arg => options = options + arg),  | 
| 
73797
 
f7ea394490f5
moved stride option from sledgehammer action to main mirabelle
 
desharna 
parents: 
73701 
diff
changeset
 | 
223  | 
      "s:" -> (arg => options = options + ("mirabelle_stride=" + arg)),
 | 
| 
73691
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
224  | 
      "t:" -> (arg => options = options + ("mirabelle_timeout=" + arg)),
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
225  | 
"v" -> (_ => verbose = true),  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
226  | 
"x:" -> (arg => exclude_sessions = exclude_sessions ::: List(arg)))  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
227  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
228  | 
val sessions = getopts(args)  | 
| 73695 | 229  | 
if (actions.isEmpty) getopts.usage()  | 
| 
73691
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
230  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
231  | 
val progress = new Console_Progress(verbose = verbose)  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
232  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
233  | 
val start_date = Date.now()  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
234  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
235  | 
    if (verbose) {
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
236  | 
      progress.echo("Started at " + Build_Log.print_date(start_date))
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
237  | 
}  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
238  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
239  | 
val results =  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
240  | 
      progress.interrupt_handler {
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
241  | 
mirabelle(options, actions, output_dir,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
242  | 
theories = theories,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
243  | 
selection = Sessions.Selection(  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
244  | 
all_sessions = all_sessions,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
245  | 
base_sessions = base_sessions,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
246  | 
exclude_session_groups = exclude_session_groups,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
247  | 
exclude_sessions = exclude_sessions,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
248  | 
session_groups = session_groups,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
249  | 
sessions = sessions),  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
250  | 
progress = progress,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
251  | 
dirs = dirs,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
252  | 
select_dirs = select_dirs,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
253  | 
numa_shuffling = NUMA.enabled_warning(progress, numa_shuffling),  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
254  | 
max_jobs = max_jobs,  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
255  | 
verbose = verbose)  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
256  | 
}  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
257  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
258  | 
val end_date = Date.now()  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
259  | 
val elapsed_time = end_date.time - start_date.time  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
260  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
261  | 
    if (verbose) {
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
262  | 
      progress.echo("\nFinished at " + Build_Log.print_date(end_date))
 | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
263  | 
}  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
264  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
265  | 
val total_timing =  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
266  | 
results.sessions.iterator.map(a => results(a).timing).foldLeft(Timing.zero)(_ + _).  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
267  | 
copy(elapsed = elapsed_time)  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
268  | 
progress.echo(total_timing.message_resources)  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
269  | 
|
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
270  | 
sys.exit(results.rc)  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
271  | 
})  | 
| 
 
2f9877db82a1
reimplemented Mirabelle as Isabelle/ML presentation hook + Isabelle/Scala tool, but sledgehammer is still inactive;
 
wenzelm 
parents:  
diff
changeset
 | 
272  | 
}  |