src/Pure/thm_name.scala
author wenzelm
Wed, 22 Apr 2020 19:22:43 +0200
changeset 71787 acfe72ff00c2
parent 70580 e6101f131d0d
child 75393 87ebf5a50283
permissions -rw-r--r--
merged
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
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    13
object Thm_Name
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    14
{
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    15
  object Ordering extends scala.math.Ordering[Thm_Name]
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    16
  {
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    17
    def compare(thm_name1: Thm_Name, thm_name2: Thm_Name): Int =
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    18
      thm_name1.name compare thm_name2.name match {
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    19
        case 0 => thm_name1.index compare thm_name2.index
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    20
        case ord => ord
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    21
      }
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    22
  }
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    23
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    24
  def graph[A]: Graph[Thm_Name, A] = Graph.empty(Ordering)
70580
e6101f131d0d clarified signature;
wenzelm
parents: 70576
diff changeset
    25
e6101f131d0d clarified signature;
wenzelm
parents: 70576
diff changeset
    26
  private val Thm_Name_Regex = """^(.)+\((\d+)\)$""".r
e6101f131d0d clarified signature;
wenzelm
parents: 70576
diff changeset
    27
e6101f131d0d clarified signature;
wenzelm
parents: 70576
diff changeset
    28
  def parse(s: String): Thm_Name =
e6101f131d0d clarified signature;
wenzelm
parents: 70576
diff changeset
    29
    s match {
e6101f131d0d clarified signature;
wenzelm
parents: 70576
diff changeset
    30
      case Thm_Name_Regex(name, Value.Nat(index)) => Thm_Name(name, index)
e6101f131d0d clarified signature;
wenzelm
parents: 70576
diff changeset
    31
      case _ => Thm_Name(s, 0)
e6101f131d0d clarified signature;
wenzelm
parents: 70576
diff changeset
    32
    }
70576
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    33
}
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    34
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    35
sealed case class Thm_Name(name: String, index: Int)
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    36
{
70580
e6101f131d0d clarified signature;
wenzelm
parents: 70576
diff changeset
    37
  def print: String =
70576
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    38
    if (name == "" || index == 0) name
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    39
    else name + "(" + index + ")"
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    40
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    41
  def flatten: String =
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    42
    if (name == "" || index == 0) name
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    43
    else name + "_" + index
3554531505a8 module Thm_Name for Isabelle/Scala;
wenzelm
parents:
diff changeset
    44
}