| Type | Arity |
|---|---|
| KS | 2 |
| Constant | Type |
| wfKS | :('a, 'b) KS -> bool |
| mk_KS | :(('state -> bool) # ('state -> bool) # (string -> 'state # 'state -> bool) # ('prop -> bool) # ('state -> 'prop -> bool)) recspace -> ('prop, 'state) KS |
| ks0 | :('state -> bool) -> ('state -> bool) -> (string -> 'state # 'state -> bool) -> ('prop -> bool) -> ('state -> 'prop -> bool) -> ('prop, 'state) KS |
| dest_KS | :('prop, 'state) KS -> (('state -> bool) # ('state -> bool) # (string -> 'state # 'state -> bool) # ('prop -> bool) # ('state -> 'prop -> bool)) recspace |
| TOTAL | :('a # 'b -> bool) -> bool |
| KS_size | :('prop -> num) -> ('state -> num) -> ('prop, 'state) KS -> num |
| KS_case | :(('state -> bool) -> ('state -> bool) -> (string -> 'state # 'state -> bool) -> ('prop -> bool) -> ('state -> 'prop -> bool) -> 'a) -> ('prop, 'state) KS -> 'a |
| KS_ap_fupd | :(('prop -> bool) -> 'prop -> bool) -> ('prop, 'state) KS -> ('prop, 'state) KS |
| KS_ap | :('prop, 'state) KS -> 'prop -> bool |
| KS_T_fupd | :((string -> 'state # 'state -> bool) -> string -> 'state # 'state -> bool) -> ('prop, 'state) KS -> ('prop, 'state) KS |
| KS_TRANSITION | :'state -> ('a, 'state) KS -> string -> 'state -> bool |
| KS_T | :('prop, 'state) KS -> string -> 'state # 'state -> bool |
| KS_S_fupd | :(('state -> bool) -> 'state -> bool) -> ('prop, 'state) KS -> ('prop, 'state) KS |
| KS_S0_fupd | :(('state -> bool) -> 'state -> bool) -> ('prop, 'state) KS -> ('prop, 'state) KS |
| KS_S0 | :('prop, 'state) KS -> 'state -> bool |
| KS_S | :('prop, 'state) KS -> 'state -> bool |
| KS_L_fupd | :(('state -> 'prop -> bool) -> 'state -> 'prop -> bool) -> ('prop, 'state) KS -> ('prop, 'state) KS |
| KS_L | :('prop, 'state) KS -> 'state -> 'prop -> bool |
| KS | :('state -> bool) -> ('state -> bool) -> (string -> 'state # 'state -> bool) -> ('prop -> bool) -> ('state -> 'prop -> bool) -> ('prop, 'state) KS |
| BISIM | :('a, 'b) KS -> ('c, 'd) KS -> ('b # 'd -> bool) -> bool |
|- ?rep.
TYPE_DEFINITION
(\a0'.
!'KS'.
(!a0'.
(?a0 a1 a2 a3 a4.
a0' =
(\a0 a1 a2 a3 a4.
ind_type$CONSTR 0 (a0,a1,a2,a3,a4) (\n. ind_type$BOTTOM))
a0 a1 a2 a3 a4) ==>
'KS' a0') ==>
'KS' a0') rep
|- (!a. mk_KS (dest_KS a) = a) /\
!r.
(\a0'.
!'KS'.
(!a0'.
(?a0 a1 a2 a3 a4.
a0' =
(\a0 a1 a2 a3 a4.
ind_type$CONSTR 0 (a0,a1,a2,a3,a4) (\n. ind_type$BOTTOM))
a0 a1 a2 a3 a4) ==>
'KS' a0') ==>
'KS' a0') r =
(dest_KS (mk_KS r) = r)
|- ks0 =
(\a0 a1 a2 a3 a4.
mk_KS
((\a0 a1 a2 a3 a4.
ind_type$CONSTR 0 (a0,a1,a2,a3,a4) (\n. ind_type$BOTTOM)) a0 a1 a2
a3 a4))
|- KS = ks0
|- !f a0 a1 a2 a3 a4. KS_case f (KS a0 a1 a2 a3 a4) = f a0 a1 a2 a3 a4
|- !f f1 a0 a1 a2 a3 a4. KS_size f f1 (KS a0 a1 a2 a3 a4) = 1
|- !f f0 f1 f2 f3. (KS f f0 f1 f2 f3).S = f
|- !f f0 f1 f2 f3. (KS f f0 f1 f2 f3).S0 = f0
|- !f f0 f1 f2 f3. (KS f f0 f1 f2 f3).T = f1
|- !f f0 f1 f2 f3. (KS f f0 f1 f2 f3).ap = f2
|- !f f0 f1 f2 f3. (KS f f0 f1 f2 f3).L = f3
|- !f4 f f0 f1 f2 f3.
KS f f0 f1 f2 f3 with S updated_by f4 = KS (f4 f) f0 f1 f2 f3
|- !f4 f f0 f1 f2 f3.
KS f f0 f1 f2 f3 with S0 updated_by f4 = KS f (f4 f0) f1 f2 f3
|- !f4 f f0 f1 f2 f3.
KS f f0 f1 f2 f3 with T updated_by f4 = KS f f0 (f4 f1) f2 f3
|- !f4 f f0 f1 f2 f3.
KS f f0 f1 f2 f3 with ap updated_by f4 = KS f f0 f1 (f4 f2) f3
|- !f4 f f0 f1 f2 f3.
KS f f0 f1 f2 f3 with L updated_by f4 = KS f f0 f1 f2 (f4 f3)
|- !ks. wfKS ks = ks.S0 SUBSET ks.S /\ (ks.S = UNIV)
|- !p ks a q. p>--ks/a-->q = ks.T a (p,q)
|- !R. TOTAL R = !s. ?s'. R (s,s')
|- !M1 M2 BS.
BISIM M1 M2 BS =
!a s1 s2.
(!s1'.
BS (s1,s2) /\ M1.T a (s1,s1') ==>
?s2'. M2.T a (s2,s2') /\ BS (s1',s2')) /\
!s2'.
BS (s1,s2) /\ M2.T a (s2,s2') ==>
?s1'. M1.T a (s1,s1') /\ BS (s1',s2')
|- (!f f0 f1 f2 f3. (KS f f0 f1 f2 f3).S = f) /\ (!f f0 f1 f2 f3. (KS f f0 f1 f2 f3).S0 = f0) /\ (!f f0 f1 f2 f3. (KS f f0 f1 f2 f3).T = f1) /\ (!f f0 f1 f2 f3. (KS f f0 f1 f2 f3).ap = f2) /\ !f f0 f1 f2 f3. (KS f f0 f1 f2 f3).L = f3
|- (!f4 f f0 f1 f2 f3.
KS f f0 f1 f2 f3 with S updated_by f4 = KS (f4 f) f0 f1 f2 f3) /\
(!f4 f f0 f1 f2 f3.
KS f f0 f1 f2 f3 with S0 updated_by f4 = KS f (f4 f0) f1 f2 f3) /\
(!f4 f f0 f1 f2 f3.
KS f f0 f1 f2 f3 with T updated_by f4 = KS f f0 (f4 f1) f2 f3) /\
(!f4 f f0 f1 f2 f3.
KS f f0 f1 f2 f3 with ap updated_by f4 = KS f f0 f1 (f4 f2) f3) /\
!f4 f f0 f1 f2 f3.
KS f f0 f1 f2 f3 with L updated_by f4 = KS f f0 f1 f2 (f4 f3)
|- (!f K. (K with S0 updated_by f).S = K.S) /\ (!f K. (K with T updated_by f).S = K.S) /\ (!f K. (K with ap updated_by f).S = K.S) /\ (!f K. (K with L updated_by f).S = K.S) /\ (!f K. (K with S updated_by f).S0 = K.S0) /\ (!f K. (K with T updated_by f).S0 = K.S0) /\ (!f K. (K with ap updated_by f).S0 = K.S0) /\ (!f K. (K with L updated_by f).S0 = K.S0) /\ (!f K. (K with S updated_by f).T = K.T) /\ (!f K. (K with S0 updated_by f).T = K.T) /\ (!f K. (K with ap updated_by f).T = K.T) /\ (!f K. (K with L updated_by f).T = K.T) /\ (!f K. (K with S updated_by f).ap = K.ap) /\ (!f K. (K with S0 updated_by f).ap = K.ap) /\ (!f K. (K with T updated_by f).ap = K.ap) /\ (!f K. (K with L updated_by f).ap = K.ap) /\ (!f K. (K with S updated_by f).L = K.L) /\ (!f K. (K with S0 updated_by f).L = K.L) /\ (!f K. (K with T updated_by f).L = K.L) /\ (!f K. (K with ap updated_by f).L = K.L) /\ (!f K. (K with S updated_by f).S = f K.S) /\ (!f K. (K with S0 updated_by f).S0 = f K.S0) /\ (!f K. (K with T updated_by f).T = f K.T) /\ (!f K. (K with ap updated_by f).ap = f K.ap) /\ !f K. (K with L updated_by f).L = f K.L
|- (!g f K.
K with <|S updated_by f; S updated_by g|> =
K with S updated_by f o g) /\
(!g f K.
K with <|S0 updated_by f; S0 updated_by g|> =
K with S0 updated_by f o g) /\
(!g f K.
K with <|T updated_by f; T updated_by g|> =
K with T updated_by f o g) /\
(!g f K.
K with <|ap updated_by f; ap updated_by g|> =
K with ap updated_by f o g) /\
!g f K.
K with <|L updated_by f; L updated_by g|> = K with L updated_by f o g
|- ((!g f. KS_S_fupd f o KS_S_fupd g = KS_S_fupd (f o g)) /\
!h g f. KS_S_fupd f o KS_S_fupd g o h = KS_S_fupd (f o g) o h) /\
((!g f. KS_S0_fupd f o KS_S0_fupd g = KS_S0_fupd (f o g)) /\
!h g f. KS_S0_fupd f o KS_S0_fupd g o h = KS_S0_fupd (f o g) o h) /\
((!g f. KS_T_fupd f o KS_T_fupd g = KS_T_fupd (f o g)) /\
!h g f. KS_T_fupd f o KS_T_fupd g o h = KS_T_fupd (f o g) o h) /\
((!g f. KS_ap_fupd f o KS_ap_fupd g = KS_ap_fupd (f o g)) /\
!h g f. KS_ap_fupd f o KS_ap_fupd g o h = KS_ap_fupd (f o g) o h) /\
(!g f. KS_L_fupd f o KS_L_fupd g = KS_L_fupd (f o g)) /\
!h g f. KS_L_fupd f o KS_L_fupd g o h = KS_L_fupd (f o g) o h
|- (!g f K.
K with <|S0 updated_by f; S updated_by g|> =
K with <|S updated_by g; S0 updated_by f|>) /\
(!g f K.
K with <|T updated_by f; S updated_by g|> =
K with <|S updated_by g; T updated_by f|>) /\
(!g f K.
K with <|T updated_by f; S0 updated_by g|> =
K with <|S0 updated_by g; T updated_by f|>) /\
(!g f K.
K with <|ap updated_by f; S updated_by g|> =
K with <|S updated_by g; ap updated_by f|>) /\
(!g f K.
K with <|ap updated_by f; S0 updated_by g|> =
K with <|S0 updated_by g; ap updated_by f|>) /\
(!g f K.
K with <|ap updated_by f; T updated_by g|> =
K with <|T updated_by g; ap updated_by f|>) /\
(!g f K.
K with <|L updated_by f; S updated_by g|> =
K with <|S updated_by g; L updated_by f|>) /\
(!g f K.
K with <|L updated_by f; S0 updated_by g|> =
K with <|S0 updated_by g; L updated_by f|>) /\
(!g f K.
K with <|L updated_by f; T updated_by g|> =
K with <|T updated_by g; L updated_by f|>) /\
!g f K.
K with <|L updated_by f; ap updated_by g|> =
K with <|ap updated_by g; L updated_by f|>
|- ((!g f. KS_S0_fupd f o KS_S_fupd g = KS_S_fupd g o KS_S0_fupd f) /\
!h g f.
KS_S0_fupd f o KS_S_fupd g o h = KS_S_fupd g o KS_S0_fupd f o h) /\
((!g f. KS_T_fupd f o KS_S_fupd g = KS_S_fupd g o KS_T_fupd f) /\
!h g f. KS_T_fupd f o KS_S_fupd g o h = KS_S_fupd g o KS_T_fupd f o h) /\
((!g f. KS_T_fupd f o KS_S0_fupd g = KS_S0_fupd g o KS_T_fupd f) /\
!h g f.
KS_T_fupd f o KS_S0_fupd g o h = KS_S0_fupd g o KS_T_fupd f o h) /\
((!g f. KS_ap_fupd f o KS_S_fupd g = KS_S_fupd g o KS_ap_fupd f) /\
!h g f.
KS_ap_fupd f o KS_S_fupd g o h = KS_S_fupd g o KS_ap_fupd f o h) /\
((!g f. KS_ap_fupd f o KS_S0_fupd g = KS_S0_fupd g o KS_ap_fupd f) /\
!h g f.
KS_ap_fupd f o KS_S0_fupd g o h = KS_S0_fupd g o KS_ap_fupd f o h) /\
((!g f. KS_ap_fupd f o KS_T_fupd g = KS_T_fupd g o KS_ap_fupd f) /\
!h g f.
KS_ap_fupd f o KS_T_fupd g o h = KS_T_fupd g o KS_ap_fupd f o h) /\
((!g f. KS_L_fupd f o KS_S_fupd g = KS_S_fupd g o KS_L_fupd f) /\
!h g f. KS_L_fupd f o KS_S_fupd g o h = KS_S_fupd g o KS_L_fupd f o h) /\
((!g f. KS_L_fupd f o KS_S0_fupd g = KS_S0_fupd g o KS_L_fupd f) /\
!h g f.
KS_L_fupd f o KS_S0_fupd g o h = KS_S0_fupd g o KS_L_fupd f o h) /\
((!g f. KS_L_fupd f o KS_T_fupd g = KS_T_fupd g o KS_L_fupd f) /\
!h g f. KS_L_fupd f o KS_T_fupd g o h = KS_T_fupd g o KS_L_fupd f o h) /\
(!g f. KS_L_fupd f o KS_ap_fupd g = KS_ap_fupd g o KS_L_fupd f) /\
!h g f. KS_L_fupd f o KS_ap_fupd g o h = KS_ap_fupd g o KS_L_fupd f o h
|- !K1 K2.
(K1 = K2) =
(K1.S = K2.S) /\ (K1.S0 = K2.S0) /\ (K1.T = K2.T) /\ (K1.ap = K2.ap) /\
(K1.L = K2.L)
|- !K f3 f2 f1 f0 f.
K with <|S := f3; S0 := f2; T := f1; ap := f0; L := f|> =
<|S := f3; S0 := f2; T := f1; ap := f0; L := f|>
|- !K. ?f3 f2 f1 f0 f. K = <|S := f3; S0 := f2; T := f1; ap := f0; L := f|>
|- !P.
(!K. P K) =
!f3 f2 f1 f0 f. P <|S := f3; S0 := f2; T := f1; ap := f0; L := f|>
|- !P.
(?K. P K) =
?f3 f2 f1 f0 f. P <|S := f3; S0 := f2; T := f1; ap := f0; L := f|>
|- !f31 f21 f11 f01 f1 f32 f22 f12 f02 f2.
(<|S := f31; S0 := f21; T := f11; ap := f01; L := f1|> =
<|S := f32; S0 := f22; T := f12; ap := f02; L := f2|>) =
(f31 = f32) /\ (f21 = f22) /\ (f11 = f12) /\ (f01 = f02) /\ (f1 = f2)
|- DATATYPE (record KS S S0 T ap L)
|- !a0 a1 a2 a3 a4 a0' a1' a2' a3' a4'.
(KS a0 a1 a2 a3 a4 = KS a0' a1' a2' a3' a4') =
(a0 = a0') /\ (a1 = a1') /\ (a2 = a2') /\ (a3 = a3') /\ (a4 = a4')
|- !M M' f.
(M = M') /\
(!a0 a1 a2 a3 a4.
(M' = KS a0 a1 a2 a3 a4) ==>
(f a0 a1 a2 a3 a4 = f' a0 a1 a2 a3 a4)) ==>
(KS_case f M = KS_case f' M')
|- !K'. ?f f0 f1 f2 f3. K' = KS f f0 f1 f2 f3
|- !f. ?fn. !a0 a1 a2 a3 a4. fn (KS a0 a1 a2 a3 a4) = f a0 a1 a2 a3 a4
|- !P. (!f f0 f1 f2 f3. P (KS f f0 f1 f2 f3)) ==> !K'. P K'
|- !ks. ks.S0 SUBSET UNIV /\ (ks.S = UNIV) ==> wfKS ks
|- !x y. ~(x = y) = (((\s. x) = (\s. y)) = F)
|- !R. TOTAL (\(s,s'). R (s,s') \/ ~(?s'. R (s,s')) /\ (s' = s))