src/ZF/Constructible/Formula.thy
changeset 13398 1cadd412da48
parent 13385 31df66ca0780
child 13505 52a16cb7fefb
--- a/src/ZF/Constructible/Formula.thy	Fri Jul 19 13:29:22 2002 +0200
+++ b/src/ZF/Constructible/Formula.thy	Fri Jul 19 18:06:31 2002 +0200
@@ -11,17 +11,22 @@
 datatype
   "formula" = Member ("x: nat", "y: nat")
             | Equal  ("x: nat", "y: nat")
-            | Neg ("p: formula")
-            | And ("p: formula", "q: formula")
+            | Nand ("p: formula", "q: formula")
             | Forall ("p: formula")
 
 declare formula.intros [TC]
 
+constdefs Neg :: "i=>i"
+    "Neg(p) == Nand(p,p)"
+
+constdefs And :: "[i,i]=>i"
+    "And(p,q) == Neg(Nand(p,q))"
+
 constdefs Or :: "[i,i]=>i"
-    "Or(p,q) == Neg(And(Neg(p),Neg(q)))"
+    "Or(p,q) == Nand(Neg(p),Neg(q))"
 
 constdefs Implies :: "[i,i]=>i"
-    "Implies(p,q) == Neg(And(p,Neg(q)))"
+    "Implies(p,q) == Nand(p,Neg(q))"
 
 constdefs Iff :: "[i,i]=>i"
     "Iff(p,q) == And(Implies(p,q), Implies(q,p))"
@@ -29,6 +34,12 @@
 constdefs Exists :: "i=>i"
     "Exists(p) == Neg(Forall(Neg(p)))";
 
+lemma Neg_type [TC]: "p \<in> formula ==> Neg(p) \<in> formula"
+by (simp add: Neg_def) 
+
+lemma And_type [TC]: "[| p \<in> formula; q \<in> formula |] ==> And(p,q) \<in> formula"
+by (simp add: And_def) 
+
 lemma Or_type [TC]: "[| p \<in> formula; q \<in> formula |] ==> Or(p,q) \<in> formula"
 by (simp add: Or_def) 
 
@@ -52,11 +63,8 @@
   "satisfies(A,Equal(x,y)) = 
       (\<lambda>env \<in> list(A). bool_of_o (nth(x,env) = nth(y,env)))"
 
-  "satisfies(A,Neg(p)) = 
-      (\<lambda>env \<in> list(A). not(satisfies(A,p)`env))"
-
-  "satisfies(A,And(p,q)) =
-      (\<lambda>env \<in> list(A). (satisfies(A,p)`env) and (satisfies(A,q)`env))"
+  "satisfies(A,Nand(p,q)) =
+      (\<lambda>env \<in> list(A). not ((satisfies(A,p)`env) and (satisfies(A,q)`env)))"
 
   "satisfies(A,Forall(p)) = 
       (\<lambda>env \<in> list(A). bool_of_o (\<forall>x\<in>A. satisfies(A,p) ` (Cons(x,env)) = 1))"
@@ -78,15 +86,10 @@
    ==> sats(A, Equal(x,y), env) <-> nth(x,env) = nth(y,env)"
 by simp
 
-lemma sats_Neg_iff [simp]:
+lemma sats_Nand_iff [simp]:
   "env \<in> list(A) 
-   ==> sats(A, Neg(p), env) <-> ~ sats(A,p,env)"
-by (simp add: Bool.not_def cond_def) 
-
-lemma sats_And_iff [simp]:
-  "env \<in> list(A) 
-   ==> (sats(A, And(p,q), env)) <-> sats(A,p,env) & sats(A,q,env)"
-by (simp add: Bool.and_def cond_def) 
+   ==> (sats(A, Nand(p,q), env)) <-> ~ (sats(A,p,env) & sats(A,q,env))" 
+by (simp add: Bool.and_def Bool.not_def cond_def) 
 
 lemma sats_Forall_iff [simp]:
   "env \<in> list(A) 
@@ -97,6 +100,16 @@
 
 subsection{*Dividing line between primitive and derived connectives*}
 
+lemma sats_Neg_iff [simp]:
+  "env \<in> list(A) 
+   ==> sats(A, Neg(p), env) <-> ~ sats(A,p,env)"
+by (simp add: Neg_def) 
+
+lemma sats_And_iff [simp]:
+  "env \<in> list(A) 
+   ==> (sats(A, And(p,q), env)) <-> sats(A,p,env) & sats(A,q,env)"
+by (simp add: And_def) 
+
 lemma sats_Or_iff [simp]:
   "env \<in> list(A) 
    ==> (sats(A, Or(p,q), env)) <-> sats(A,p,env) | sats(A,q,env)"
@@ -194,11 +207,8 @@
   "incr_bv(Equal(x,y)) = 
       (\<lambda>lev \<in> nat. Equal (incr_var(x,lev), incr_var(y,lev)))"
 
-  "incr_bv(Neg(p)) = 
-      (\<lambda>lev \<in> nat. Neg(incr_bv(p)`lev))"
-
-  "incr_bv(And(p,q)) =
-      (\<lambda>lev \<in> nat. And (incr_bv(p)`lev, incr_bv(q)`lev))"
+  "incr_bv(Nand(p,q)) =
+      (\<lambda>lev \<in> nat. Nand (incr_bv(p)`lev, incr_bv(q)`lev))"
 
   "incr_bv(Forall(p)) = 
       (\<lambda>lev \<in> nat. Forall (incr_bv(p) ` succ(lev)))"
@@ -257,9 +267,7 @@
 
   "arity(Equal(x,y)) = succ(x) \<union> succ(y)"
 
-  "arity(Neg(p)) = arity(p)"
-
-  "arity(And(p,q)) = arity(p) \<union> arity(q)"
+  "arity(Nand(p,q)) = arity(p) \<union> arity(q)"
 
   "arity(Forall(p)) = nat_case(0, %x. x, arity(p))"
 
@@ -267,6 +275,12 @@
 lemma arity_type [TC]: "p \<in> formula ==> arity(p) \<in> nat"
 by (induct_tac p, simp_all) 
 
+lemma arity_Neg [simp]: "arity(Neg(p)) = arity(p)"
+by (simp add: Neg_def) 
+
+lemma arity_And [simp]: "arity(And(p,q)) = arity(p) \<union> arity(q)"
+by (simp add: And_def) 
+
 lemma arity_Or [simp]: "arity(Or(p,q)) = arity(p) \<union> arity(q)"
 by (simp add: Or_def)