src/Pure/thm_name.scala
author wenzelm
Fri, 01 Apr 2022 17:06:10 +0200
changeset 75393 87ebf5a50283
parent 70580 e6101f131d0d
child 79376 b275e3379024
permissions -rw-r--r--
clarified formatting, for the sake of scala3;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
70576
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/thm_name.scala
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
     3
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
     4
Systematic naming of individual theorems, as selections from multi-facts.
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
     5
*/
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
     6
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
     7
package isabelle
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
     8
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
     9
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    10
import scala.math.Ordering
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    11
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    12
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 70580
diff changeset
    13
object Thm_Name {
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 70580
diff changeset
    14
  object Ordering extends scala.math.Ordering[Thm_Name] {
70576
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    15
    def compare(thm_name1: Thm_Name, thm_name2: Thm_Name): Int =
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    16
      thm_name1.name compare thm_name2.name match {
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    17
        case 0 => thm_name1.index compare thm_name2.index
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    18
        case ord => ord
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    19
      }
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    20
  }
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    21
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    22
  def graph[A]: Graph[Thm_Name, A] = Graph.empty(Ordering)
70580
e6101f131d0d clarified signature;
wenzelm
parents: 70576
diff changeset
    23
e6101f131d0d clarified signature;
wenzelm
parents: 70576
diff changeset
    24
  private val Thm_Name_Regex = """^(.)+\((\d+)\)$""".r
e6101f131d0d clarified signature;
wenzelm
parents: 70576
diff changeset
    25
e6101f131d0d clarified signature;
wenzelm
parents: 70576
diff changeset
    26
  def parse(s: String): Thm_Name =
e6101f131d0d clarified signature;
wenzelm
parents: 70576
diff changeset
    27
    s match {
e6101f131d0d clarified signature;
wenzelm
parents: 70576
diff changeset
    28
      case Thm_Name_Regex(name, Value.Nat(index)) => Thm_Name(name, index)
e6101f131d0d clarified signature;
wenzelm
parents: 70576
diff changeset
    29
      case _ => Thm_Name(s, 0)
e6101f131d0d clarified signature;
wenzelm
parents: 70576
diff changeset
    30
    }
70576
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    31
}
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    32
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 70580
diff changeset
    33
sealed case class Thm_Name(name: String, index: Int) {
70580
e6101f131d0d clarified signature;
wenzelm
parents: 70576
diff changeset
    34
  def print: String =
70576
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    35
    if (name == "" || index == 0) name
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    36
    else name + "(" + index + ")"
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    37
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    38
  def flatten: String =
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    39
    if (name == "" || index == 0) name
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    40
    else name + "_" + index
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    41
}