Theory "defCNF"

Parents     option rich_list

Signature

Constant Type
OK :num -> (bool -> bool -> bool) # (num + bool) # (num + bool) -> bool
OKDEF :num -> ((bool -> bool -> bool) # (num + bool) # (num + bool)) list -> bool
UNIQUE_tupled :(num -> bool) # num # (bool -> bool -> bool) # (num + bool) # (num + bool) -> bool
OK_tupled :num # (bool -> bool -> bool) # (num + bool) # (num + bool) -> bool
DEF :(num -> bool) -> num -> ((bool -> bool -> bool) # (num + bool) # (num + bool)) list -> bool
UNIQUE :(num -> bool) -> num -> (bool -> bool -> bool) # (num + bool) # (num + bool) -> bool

Definitions

UNIQUE_tupled_primitive_def
|- UNIQUE_tupled =
   WFREC (@R. WF R)
     (\UNIQUE_tupled' a'.
        case a' of
           (v1,v2) ->
             case v2 of
                (v3,v4) ->
                  case v4 of
                     (v5,v6) ->
                       case v6 of
                          (v7,v8) ->
                            case v7 of
                               INL v9 ->
                                 (case v8 of
                                     INL v11 -> v1 v3 = v5 (v1 v9) (v1 v11)
                                  || INR v12 -> v1 v3 = v5 (v1 v9) v12)
                            || INR v10 ->
                                 case v8 of
                                    INL v13 -> v1 v3 = v5 v10 (v1 v13)
                                 || INR v14 -> v1 v3 = v5 v10 v14)
UNIQUE_curried_def
|- !x x1 x2. UNIQUE x x1 x2 = UNIQUE_tupled (x,x1,x2)
DEF_def
|- (!v n. DEF v n [] = T) /\
   !v n x xs. DEF v n (x::xs) = UNIQUE v n x /\ DEF v (SUC n) xs
OK_tupled_primitive_def
|- OK_tupled =
   WFREC (@R. WF R)
     (\OK_tupled' a.
        case a of
           (v,v1) ->
             case v1 of
                (v2,v3) ->
                  case v3 of
                     (v4,v5) ->
                       case v4 of
                          INL v6 ->
                            (case v5 of
                                INL v8 -> v6 < v /\ v8 < v
                             || INR v9 -> v6 < v)
                       || INR v7 ->
                            case v5 of INL v10 -> v10 < v || INR v11 -> T)
OK_curried_def
|- !x x1. OK x x1 = OK_tupled (x,x1)
OKDEF_def
|- (!n. OKDEF n [] = T) /\
   !n x xs. OKDEF n (x::xs) = OK n x /\ OKDEF (SUC n) xs


Theorems

UNIQUE_ind
|- !P.
     (!v n conn i j. P v n (conn,INL i,INL j)) /\
     (!v n conn i b. P v n (conn,INL i,INR b)) /\
     (!v n conn a j. P v n (conn,INR a,INL j)) /\
     (!v n conn a b. P v n (conn,INR a,INR b)) ==>
     !v v1 v2. P v v1 v2
UNIQUE_def
|- (UNIQUE v n (conn,INL i,INL j) = (v n = conn (v i) (v j))) /\
   (UNIQUE v n (conn,INL i,INR b) = (v n = conn (v i) b)) /\
   (UNIQUE v n (conn,INR a,INL j) = (v n = conn a (v j))) /\
   (UNIQUE v n (conn,INR a,INR b) = (v n = conn a b))
OK_ind
|- !P.
     (!n conn i j. P n (conn,INL i,INL j)) /\
     (!n conn i b. P n (conn,INL i,INR b)) /\
     (!n conn a j. P n (conn,INR a,INL j)) /\
     (!n conn a b. P n (conn,INR a,INR b)) ==>
     !v v1. P v v1
OK_def
|- (OK n (conn,INL i,INL j) = i < n /\ j < n) /\
   (OK n (conn,INL i,INR b) = i < n) /\ (OK n (conn,INR a,INL j) = j < n) /\
   (OK n (conn,INR a,INR b) = T)
DEF_SNOC
|- !n x l v. DEF v n (SNOC x l) = DEF v n l /\ UNIQUE v (n + LENGTH l) x
OKDEF_SNOC
|- !n x l. OKDEF n (SNOC x l) = OKDEF n l /\ OK (n + LENGTH l) x
CONSISTENCY
|- !n l. OKDEF n l ==> ?v. DEF v n l