src/HOL/Prolog/Func.thy
author wenzelm
Sun, 13 Dec 2020 23:11:41 +0100
changeset 72907 3883f536d84d
parent 63167 0909deb8059b
permissions -rw-r--r--
unused (see 29566b6810f7);
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13208
965f95a3abd9 added the usual file headers
oheimb
parents: 12338
diff changeset
     1
(*  Title:    HOL/Prolog/Func.thy
965f95a3abd9 added the usual file headers
oheimb
parents: 12338
diff changeset
     2
    Author:   David von Oheimb (based on a lecture on Lambda Prolog by Nadathur)
965f95a3abd9 added the usual file headers
oheimb
parents: 12338
diff changeset
     3
*)
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     4
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 61337
diff changeset
     5
section \<open>Untyped functional language, with call by value semantics\<close>
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     6
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
     7
theory Func
35301
90e42f9ba4d1 distributed theory Algebras to theories Groups and Lattices
haftmann
parents: 35265
diff changeset
     8
imports HOHH
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
     9
begin
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    10
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    11
typedecl tm
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    12
35265
3fd8c3edf639 dropped reference to type classes
haftmann
parents: 34974
diff changeset
    13
axiomatization
3fd8c3edf639 dropped reference to type classes
haftmann
parents: 34974
diff changeset
    14
  abs     :: "(tm \<Rightarrow> tm) \<Rightarrow> tm" and
3fd8c3edf639 dropped reference to type classes
haftmann
parents: 34974
diff changeset
    15
  app     :: "tm \<Rightarrow> tm \<Rightarrow> tm" and
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    16
35265
3fd8c3edf639 dropped reference to type classes
haftmann
parents: 34974
diff changeset
    17
  cond    :: "tm \<Rightarrow> tm \<Rightarrow> tm \<Rightarrow> tm" and
3fd8c3edf639 dropped reference to type classes
haftmann
parents: 34974
diff changeset
    18
  "fix"   :: "(tm \<Rightarrow> tm) \<Rightarrow> tm" and
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    19
35265
3fd8c3edf639 dropped reference to type classes
haftmann
parents: 34974
diff changeset
    20
  true    :: tm and
3fd8c3edf639 dropped reference to type classes
haftmann
parents: 34974
diff changeset
    21
  false   :: tm and
3fd8c3edf639 dropped reference to type classes
haftmann
parents: 34974
diff changeset
    22
  "and"   :: "tm \<Rightarrow> tm \<Rightarrow> tm"       (infixr "and" 999) and
3fd8c3edf639 dropped reference to type classes
haftmann
parents: 34974
diff changeset
    23
  eq      :: "tm \<Rightarrow> tm \<Rightarrow> tm"       (infixr "eq" 999) and
3fd8c3edf639 dropped reference to type classes
haftmann
parents: 34974
diff changeset
    24
3fd8c3edf639 dropped reference to type classes
haftmann
parents: 34974
diff changeset
    25
  Z       :: tm                     ("Z") and
3fd8c3edf639 dropped reference to type classes
haftmann
parents: 34974
diff changeset
    26
  S       :: "tm \<Rightarrow> tm" and
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    27
35265
3fd8c3edf639 dropped reference to type classes
haftmann
parents: 34974
diff changeset
    28
  plus    :: "tm \<Rightarrow> tm \<Rightarrow> tm"       (infixl "+" 65) and
3fd8c3edf639 dropped reference to type classes
haftmann
parents: 34974
diff changeset
    29
  minus   :: "tm \<Rightarrow> tm \<Rightarrow> tm"       (infixl "-" 65) and
3fd8c3edf639 dropped reference to type classes
haftmann
parents: 34974
diff changeset
    30
  times   :: "tm \<Rightarrow> tm \<Rightarrow> tm"       (infixl "*" 70) and
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    31
35265
3fd8c3edf639 dropped reference to type classes
haftmann
parents: 34974
diff changeset
    32
  eval    :: "tm \<Rightarrow> tm \<Rightarrow> bool" where
3fd8c3edf639 dropped reference to type classes
haftmann
parents: 34974
diff changeset
    33
3fd8c3edf639 dropped reference to type classes
haftmann
parents: 34974
diff changeset
    34
eval: "
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    35
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    36
eval (abs RR) (abs RR)..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    37
eval (app F X) V :- eval F (abs R) & eval X U & eval (R U) V..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    38
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    39
eval (cond P L1 R1) D1 :- eval P true  & eval L1 D1..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    40
eval (cond P L2 R2) D2 :- eval P false & eval R2 D2..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    41
eval (fix G) W   :- eval (G (fix G)) W..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    42
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    43
eval true  true ..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    44
eval false false..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    45
eval (P and Q) true  :- eval P true  & eval Q true ..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    46
eval (P and Q) false :- eval P false | eval Q false..
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    47
eval (A1 eq B1) true  :- eval A1 C1 & eval B1 C1..
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    48
eval (A2 eq B2) false :- True..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    49
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    50
eval Z Z..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    51
eval (S N) (S M) :- eval N M..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    52
eval ( Z    + M) K     :- eval      M  K..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    53
eval ((S N) + M) (S K) :- eval (N + M) K..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    54
eval (N     - Z) K     :- eval  N      K..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    55
eval ((S N) - (S M)) K :- eval (N- M)  K..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    56
eval ( Z    * M) Z..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    57
eval ((S N) * M) K :- eval (N * M) L & eval (L + M) K"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    58
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 20713
diff changeset
    59
lemmas prog_Func = eval
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 20713
diff changeset
    60
61337
4645502c3c64 fewer aliases for toplevel theorem statements;
wenzelm
parents: 58889
diff changeset
    61
schematic_goal "eval ((S (S Z)) + (S Z)) ?X"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 20713
diff changeset
    62
  apply (prolog prog_Func)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 20713
diff changeset
    63
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 20713
diff changeset
    64
61337
4645502c3c64 fewer aliases for toplevel theorem statements;
wenzelm
parents: 58889
diff changeset
    65
schematic_goal "eval (app (fix (%fact. abs(%n. cond (n eq Z) (S Z)
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 20713
diff changeset
    66
                        (n * (app fact (n - (S Z))))))) (S (S (S Z)))) ?X"
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 20713
diff changeset
    67
  apply (prolog prog_Func)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 20713
diff changeset
    68
  done
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    69
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    70
end