src/Tools/8bit/gnu_emacs/goalify.el
author paulson
Tue, 16 Jul 1996 15:49:46 +0200
changeset 1868 836950047d85
parent 1826 2a2c0dbeb4ac
permissions -rw-r--r--
Put in minimal simpset to avoid excessive simplification, just as in revision 1.9 of HOL/indrule.ML
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1826
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
     1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
     2
;; special function for Isabelle
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
     3
;;
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
     4
;;
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
     5
; goalify.el
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
     6
;
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
     7
; Emacs command to change "goal" proofs to "prove_goal" proofs 
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
     8
; and reverse IN A REGION.
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
     9
;    [would be difficult in "sed" since replacements involve multiple lines]
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    10
;
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    11
;; origin is prove_goalify.el
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    12
;; enhanced by Franz Regensburger
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    13
;;    corrected some errors in regular expressions
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    14
;;    changed name prove_goalify --> goalify
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    15
;;    added inverse functions        ungoalify
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    16
;
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    17
; function goalify:
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    18
; 
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    19
; val PAT = goalARGS;$
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    20
; COMMANDS;$
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    21
; val ID = result();
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    22
; 
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    23
; to
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    24
; 
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    25
; val ID = prove_goalARGS
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    26
;  (fn PAT=>
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    27
;  [
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    28
;  COMMANDS
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    29
;  ]);
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    30
;;
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    31
;; Note: PAT must be an identifier. _ as pattern is not supported.
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    32
;;
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    33
; function ungoalify:
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    34
; 
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    35
; val ID = prove_goalARGS
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    36
;  (fn PAT=>
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    37
;  [
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    38
;  COMMANDS
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    39
;  ]);
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    40
;
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    41
;
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    42
; to 
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    43
; val PAT = goalARGS;$
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    44
; COMMANDS;$
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    45
; val ID = result();
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    46
; 
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    47
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    48
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    49
(defun ungoalify (alpha omega)
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    50
 "Change well-formed prove_goal proofs to goal...result"
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    51
  (interactive "r"
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    52
	       "*") 
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    53
  ; 0: restrict editing to region
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    54
  (narrow-to-region alpha omega)
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    55
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    56
  ; 1: insert delimiter ID 
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    57
  (goto-char (point-min))
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    58
  (replace-regexp  
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    59
  "[ \t]*val[ \t]+\\([^ \t\n=]+\\)[ \t\n=]+prove_goal" "\\1")
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    60
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    61
  ; 2: insertt delimiter ARGS  PAT  and  before first command   
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    62
  (goto-char (point-min))
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    63
  (replace-regexp  
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    64
  "[ \n\t]*(fn[ \t]+\\([^=]+\\)=>[^(]*" "\\1\n")
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    65
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    66
  ; 3: shift  over all commands
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    67
  ; Note: only one line per command
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    68
  (goto-char (point-max))
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    69
  (while (not (equal (point) (point-min)))
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    70
    (goto-char (point-min))
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    71
    (replace-regexp  
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    72
    "[ \t]*\\(.*\\),[ \t]*\n" "by \\1;\n"))
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    73
    
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    74
  ; 4: fix last 
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    75
  (goto-char (point-min))
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    76
  (replace-regexp  
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    77
    "[ \t]*\\(.*\\)[ \t\n]*\][ \t\n]*)[ \t\n]*;" "by \\1;")
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    78
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    79
  ; 5: arange new val Pat = goal .. 
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    80
  (goto-char (point-min))
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    81
  (replace-regexp  
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    82
  "\\([^]*\\)\\([^]*\\)\\([^]*\\)\n\\([^]*\\)"
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    83
  "val \\3= goal\\2;\n\\4\nval \\1 = result();")
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    84
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    85
  ; widen again
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    86
  (widen)
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    87
)
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    88
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    89
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    90
(defun goalify (alpha omega)
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    91
 "Change well-formed goal...result proofs to use prove_goal"
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    92
  (interactive "r"
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    93
               "*") 
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    94
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    95
  ; 0: restrict editing to region
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    96
  (narrow-to-region alpha omega)
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    97
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    98
  ; 1: delimit the identifier in "val ID = result()" using ^Q
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
    99
  (goto-char (point-min))
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   100
  (replace-regexp  "val[ \t\n]+\\([^ \t\n=]+\\)[ \t\n=]+result();[ \t]*$"
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   101
   "\\1")
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   102
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   103
  ; 2: replace terminal \";  by  
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   104
  (goto-char (point-min))
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   105
  (replace-regexp  "\";[ \t]*$" "")
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   106
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   107
  ; 3: replace lines "by ...;" with "...,"
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   108
  (goto-char (point-min))
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   109
  (replace-regexp  "by[ \n\t]*\\([^;]*\\)[ \t\n]*;"  "\t\\1,")
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   110
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   111
  ; 4: removing the extra commas, those followed by ^Q
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   112
  (goto-char (point-min))
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   113
  (replace-regexp  ",[ \n\t]*"  "")
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   114
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   115
  ; 5: transforming goal... to prove_goal...
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   116
  (goto-char (point-min))
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   117
  (replace-regexp
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   118
  "val[ \t\n]+\\([^ \n\t=]+\\)[ \t\n=]+goal\\([^]*\\)
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   119
\\([^]*\\)\\([^]*\\)"  
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   120
  "val \\4 = prove_goal\\2\"\n (fn \\1 =>\n\t[\n\\3\n\t]);")
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   121
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   122
  ; 6: widen again
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   123
  (widen)
2a2c0dbeb4ac Initial revision
oheimb
parents:
diff changeset
   124
)