src/HOL/Tools/res_types_sorts.ML
author obua
Tue, 08 Mar 2005 16:02:52 +0100
changeset 15595 dc8a41c7cefc
parent 15347 14585bc8fa09
child 16367 e11031fe4096
permissions -rw-r--r--
fix integer overflow in numeral syntax for SML NJ.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     1
(*  Author: Jia Meng, Cambridge University Computer Laboratory
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     2
    ID:         $Id$
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     3
    Copyright 2004 University of Cambridge
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     4
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     5
transformation of Isabelle arities and class relations into clauses (defined in the structure Clause). 
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     6
*)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     7
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     8
signature RES_TYPES_SORTS =
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     9
sig
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    10
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    11
exception ARITIES of string
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    12
val arity_clause :
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    13
    string * (string * string list list) list -> ResClause.arityClause list
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    14
val arity_clause_sig :
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    15
    Sign.sg -> ResClause.arityClause list list * (string * 'a list) list
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    16
val arity_clause_thy :
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    17
    Theory.theory ->
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    18
    ResClause.arityClause list list * (string * 'a list) list
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    19
type classrelClauses
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    20
val classrel_clause : string * string list -> ResClause.classrelClause list
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    21
val classrel_clauses_classrel :
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    22
    'a Graph.T -> ResClause.classrelClause list list
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    23
val classrel_clauses_sg : Sign.sg -> ResClause.classrelClause list list
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    24
val classrel_clauses_thy :
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    25
    Theory.theory -> ResClause.classrelClause list list
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    26
val classrel_of_sg : Sign.sg -> Sorts.classes
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    27
val multi_arity_clause :
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    28
    (string * (string * string list list) list) list ->
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    29
    (string * 'a list) list ->
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    30
    ResClause.arityClause list list * (string * 'a list) list
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    31
val tptp_arity_clause_thy : Theory.theory -> string list list
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    32
val tptp_classrel_clauses_sg : Sign.sg -> string list list
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    33
val tsig_of : Theory.theory -> Type.tsig
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    34
val tsig_of_sg : Sign.sg -> Type.tsig
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    35
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    36
end;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    37
				
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    38
structure ResTypesSorts : RES_TYPES_SORTS =
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    39
    
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    40
struct
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    41
    
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    42
(**** Isabelle arities ****)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    43
    
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    44
exception ARITIES of string;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    45
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    46
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    47
fun arity_clause (tcons, []) = raise ARITIES(tcons)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    48
  | arity_clause (tcons,[ar]) = [ResClause.make_axiom_arity_clause (tcons,ar)]
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    49
  | arity_clause (tcons,ar1::ars) = (ResClause.make_axiom_arity_clause (tcons,ar1)) :: (arity_clause (tcons,ars));
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    50
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    51
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    52
fun multi_arity_clause [] expts = ([], expts)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    53
  | multi_arity_clause ((tcon,[])::tcons_ars) expts =
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    54
    multi_arity_clause tcons_ars ((tcon,[])::expts)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    55
  | multi_arity_clause (tcon_ar::tcons_ars) expts =
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    56
    let val result = multi_arity_clause tcons_ars expts
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    57
    in
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    58
	(((arity_clause tcon_ar) :: (fst result)),snd result)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    59
    end;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    60
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    61
    
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    62
fun tsig_of thy = #tsig(Sign.rep_sg (sign_of thy));
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    63
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    64
fun tsig_of_sg sg = #tsig(Sign.rep_sg sg);
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    65
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    66
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    67
(* Isabelle arities *)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    68
fun arity_clause_thy thy = 
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    69
    let val tsig = tsig_of thy
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    70
	val arities = #arities (Type.rep_tsig tsig) 
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    71
        val entries = Symtab.dest arities 
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    72
    in
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    73
	multi_arity_clause entries []
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    74
    end;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    75
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    76
fun arity_clause_sig sg =
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    77
    let val tsig = #tsig(Sign.rep_sg sg)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    78
	val arities = #arities (Type.rep_tsig tsig) 
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    79
        val entries = Symtab.dest arities 
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    80
    in
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    81
	multi_arity_clause entries []
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    82
    end;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    83
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    84
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    85
fun tptp_arity_clause_thy thy = 
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    86
    let val (arclss,_) = arity_clause_thy thy
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    87
    in	
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    88
	map (map ResClause.tptp_arity_clause) arclss
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    89
    end;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    90
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    91
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    92
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    93
(**** Isabelle classrel ****)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    94
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    95
type classrelClauses = (ResClause.classrelClause list) Symtab.table;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    96
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    97
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    98
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    99
(* The new version of finding class relations from a signature *)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   100
fun classrel_of_sg sg = #classes (Type.rep_tsig (tsig_of_sg sg));
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   101
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   102
fun classrel_clause (sub, sups) = ResClause.classrelClauses_of (sub,sups);
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   103
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   104
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   105
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   106
(* new version of classrel_clauses_classrel *)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   107
fun classrel_clauses_classrel classrel =
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   108
    let val entries = Graph.dest classrel
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   109
    in
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   110
	map classrel_clause entries
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   111
    end;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   112
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   113
fun classrel_clauses_sg sg =
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   114
    let val classrel = classrel_of_sg sg 
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   115
    in
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   116
	classrel_clauses_classrel classrel
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   117
    end;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   118
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   119
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   120
val classrel_clauses_thy = classrel_clauses_sg o sign_of;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   121
 
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   122
  
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   123
fun tptp_classrel_clauses_sg sg =
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   124
    let val relclss = classrel_clauses_sg sg
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   125
    in
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   126
	map (map  ResClause.tptp_classrelClause) relclss
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   127
    end; 
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   128
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   129
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   130
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   131
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   132
end;