mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-03-20 13:33:51 +01:00
100 lines
4.1 KiB
Coq
100 lines
4.1 KiB
Coq
Require Import List Ascii.
|
|
Require Import MultiByte Object ListUtil.
|
|
|
|
Open Scope list_scope.
|
|
Open Scope char_scope.
|
|
|
|
Inductive Serialized : object -> list ascii8 -> Prop :=
|
|
| SNil :
|
|
Serialized Nil ["192"]
|
|
| STrue :
|
|
Serialized (Bool true) ["195"]
|
|
| SFalse :
|
|
Serialized (Bool false) ["194"]
|
|
| SPFixnum : forall x1 x2 x3 x4 x5 x6 x7,
|
|
Serialized (PFixnum (Ascii x1 x2 x3 x4 x5 x6 x7 false))
|
|
[Ascii x1 x2 x3 x4 x5 x6 x7 false]
|
|
| SNFixnum : forall x1 x2 x3 x4 x5,
|
|
Serialized (NFixnum (Ascii x1 x2 x3 x4 x5 true true true))
|
|
[Ascii x1 x2 x3 x4 x5 true true true]
|
|
| SUint8 : forall c,
|
|
Serialized (Uint8 c) ("204"::list_of_ascii8 c)
|
|
| SUint16 : forall c,
|
|
Serialized (Uint16 c) ("205"::list_of_ascii16 c)
|
|
| SUint32 : forall c,
|
|
Serialized (Uint32 c) ("206"::list_of_ascii32 c)
|
|
| SUint64 : forall c,
|
|
Serialized (Uint64 c) ("207"::list_of_ascii64 c)
|
|
| SInt8 : forall c,
|
|
Serialized (Int8 c) ("208"::list_of_ascii8 c)
|
|
| SInt16 : forall c,
|
|
Serialized (Int16 c) ("209"::list_of_ascii16 c)
|
|
| SInt32 : forall c,
|
|
Serialized (Int32 c) ("210"::list_of_ascii32 c)
|
|
| SInt64 : forall c,
|
|
Serialized (Int64 c) ("211"::list_of_ascii64 c)
|
|
| SFloat : forall c,
|
|
Serialized (Float c) ("202"::list_of_ascii32 c)
|
|
| SDouble : forall c,
|
|
Serialized (Double c) ("203"::list_of_ascii64 c)
|
|
| SFixRaw : forall cs b1 b2 b3 b4 b5,
|
|
Ascii b1 b2 b3 b4 b5 false false false = ascii8_of_nat (length cs) ->
|
|
Serialized (FixRaw cs) ((Ascii b1 b2 b3 b4 b5 true false true)::cs)
|
|
| SRaw16 : forall cs s1 s2,
|
|
(s1,s2) = ascii16_of_nat (length cs) ->
|
|
Serialized (Raw16 cs) ("218"::s1::s2::cs)
|
|
| SRaw32 : forall cs s1 s2 s3 s4,
|
|
((s1,s2),(s3,s4)) = ascii32_of_nat (length cs) ->
|
|
Serialized (Raw32 cs) ("219"::s1::s2::s3::s4::cs)
|
|
| SFixArrayNil :
|
|
Serialized (FixArray []) ["144"]
|
|
| SFixArrayCons : forall x xs y ys b1 b2 b3 b4 b5 b6 b7 b8,
|
|
Ascii b1 b2 b3 b4 false false false false = ascii8_of_nat (length xs) ->
|
|
Ascii b5 b6 b7 b8 false false false false = ascii8_of_nat (length (x::xs)) ->
|
|
Serialized x y ->
|
|
Serialized (FixArray xs) ((Ascii b1 b2 b3 b4 true false false true)::ys) ->
|
|
Serialized (FixArray (x::xs)) ((Ascii b5 b6 b7 b8 true false false true)::y ++ ys)
|
|
| SArray16Nil :
|
|
Serialized (Array16 []) ["220"; "000"; "000"]
|
|
| SArray16Cons : forall x xs y ys s1 s2 t1 t2,
|
|
(t1,t2) = ascii16_of_nat (length xs) ->
|
|
(s1,s2) = ascii16_of_nat (length (x::xs)) ->
|
|
Serialized x y ->
|
|
Serialized (Array16 xs) ("220"::t1::t2::ys) ->
|
|
Serialized (Array16 (x::xs)) ("220"::s1::s2::y ++ ys)
|
|
| SArray32Nil :
|
|
Serialized (Array32 []) ["221"; "000"; "000";"000"; "000"]
|
|
| SArray32Cons : forall x xs y ys s1 s2 s3 s4 t1 t2 t3 t4,
|
|
((t1,t2),(t3,t4)) = ascii32_of_nat (length xs) ->
|
|
((s1,s2),(s3,s4)) = ascii32_of_nat (length (x::xs)) ->
|
|
Serialized x y ->
|
|
Serialized (Array32 xs) ("221"::t1::t2::t3::t4::ys) ->
|
|
Serialized (Array32 (x::xs)) ("221"::s1::s2::s3::s4::y ++ ys)
|
|
| SFixMapNil :
|
|
Serialized (FixMap []) ["128"]
|
|
| SFixMapCons : forall x1 x2 xs y1 y2 ys b1 b2 b3 b4 b5 b6 b7 b8,
|
|
Ascii b1 b2 b3 b4 false false false false = ascii8_of_nat (length xs) ->
|
|
Ascii b5 b6 b7 b8 false false false false = ascii8_of_nat (length ((x1,x2)::xs)) ->
|
|
Serialized x1 y1 ->
|
|
Serialized x2 y2 ->
|
|
Serialized (FixMap xs) ((Ascii b1 b2 b3 b4 false false false true)::ys) ->
|
|
Serialized (FixMap ((x1,x2)::xs)) ((Ascii b5 b6 b7 b8 false false false true)::y1 ++ y2 ++ ys)
|
|
| SMap16Nil :
|
|
Serialized (Map16 []) ["222"; "000"; "000"]
|
|
| SMap16Cons : forall x1 x2 xs y1 y2 ys s1 s2 t1 t2,
|
|
(t1,t2) = ascii16_of_nat (length xs) ->
|
|
(s1,s2) = ascii16_of_nat (length ((x1,x2)::xs)) ->
|
|
Serialized x1 y1 ->
|
|
Serialized x2 y2 ->
|
|
Serialized (Map16 xs) ("222"::t1::t2::ys) ->
|
|
Serialized (Map16 ((x1,x2)::xs)) ("222"::s1::s2::y1 ++ y2 ++ ys)
|
|
| SMap32Nil :
|
|
Serialized (Map32 []) ["223"; "000"; "000";"000"; "000"]
|
|
| SMap32Cons : forall x1 x2 xs y1 y2 ys s1 s2 s3 s4 t1 t2 t3 t4,
|
|
((t1,t2),(t3,t4)) = ascii32_of_nat (length xs) ->
|
|
((s1,s2),(s3,s4)) = ascii32_of_nat (length ((x1,x2)::xs)) ->
|
|
Serialized x1 y1 ->
|
|
Serialized x2 y2 ->
|
|
Serialized (Map32 xs) ("223"::t1::t2::t3::t4::ys) ->
|
|
Serialized (Map32 ((x1,x2)::xs)) ("223"::s1::s2::s3::s4::y1 ++ y2 ++ ys).
|