src/Tools/isac/BaseDefinitions/rewrite-order.sml
author wneuper <Walther.Neuper@jku.at>
Tue, 21 Jun 2022 16:04:43 +0200
changeset 60477 4ac966aaa785
parent 60436 1c8263e775d4
child 60506 145e45cd7a0f
permissions -rw-r--r--
rename functions in i-model.sml
walther@59866
     1
(* Title:  BaseDefinitions/rewrite-order.sml
walther@59857
     2
   Author: Walther Neuper
walther@59857
     3
   (c) due to copyright terms
walther@59857
     4
*)
walther@59857
     5
signature REWRITE_ORDER =
walther@59857
     6
sig
walther@59857
     7
  val e_rew_ord': Rule_Def.rew_ord';
walther@59857
     8
  val dummy_ord: Rule_Def.rew_ord_
walther@59857
     9
  val e_rew_ord: Rule_Def.rew_ord_
walther@59857
    10
walther@59857
    11
  type rew_ord = Rule_Def.rew_ord
walther@59857
    12
  val e_rew_ordX: rew_ord
Walther@60436
    13
  val to_string: rew_ord -> string
walther@59857
    14
walther@59857
    15
  type rew_ord' = Rule_Def.rew_ord'
Walther@60477
    16
  val rew_ord': (rew_ord' * (LibraryC.subst -> term * term -> bool)) list Unsynchronized.ref
Walther@60477
    17
  val assoc_rew_ord: string -> LibraryC.subst -> term * term -> bool
walther@59857
    18
end
walther@59857
    19
walther@59857
    20
(**)
walther@59857
    21
structure Rewrite_Ord(**): REWRITE_ORDER(**) =
walther@59857
    22
struct
walther@59857
    23
(**)
walther@59857
    24
walther@59857
    25
val e_rew_ord' = "e_rew_ord" : Rule_Def.rew_ord';
walther@59857
    26
type rew_ord_ = Rule_Def.rew_ord_;
walther@59857
    27
fun dummy_ord (_: subst) (_: term, _: term) = true;
walther@59857
    28
val e_rew_ord_ = dummy_ord;
walther@59857
    29
walther@59857
    30
type rew_ord = (*rew_ord' * rew_ord_;*) Rule_Def.rew_ord
walther@59857
    31
val e_rew_ord = dummy_ord; (* TODO.WN071231 clarify identifiers..e_rew_ordX*)
walther@59857
    32
val e_rew_ordX = (e_rew_ord', e_rew_ord_)
Walther@60436
    33
fun to_string (rew_ord', _) = "(" ^ rew_ord' ^ ", _: fn)"
walther@59857
    34
walther@59857
    35
type rew_ord' = Rule_Def.rew_ord'
walther@59857
    36
(* rewrite orders, also stored in 'type met' and type 'and rls'
walther@59857
    37
  The association list is required for 'rewrite.."rew_ord"..' *)
walther@59857
    38
val rew_ord' = Unsynchronized.ref
walther@59857
    39
  ([("e_rew_ord", e_rew_ord), ("dummy_ord", dummy_ord)]
walther@59857
    40
	: (rew_ord' *    (* the key for the association list         *)
walther@59857
    41
	    (subst 	    (* the bound variables - they get high order*)
walther@59857
    42
	     -> (term * term) (* (t1, t2) to be compared                  *)
walther@59857
    43
	     -> bool))        (* if t1 <= t2 then true else false         *)
walther@59857
    44
		list);              (* association list                         *)
walther@59857
    45
fun assoc' ([], key) = raise ERROR ("ME_Isa: \"" ^ key ^ "\" not known")
walther@59857
    46
  | assoc' ((keyi, xi) :: pairs, key) =
walther@59857
    47
    if key = keyi then SOME xi else assoc' (pairs, key);
walther@60264
    48
fun assoc_rew_ord ro = ((the o assoc') (! rew_ord', ro))
walther@60264
    49
  handle ERROR _ => raise ERROR ("ME_Isa: rew_ord '" ^ ro ^ "' not in system");
walther@59857
    50
walther@59857
    51
end