author | wenzelm |
Thu, 03 Apr 2014 13:46:18 +0200 | |
changeset 56385 | 76acce58aeab |
parent 56372 | fadb0fef09d7 |
child 56387 | d92eb5c3960d |
permissions | -rw-r--r-- |
54730 | 1 |
/* Title: Pure/Tools/simplifier_trace.scala |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
2 |
Author: Lars Hupel |
54730 | 3 |
|
4 |
Interactive Simplifier trace. |
|
5 |
*/ |
|
6 |
||
7 |
package isabelle |
|
8 |
||
55553
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
9 |
|
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
10 |
import scala.actors.Actor._ |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
11 |
import scala.annotation.tailrec |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
12 |
import scala.collection.immutable.SortedMap |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
13 |
|
54730 | 14 |
|
15 |
object Simplifier_Trace |
|
16 |
{ |
|
55553
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
17 |
/* trace items from the prover */ |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
18 |
|
55553
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
19 |
val TEXT = "text" |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
20 |
val Text = new Properties.String(TEXT) |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
21 |
|
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
22 |
val PARENT = "parent" |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
23 |
val Parent = new Properties.Long(PARENT) |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
24 |
|
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
25 |
val SUCCESS = "success" |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
26 |
val Success = new Properties.Boolean(SUCCESS) |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
27 |
|
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
28 |
val MEMORY = "memory" |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
29 |
val Memory = new Properties.Boolean(MEMORY) |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
30 |
|
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
31 |
object Item |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
32 |
{ |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
33 |
case class Data( |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
34 |
serial: Long, markup: String, text: String, |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
35 |
parent: Long, props: Properties.T, content: XML.Body) |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
36 |
{ |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
37 |
def memory: Boolean = Memory.unapply(props) getOrElse true |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
38 |
} |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
39 |
|
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
40 |
def unapply(tree: XML.Tree): Option[(String, Data)] = |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
41 |
tree match { |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
42 |
case XML.Elem(Markup(Markup.RESULT, Markup.Serial(serial)), |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
43 |
List(XML.Elem(Markup(markup, props), content))) |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
44 |
if markup.startsWith("simp_trace_") => // FIXME proper comparison of string constants |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
45 |
(props, props) match { |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
46 |
case (Text(text), Parent(parent)) => |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
47 |
Some((markup, Data(serial, markup, text, parent, props, content))) |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
48 |
case _ => None |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
49 |
} |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
50 |
case _ => None |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
51 |
} |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
52 |
} |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
53 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
54 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
55 |
/* replies to the prover */ |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
56 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
57 |
case class Answer private[Simplifier_Trace](val name: String, val string: String) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
58 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
59 |
object Answer |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
60 |
{ |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
61 |
object step |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
62 |
{ |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
63 |
val skip = Answer("skip", "Skip") |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
64 |
val continue = Answer("continue", "Continue") |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
65 |
val continue_trace = Answer("continue_trace", "Continue (with full trace)") |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
66 |
val continue_passive = Answer("continue_passive", "Continue (without asking)") |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
67 |
val continue_disable = Answer("continue_disable", "Continue (without any trace)") |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
68 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
69 |
val default = skip |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
70 |
val all = List(continue, continue_trace, continue_passive, continue_disable, skip) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
71 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
72 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
73 |
object hint_fail |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
74 |
{ |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
75 |
val exit = Answer("exit", "Exit") |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
76 |
val redo = Answer("redo", "Redo") |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
77 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
78 |
val default = exit |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
79 |
val all = List(redo, exit) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
80 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
81 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
82 |
|
55555 | 83 |
val all_answers: List[Answer] = Answer.step.all ::: Answer.hint_fail.all |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
84 |
|
55553
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
85 |
object Active |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
86 |
{ |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
87 |
def unapply(tree: XML.Tree): Option[(Long, Answer)] = |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
88 |
tree match { |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
89 |
case XML.Elem(Markup(Markup.SIMP_TRACE, props), _) => |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
90 |
(props, props) match { |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
91 |
case (Markup.Serial(serial), Markup.Name(name)) => |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
92 |
all_answers.find(_.name == name).map((serial, _)) |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
93 |
case _ => None |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
94 |
} |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
95 |
case _ => None |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
96 |
} |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
97 |
} |
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
98 |
|
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
99 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
100 |
/* GUI interaction */ |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
101 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
102 |
case object Event |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
103 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
104 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
105 |
/* manager actor */ |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
106 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
107 |
private case class Handle_Results(session: Session, id: Document_ID.Command, results: Command.Results) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
108 |
private case class Generate_Trace(results: Command.Results) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
109 |
private case class Cancel(serial: Long) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
110 |
private object Clear_Memory |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
111 |
private object Stop |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
112 |
case class Reply(session: Session, serial: Long, answer: Answer) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
113 |
|
55553
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
114 |
case class Question(data: Item.Data, answers: List[Answer], default_answer: Answer) |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
115 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
116 |
case class Context( |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
117 |
last_serial: Long = 0L, |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
118 |
questions: SortedMap[Long, Question] = SortedMap.empty |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
119 |
) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
120 |
{ |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
121 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
122 |
def +(q: Question): Context = |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
123 |
copy(questions = questions + ((q.data.serial, q))) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
124 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
125 |
def -(s: Long): Context = |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
126 |
copy(questions = questions - s) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
127 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
128 |
def with_serial(s: Long): Context = |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
129 |
copy(last_serial = Math.max(last_serial, s)) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
130 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
131 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
132 |
|
55553
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
133 |
case class Trace(entries: List[Item.Data]) |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
134 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
135 |
case class Index(text: String, content: XML.Body) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
136 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
137 |
object Index |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
138 |
{ |
55553
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
139 |
def of_data(data: Item.Data): Index = |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
140 |
Index(data.text, data.content) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
141 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
142 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
143 |
def handle_results(session: Session, id: Document_ID.Command, results: Command.Results): Context = |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
144 |
(manager !? Handle_Results(session, id, results)).asInstanceOf[Context] |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
145 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
146 |
def generate_trace(results: Command.Results): Trace = |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
147 |
(manager !? Generate_Trace(results)).asInstanceOf[Trace] |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
148 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
149 |
def clear_memory() = |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
150 |
manager ! Clear_Memory |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
151 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
152 |
def send_reply(session: Session, serial: Long, answer: Answer) = |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
153 |
manager ! Reply(session, serial, answer) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
154 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
155 |
private val manager = actor { |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
156 |
var contexts = Map.empty[Document_ID.Command, Context] |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
157 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
158 |
var memory_children = Map.empty[Long, Set[Long]] |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
159 |
var memory = Map.empty[Index, Answer] |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
160 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
161 |
def find_question(serial: Long): Option[(Document_ID.Command, Question)] = |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
162 |
contexts collectFirst { |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
163 |
case (id, context) if context.questions contains serial => |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
164 |
(id, context.questions(serial)) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
165 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
166 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
167 |
def do_cancel(serial: Long, id: Document_ID.Command) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
168 |
{ |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
169 |
// To save memory, we could try to remove empty contexts at this point. |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
170 |
// However, if a new serial gets attached to the same command_id after we deleted |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
171 |
// its context, its last_serial counter will start at 0 again, and we'll think the |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
172 |
// old serials are actually new |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
173 |
contexts += (id -> (contexts(id) - serial)) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
174 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
175 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
176 |
def do_reply(session: Session, serial: Long, answer: Answer) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
177 |
{ |
55553
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
178 |
session.protocol_command("Simplifier_Trace.reply", Properties.Value.Long(serial), answer.name) |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
179 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
180 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
181 |
loop { |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
182 |
react { |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
183 |
case Handle_Results(session, id, results) => |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
184 |
var new_context = contexts.getOrElse(id, Context()) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
185 |
var new_serial = new_context.last_serial |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
186 |
|
56372
fadb0fef09d7
more explicit iterator terminology, in accordance to Scala 2.8 library;
wenzelm
parents:
55771
diff
changeset
|
187 |
for ((serial, result) <- results.iterator if serial > new_context.last_serial) |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
188 |
{ |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
189 |
result match { |
55553
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
190 |
case Item(markup, data) => |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
191 |
memory_children += (data.parent -> (memory_children.getOrElse(data.parent, Set.empty) + serial)) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
192 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
193 |
markup match { |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
194 |
|
55553
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
195 |
case Markup.SIMP_TRACE_STEP => |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
196 |
val index = Index.of_data(data) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
197 |
memory.get(index) match { |
55390
36550a4eac5e
"no_memory" option for the simplifier trace to bypass memoization
Lars Hupel <lars.hupel@mytum.de>
parents:
55316
diff
changeset
|
198 |
case Some(answer) if data.memory => |
36550a4eac5e
"no_memory" option for the simplifier trace to bypass memoization
Lars Hupel <lars.hupel@mytum.de>
parents:
55316
diff
changeset
|
199 |
do_reply(session, serial, answer) |
36550a4eac5e
"no_memory" option for the simplifier trace to bypass memoization
Lars Hupel <lars.hupel@mytum.de>
parents:
55316
diff
changeset
|
200 |
case _ => |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
201 |
new_context += Question(data, Answer.step.all, Answer.step.default) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
202 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
203 |
|
55553
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
204 |
case Markup.SIMP_TRACE_HINT => |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
205 |
data.props match { |
55553
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
206 |
case Success(false) => |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
207 |
results.get(data.parent) match { |
55553
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
208 |
case Some(Item(Markup.SIMP_TRACE_STEP, _)) => |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
209 |
new_context += Question(data, Answer.hint_fail.all, Answer.hint_fail.default) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
210 |
case _ => |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
211 |
// unknown, better send a default reply |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
212 |
do_reply(session, data.serial, Answer.hint_fail.default) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
213 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
214 |
case _ => |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
215 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
216 |
|
55553
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
217 |
case Markup.SIMP_TRACE_IGNORE => |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
218 |
// At this point, we know that the parent of this 'IGNORE' entry is a 'STEP' |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
219 |
// entry, and that that 'STEP' entry is about to be replayed. Hence, we need |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
220 |
// to selectively purge the replies which have been memorized, going down from |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
221 |
// the parent to all leaves. |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
222 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
223 |
@tailrec |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
224 |
def purge(queue: Vector[Long]): Unit = |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
225 |
queue match { |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
226 |
case s +: rest => |
55553
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
227 |
for (Item(Markup.SIMP_TRACE_STEP, data) <- results.get(s)) |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
228 |
memory -= Index.of_data(data) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
229 |
val children = memory_children.getOrElse(s, Set.empty) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
230 |
memory_children -= s |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
231 |
purge(rest ++ children.toVector) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
232 |
case _ => |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
233 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
234 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
235 |
purge(Vector(data.parent)) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
236 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
237 |
case _ => |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
238 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
239 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
240 |
case _ => |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
241 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
242 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
243 |
new_serial = serial |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
244 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
245 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
246 |
new_context = new_context.with_serial(new_serial) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
247 |
contexts += (id -> new_context) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
248 |
reply(new_context) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
249 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
250 |
case Generate_Trace(results) => |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
251 |
// Since there are potentially lots of trace messages, we do not cache them here again. |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
252 |
// Instead, everytime the trace is being requested, we re-assemble it based on the |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
253 |
// current results. |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
254 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
255 |
val items = |
56372
fadb0fef09d7
more explicit iterator terminology, in accordance to Scala 2.8 library;
wenzelm
parents:
55771
diff
changeset
|
256 |
(for { (_, Item(_, data)) <- results.iterator } |
fadb0fef09d7
more explicit iterator terminology, in accordance to Scala 2.8 library;
wenzelm
parents:
55771
diff
changeset
|
257 |
yield data).toList |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
258 |
|
56372
fadb0fef09d7
more explicit iterator terminology, in accordance to Scala 2.8 library;
wenzelm
parents:
55771
diff
changeset
|
259 |
reply(Trace(items)) |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
260 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
261 |
case Cancel(serial) => |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
262 |
find_question(serial) match { |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
263 |
case Some((id, _)) => |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
264 |
do_cancel(serial, id) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
265 |
case None => |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
266 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
267 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
268 |
case Clear_Memory => |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
269 |
memory_children = Map.empty |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
270 |
memory = Map.empty |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
271 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
272 |
case Stop => |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
273 |
contexts = Map.empty |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
274 |
exit("Simplifier_Trace: manager actor stopped") |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
275 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
276 |
case Reply(session, serial, answer) => |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
277 |
find_question(serial) match { |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
278 |
case Some((id, Question(data, _, _))) => |
55553
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
279 |
if (data.markup == Markup.SIMP_TRACE_STEP && data.memory) |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
280 |
{ |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
281 |
val index = Index.of_data(data) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
282 |
memory += (index -> answer) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
283 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
284 |
do_cancel(serial, id) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
285 |
case None => |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
286 |
System.err.println("send_reply: unknown serial " + serial) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
287 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
288 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
289 |
do_reply(session, serial, answer) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
290 |
session.trace_events.event(Event) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
291 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
292 |
case bad => |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
293 |
System.err.println("context_manager: bad message " + bad) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
294 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
295 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
296 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
297 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
298 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
299 |
/* protocol handler */ |
54730 | 300 |
|
301 |
class Handler extends Session.Protocol_Handler |
|
302 |
{ |
|
56385 | 303 |
private def cancel(prover: Session.Prover, msg: Prover.Protocol_Output): Boolean = |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
304 |
msg.properties match { |
55553
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
305 |
case Markup.Simp_Trace_Cancel(serial) => |
55316
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
306 |
manager ! Cancel(serial) |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
307 |
true |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
308 |
case _ => |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
309 |
false |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
310 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
311 |
|
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
312 |
override def stop(prover: Session.Prover) = |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
313 |
{ |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
314 |
manager ! Clear_Memory |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
315 |
manager ! Stop |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
316 |
} |
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
Lars Hupel <lars.hupel@mytum.de>
parents:
54730
diff
changeset
|
317 |
|
55553
99409ccbe04a
more standard names for protocol and markup elements;
wenzelm
parents:
55390
diff
changeset
|
318 |
val functions = Map(Markup.SIMP_TRACE_CANCEL -> cancel _) |
54730 | 319 |
} |
320 |
} |