Search for blocks/addresses/...
Proofgold Asset
asset id
a78926cbe00a8a0425102b34de93e7157c99ca2607bc064aeff4c77b49781de1
asset hash
7c21c93b3882e63ede0001d5eaf2851bc472f2d5455f2ea8ef078eaa040b51b0
bday / block
4904
tx
3fdf8..
preasset
doc published by
Pr6Pc..
Param
lam
Sigma
:
ι
→
(
ι
→
ι
) →
ι
Param
ordsucc
ordsucc
:
ι
→
ι
Param
If_i
If_i
:
ο
→
ι
→
ι
→
ι
Definition
pack_e
pack_e
:=
λ x0 x1 .
lam
2
(
λ x2 .
If_i
(
x2
=
0
)
x0
x1
)
Param
ap
ap
:
ι
→
ι
→
ι
Known
tuple_2_0_eq
tuple_2_0_eq
:
∀ x0 x1 .
ap
(
lam
2
(
λ x3 .
If_i
(
x3
=
0
)
x0
x1
)
)
0
=
x0
Theorem
pack_e_0_eq
pack_e_0_eq
:
∀ x0 x1 x2 .
x0
=
pack_e
x1
x2
⟶
x1
=
ap
x0
0
(proof)
Theorem
pack_e_0_eq2
pack_e_0_eq2
:
∀ x0 x1 .
x0
=
ap
(
pack_e
x0
x1
)
0
(proof)
Known
tuple_2_1_eq
tuple_2_1_eq
:
∀ x0 x1 .
ap
(
lam
2
(
λ x3 .
If_i
(
x3
=
0
)
x0
x1
)
)
1
=
x1
Theorem
pack_e_1_eq
pack_e_1_eq
:
∀ x0 x1 x2 .
x0
=
pack_e
x1
x2
⟶
x2
=
ap
x0
1
(proof)
Theorem
pack_e_1_eq2
pack_e_1_eq2
:
∀ x0 x1 .
x1
=
ap
(
pack_e
x0
x1
)
1
(proof)
Definition
and
and
:=
λ x0 x1 : ο .
∀ x2 : ο .
(
x0
⟶
x1
⟶
x2
)
⟶
x2
Known
andI
andI
:
∀ x0 x1 : ο .
x0
⟶
x1
⟶
and
x0
x1
Theorem
pack_e_inj
pack_e_inj
:
∀ x0 x1 x2 x3 .
pack_e
x0
x2
=
pack_e
x1
x3
⟶
and
(
x0
=
x1
)
(
x2
=
x3
)
(proof)
Definition
struct_e
struct_e
:=
λ x0 .
∀ x1 :
ι → ο
.
(
∀ x2 x3 .
x3
∈
x2
⟶
x1
(
pack_e
x2
x3
)
)
⟶
x1
x0
Theorem
pack_struct_e_I
pack_struct_e_I
:
∀ x0 x1 .
x1
∈
x0
⟶
struct_e
(
pack_e
x0
x1
)
(proof)
Theorem
pack_struct_e_E1
pack_struct_e_E1
:
∀ x0 x1 .
struct_e
(
pack_e
x0
x1
)
⟶
x1
∈
x0
(proof)
Theorem
struct_e_eta
struct_e_eta
:
∀ x0 .
struct_e
x0
⟶
x0
=
pack_e
(
ap
x0
0
)
(
ap
x0
1
)
(proof)
Definition
unpack_e_i
unpack_e_i
:=
λ x0 .
λ x1 :
ι →
ι → ι
.
x1
(
ap
x0
0
)
(
ap
x0
1
)
Theorem
unpack_e_i_eq
unpack_e_i_eq
:
∀ x0 :
ι →
ι → ι
.
∀ x1 x2 .
unpack_e_i
(
pack_e
x1
x2
)
x0
=
x0
x1
x2
(proof)
Definition
unpack_e_o
unpack_e_o
:=
λ x0 .
λ x1 :
ι →
ι → ο
.
x1
(
ap
x0
0
)
(
ap
x0
1
)
Theorem
unpack_e_o_eq
unpack_e_o_eq
:
∀ x0 :
ι →
ι → ο
.
∀ x1 x2 .
unpack_e_o
(
pack_e
x1
x2
)
x0
=
x0
x1
x2
(proof)
Definition
pack_u
pack_u
:=
λ x0 .
λ x1 :
ι → ι
.
lam
2
(
λ x2 .
If_i
(
x2
=
0
)
x0
(
lam
x0
x1
)
)
Theorem
pack_u_0_eq
pack_u_0_eq
:
∀ x0 x1 .
∀ x2 :
ι → ι
.
x0
=
pack_u
x1
x2
⟶
x1
=
ap
x0
0
(proof)
Theorem
pack_u_0_eq2
pack_u_0_eq2
:
∀ x0 .
∀ x1 :
ι → ι
.
x0
=
ap
(
pack_u
x0
x1
)
0
(proof)
Known
beta
beta
:
∀ x0 .
∀ x1 :
ι → ι
.
∀ x2 .
x2
∈
x0
⟶
ap
(
lam
x0
x1
)
x2
=
x1
x2
Theorem
pack_u_1_eq
pack_u_1_eq
:
∀ x0 x1 .
∀ x2 :
ι → ι
.
x0
=
pack_u
x1
x2
⟶
∀ x3 .
x3
∈
x1
⟶
x2
x3
=
ap
(
ap
x0
1
)
x3
(proof)
Theorem
pack_u_1_eq2
pack_u_1_eq2
:
∀ x0 .
∀ x1 :
ι → ι
.
∀ x2 .
x2
∈
x0
⟶
x1
x2
=
ap
(
ap
(
pack_u
x0
x1
)
1
)
x2
(proof)
Theorem
pack_u_inj
pack_u_inj
:
∀ x0 x1 .
∀ x2 x3 :
ι → ι
.
pack_u
x0
x2
=
pack_u
x1
x3
⟶
and
(
x0
=
x1
)
(
∀ x4 .
x4
∈
x0
⟶
x2
x4
=
x3
x4
)
(proof)
Known
encode_u_ext
encode_u_ext
:
∀ x0 .
∀ x1 x2 :
ι → ι
.
(
∀ x3 .
x3
∈
x0
⟶
x1
x3
=
x2
x3
)
⟶
lam
x0
x1
=
lam
x0
x2
Theorem
pack_u_ext
pack_u_ext
:
∀ x0 .
∀ x1 x2 :
ι → ι
.
(
∀ x3 .
x3
∈
x0
⟶
x1
x3
=
x2
x3
)
⟶
pack_u
x0
x1
=
pack_u
x0
x2
(proof)
Definition
struct_u
struct_u
:=
λ x0 .
∀ x1 :
ι → ο
.
(
∀ x2 .
∀ x3 :
ι → ι
.
(
∀ x4 .
x4
∈
x2
⟶
x3
x4
∈
x2
)
⟶
x1
(
pack_u
x2
x3
)
)
⟶
x1
x0
Theorem
pack_struct_u_I
pack_struct_u_I
:
∀ x0 .
∀ x1 :
ι → ι
.
(
∀ x2 .
x2
∈
x0
⟶
x1
x2
∈
x0
)
⟶
struct_u
(
pack_u
x0
x1
)
(proof)
Theorem
pack_struct_u_E1
pack_struct_u_E1
:
∀ x0 .
∀ x1 :
ι → ι
.
struct_u
(
pack_u
x0
x1
)
⟶
∀ x2 .
x2
∈
x0
⟶
x1
x2
∈
x0
(proof)
Theorem
struct_u_eta
struct_u_eta
:
∀ x0 .
struct_u
x0
⟶
x0
=
pack_u
(
ap
x0
0
)
(
ap
(
ap
x0
1
)
)
(proof)
Definition
unpack_u_i
unpack_u_i
:=
λ x0 .
λ x1 :
ι →
(
ι → ι
)
→ ι
.
x1
(
ap
x0
0
)
(
ap
(
ap
x0
1
)
)
Theorem
unpack_u_i_eq
unpack_u_i_eq
:
∀ x0 :
ι →
(
ι → ι
)
→ ι
.
∀ x1 .
∀ x2 :
ι → ι
.
(
∀ x3 :
ι → ι
.
(
∀ x4 .
x4
∈
x1
⟶
x2
x4
=
x3
x4
)
⟶
x0
x1
x3
=
x0
x1
x2
)
⟶
unpack_u_i
(
pack_u
x1
x2
)
x0
=
x0
x1
x2
(proof)
Definition
unpack_u_o
unpack_u_o
:=
λ x0 .
λ x1 :
ι →
(
ι → ι
)
→ ο
.
x1
(
ap
x0
0
)
(
ap
(
ap
x0
1
)
)
Theorem
unpack_u_o_eq
unpack_u_o_eq
:
∀ x0 :
ι →
(
ι → ι
)
→ ο
.
∀ x1 .
∀ x2 :
ι → ι
.
(
∀ x3 :
ι → ι
.
(
∀ x4 .
x4
∈
x1
⟶
x2
x4
=
x3
x4
)
⟶
x0
x1
x3
=
x0
x1
x2
)
⟶
unpack_u_o
(
pack_u
x1
x2
)
x0
=
x0
x1
x2
(proof)
Param
encode_b
encode_b
:
ι
→
CT2
ι
Definition
pack_b
pack_b
:=
λ x0 .
λ x1 :
ι →
ι → ι
.
lam
2
(
λ x2 .
If_i
(
x2
=
0
)
x0
(
encode_b
x0
x1
)
)
Theorem
pack_b_0_eq
pack_b_0_eq
:
∀ x0 x1 .
∀ x2 :
ι →
ι → ι
.
x0
=
pack_b
x1
x2
⟶
x1
=
ap
x0
0
(proof)
Theorem
pack_b_0_eq2
pack_b_0_eq2
:
∀ x0 .
∀ x1 :
ι →
ι → ι
.
x0
=
ap
(
pack_b
x0
x1
)
0
(proof)
Param
decode_b
decode_b
:
ι
→
ι
→
ι
→
ι
Known
decode_encode_b
decode_encode_b
:
∀ x0 .
∀ x1 :
ι →
ι → ι
.
∀ x2 .
x2
∈
x0
⟶
∀ x3 .
x3
∈
x0
⟶
decode_b
(
encode_b
x0
x1
)
x2
x3
=
x1
x2
x3
Theorem
pack_b_1_eq
pack_b_1_eq
:
∀ x0 x1 .
∀ x2 :
ι →
ι → ι
.
x0
=
pack_b
x1
x2
⟶
∀ x3 .
x3
∈
x1
⟶
∀ x4 .
x4
∈
x1
⟶
x2
x3
x4
=
decode_b
(
ap
x0
1
)
x3
x4
(proof)
Theorem
pack_b_1_eq2
pack_b_1_eq2
:
∀ x0 .
∀ x1 :
ι →
ι → ι
.
∀ x2 .
x2
∈
x0
⟶
∀ x3 .
x3
∈
x0
⟶
x1
x2
x3
=
decode_b
(
ap
(
pack_b
x0
x1
)
1
)
x2
x3
(proof)
Theorem
pack_b_inj
pack_b_inj
:
∀ x0 x1 .
∀ x2 x3 :
ι →
ι → ι
.
pack_b
x0
x2
=
pack_b
x1
x3
⟶
and
(
x0
=
x1
)
(
∀ x4 .
x4
∈
x0
⟶
∀ x5 .
x5
∈
x0
⟶
x2
x4
x5
=
x3
x4
x5
)
(proof)
Known
encode_b_ext
encode_b_ext
:
∀ x0 .
∀ x1 x2 :
ι →
ι → ι
.
(
∀ x3 .
x3
∈
x0
⟶
∀ x4 .
x4
∈
x0
⟶
x1
x3
x4
=
x2
x3
x4
)
⟶
encode_b
x0
x1
=
encode_b
x0
x2
Theorem
pack_b_ext
pack_b_ext
:
∀ x0 .
∀ x1 x2 :
ι →
ι → ι
.
(
∀ x3 .
x3
∈
x0
⟶
∀ x4 .
x4
∈
x0
⟶
x1
x3
x4
=
x2
x3
x4
)
⟶
pack_b
x0
x1
=
pack_b
x0
x2
(proof)
Definition
struct_b
struct_b
:=
λ x0 .
∀ x1 :
ι → ο
.
(
∀ x2 .
∀ x3 :
ι →
ι → ι
.
(
∀ x4 .
x4
∈
x2
⟶
∀ x5 .
x5
∈
x2
⟶
x3
x4
x5
∈
x2
)
⟶
x1
(
pack_b
x2
x3
)
)
⟶
x1
x0
Theorem
pack_struct_b_I
pack_struct_b_I
:
∀ x0 .
∀ x1 :
ι →
ι → ι
.
(
∀ x2 .
x2
∈
x0
⟶
∀ x3 .
x3
∈
x0
⟶
x1
x2
x3
∈
x0
)
⟶
struct_b
(
pack_b
x0
x1
)
(proof)
Theorem
pack_struct_b_E1
pack_struct_b_E1
:
∀ x0 .
∀ x1 :
ι →
ι → ι
.
struct_b
(
pack_b
x0
x1
)
⟶
∀ x2 .
x2
∈
x0
⟶
∀ x3 .
x3
∈
x0
⟶
x1
x2
x3
∈
x0
(proof)
Theorem
struct_b_eta
struct_b_eta
:
∀ x0 .
struct_b
x0
⟶
x0
=
pack_b
(
ap
x0
0
)
(
decode_b
(
ap
x0
1
)
)
(proof)
Definition
unpack_b_i
unpack_b_i
:=
λ x0 .
λ x1 :
ι →
(
ι →
ι → ι
)
→ ι
.
x1
(
ap
x0
0
)
(
decode_b
(
ap
x0
1
)
)
Theorem
unpack_b_i_eq
unpack_b_i_eq
:
∀ x0 :
ι →
(
ι →
ι → ι
)
→ ι
.
∀ x1 .
∀ x2 :
ι →
ι → ι
.
(
∀ x3 :
ι →
ι → ι
.
(
∀ x4 .
x4
∈
x1
⟶
∀ x5 .
x5
∈
x1
⟶
x2
x4
x5
=
x3
x4
x5
)
⟶
x0
x1
x3
=
x0
x1
x2
)
⟶
unpack_b_i
(
pack_b
x1
x2
)
x0
=
x0
x1
x2
(proof)
Definition
unpack_b_o
unpack_b_o
:=
λ x0 .
λ x1 :
ι →
(
ι →
ι → ι
)
→ ο
.
x1
(
ap
x0
0
)
(
decode_b
(
ap
x0
1
)
)
Theorem
unpack_b_o_eq
unpack_b_o_eq
:
∀ x0 :
ι →
(
ι →
ι → ι
)
→ ο
.
∀ x1 .
∀ x2 :
ι →
ι → ι
.
(
∀ x3 :
ι →
ι → ι
.
(
∀ x4 .
x4
∈
x1
⟶
∀ x5 .
x5
∈
x1
⟶
x2
x4
x5
=
x3
x4
x5
)
⟶
x0
x1
x3
=
x0
x1
x2
)
⟶
unpack_b_o
(
pack_b
x1
x2
)
x0
=
x0
x1
x2
(proof)
Param
Sep
Sep
:
ι
→
(
ι
→
ο
) →
ι
Definition
pack_p
pack_p
:=
λ x0 .
λ x1 :
ι → ο
.
lam
2
(
λ x2 .
If_i
(
x2
=
0
)
x0
(
Sep
x0
x1
)
)
Theorem
pack_p_0_eq
pack_p_0_eq
:
∀ x0 x1 .
∀ x2 :
ι → ο
.
x0
=
pack_p
x1
x2
⟶
x1
=
ap
x0
0
(proof)
Theorem
pack_p_0_eq2
pack_p_0_eq2
:
∀ x0 .
∀ x1 :
ι → ο
.
x0
=
ap
(
pack_p
x0
x1
)
0
(proof)
Param
decode_p
decode_p
:
ι
→
ι
→
ο
Known
decode_encode_p
decode_encode_p
:
∀ x0 .
∀ x1 :
ι → ο
.
∀ x2 .
x2
∈
x0
⟶
decode_p
(
Sep
x0
x1
)
x2
=
x1
x2
Theorem
pack_p_1_eq
pack_p_1_eq
:
∀ x0 x1 .
∀ x2 :
ι → ο
.
x0
=
pack_p
x1
x2
⟶
∀ x3 .
x3
∈
x1
⟶
x2
x3
=
decode_p
(
ap
x0
1
)
x3
(proof)
Theorem
pack_p_1_eq2
pack_p_1_eq2
:
∀ x0 .
∀ x1 :
ι → ο
.
∀ x2 .
x2
∈
x0
⟶
x1
x2
=
decode_p
(
ap
(
pack_p
x0
x1
)
1
)
x2
(proof)
Theorem
pack_p_inj
pack_p_inj
:
∀ x0 x1 .
∀ x2 x3 :
ι → ο
.
pack_p
x0
x2
=
pack_p
x1
x3
⟶
and
(
x0
=
x1
)
(
∀ x4 .
x4
∈
x0
⟶
x2
x4
=
x3
x4
)
(proof)
Param
iff
iff
:
ο
→
ο
→
ο
Known
encode_p_ext
encode_p_ext
:
∀ x0 .
∀ x1 x2 :
ι → ο
.
(
∀ x3 .
x3
∈
x0
⟶
iff
(
x1
x3
)
(
x2
x3
)
)
⟶
Sep
x0
x1
=
Sep
x0
x2
Theorem
pack_p_ext
pack_p_ext
:
∀ x0 .
∀ x1 x2 :
ι → ο
.
(
∀ x3 .
x3
∈
x0
⟶
iff
(
x1
x3
)
(
x2
x3
)
)
⟶
pack_p
x0
x1
=
pack_p
x0
x2
(proof)
Definition
struct_p
struct_p
:=
λ x0 .
∀ x1 :
ι → ο
.
(
∀ x2 .
∀ x3 :
ι → ο
.
x1
(
pack_p
x2
x3
)
)
⟶
x1
x0
Theorem
pack_struct_p_I
pack_struct_p_I
:
∀ x0 .
∀ x1 :
ι → ο
.
struct_p
(
pack_p
x0
x1
)
(proof)
Known
iff_refl
iff_refl
:
∀ x0 : ο .
iff
x0
x0
Theorem
struct_p_eta
struct_p_eta
:
∀ x0 .
struct_p
x0
⟶
x0
=
pack_p
(
ap
x0
0
)
(
decode_p
(
ap
x0
1
)
)
(proof)
Definition
unpack_p_i
unpack_p_i
:=
λ x0 .
λ x1 :
ι →
(
ι → ο
)
→ ι
.
x1
(
ap
x0
0
)
(
decode_p
(
ap
x0
1
)
)
Theorem
unpack_p_i_eq
unpack_p_i_eq
:
∀ x0 :
ι →
(
ι → ο
)
→ ι
.
∀ x1 .
∀ x2 :
ι → ο
.
(
∀ x3 :
ι → ο
.
(
∀ x4 .
x4
∈
x1
⟶
iff
(
x2
x4
)
(
x3
x4
)
)
⟶
x0
x1
x3
=
x0
x1
x2
)
⟶
unpack_p_i
(
pack_p
x1
x2
)
x0
=
x0
x1
x2
(proof)
Definition
unpack_p_o
unpack_p_o
:=
λ x0 .
λ x1 :
ι →
(
ι → ο
)
→ ο
.
x1
(
ap
x0
0
)
(
decode_p
(
ap
x0
1
)
)
Theorem
unpack_p_o_eq
unpack_p_o_eq
:
∀ x0 :
ι →
(
ι → ο
)
→ ο
.
∀ x1 .
∀ x2 :
ι → ο
.
(
∀ x3 :
ι → ο
.
(
∀ x4 .
x4
∈
x1
⟶
iff
(
x2
x4
)
(
x3
x4
)
)
⟶
x0
x1
x3
=
x0
x1
x2
)
⟶
unpack_p_o
(
pack_p
x1
x2
)
x0
=
x0
x1
x2
(proof)
Param
encode_r
encode_r
:
ι
→
(
ι
→
ι
→
ο
) →
ι
Definition
pack_r
pack_r
:=
λ x0 .
λ x1 :
ι →
ι → ο
.
lam
2
(
λ x2 .
If_i
(
x2
=
0
)
x0
(
encode_r
x0
x1
)
)
Theorem
pack_r_0_eq
pack_r_0_eq
:
∀ x0 x1 .
∀ x2 :
ι →
ι → ο
.
x0
=
pack_r
x1
x2
⟶
x1
=
ap
x0
0
(proof)
Theorem
pack_r_0_eq2
pack_r_0_eq2
:
∀ x0 .
∀ x1 x2 :
ι →
ι → ο
.
x2
x0
(
ap
(
pack_r
x0
x1
)
0
)
⟶
x2
(
ap
(
pack_r
x0
x1
)
0
)
x0
(proof)
Param
decode_r
decode_r
:
ι
→
ι
→
ι
→
ο
Known
decode_encode_r
decode_encode_r
:
∀ x0 .
∀ x1 :
ι →
ι → ο
.
∀ x2 .
x2
∈
x0
⟶
∀ x3 .
x3
∈
x0
⟶
decode_r
(
encode_r
x0
x1
)
x2
x3
=
x1
x2
x3
Theorem
pack_r_1_eq
pack_r_1_eq
:
∀ x0 x1 .
∀ x2 :
ι →
ι → ο
.
x0
=
pack_r
x1
x2
⟶
∀ x3 .
x3
∈
x1
⟶
∀ x4 .
x4
∈
x1
⟶
x2
x3
x4
=
decode_r
(
ap
x0
1
)
x3
x4
(proof)
Theorem
pack_r_1_eq2
pack_r_1_eq2
:
∀ x0 .
∀ x1 :
ι →
ι → ο
.
∀ x2 .
x2
∈
x0
⟶
∀ x3 .
x3
∈
x0
⟶
x1
x2
x3
=
decode_r
(
ap
(
pack_r
x0
x1
)
1
)
x2
x3
(proof)
Theorem
pack_r_inj
pack_r_inj
:
∀ x0 x1 .
∀ x2 x3 :
ι →
ι → ο
.
pack_r
x0
x2
=
pack_r
x1
x3
⟶
and
(
x0
=
x1
)
(
∀ x4 .
x4
∈
x0
⟶
∀ x5 .
x5
∈
x0
⟶
x2
x4
x5
=
x3
x4
x5
)
(proof)
Known
encode_r_ext
encode_r_ext
:
∀ x0 .
∀ x1 x2 :
ι →
ι → ο
.
(
∀ x3 .
x3
∈
x0
⟶
∀ x4 .
x4
∈
x0
⟶
iff
(
x1
x3
x4
)
(
x2
x3
x4
)
)
⟶
encode_r
x0
x1
=
encode_r
x0
x2
Theorem
pack_r_ext
pack_r_ext
:
∀ x0 .
∀ x1 x2 :
ι →
ι → ο
.
(
∀ x3 .
x3
∈
x0
⟶
∀ x4 .
x4
∈
x0
⟶
iff
(
x1
x3
x4
)
(
x2
x3
x4
)
)
⟶
pack_r
x0
x1
=
pack_r
x0
x2
(proof)
Definition
struct_r
struct_r
:=
λ x0 .
∀ x1 :
ι → ο
.
(
∀ x2 .
∀ x3 :
ι →
ι → ο
.
x1
(
pack_r
x2
x3
)
)
⟶
x1
x0
Theorem
pack_struct_r_I
pack_struct_r_I
:
∀ x0 .
∀ x1 :
ι →
ι → ο
.
struct_r
(
pack_r
x0
x1
)
(proof)
Theorem
struct_r_eta
struct_r_eta
:
∀ x0 .
struct_r
x0
⟶
x0
=
pack_r
(
ap
x0
0
)
(
decode_r
(
ap
x0
1
)
)
(proof)
Definition
unpack_r_i
unpack_r_i
:=
λ x0 .
λ x1 :
ι →
(
ι →
ι → ο
)
→ ι
.
x1
(
ap
x0
0
)
(
decode_r
(
ap
x0
1
)
)
Theorem
unpack_r_i_eq
unpack_r_i_eq
:
∀ x0 :
ι →
(
ι →
ι → ο
)
→ ι
.
∀ x1 .
∀ x2 :
ι →
ι → ο
.
(
∀ x3 :
ι →
ι → ο
.
(
∀ x4 .
x4
∈
x1
⟶
∀ x5 .
x5
∈
x1
⟶
iff
(
x2
x4
x5
)
(
x3
x4
x5
)
)
⟶
x0
x1
x3
=
x0
x1
x2
)
⟶
unpack_r_i
(
pack_r
x1
x2
)
x0
=
x0
x1
x2
(proof)
Definition
unpack_r_o
unpack_r_o
:=
λ x0 .
λ x1 :
ι →
(
ι →
ι → ο
)
→ ο
.
x1
(
ap
x0
0
)
(
decode_r
(
ap
x0
1
)
)
Theorem
unpack_r_o_eq
unpack_r_o_eq
:
∀ x0 :
ι →
(
ι →
ι → ο
)
→ ο
.
∀ x1 .
∀ x2 :
ι →
ι → ο
.
(
∀ x3 :
ι →
ι → ο
.
(
∀ x4 .
x4
∈
x1
⟶
∀ x5 .
x5
∈
x1
⟶
iff
(
x2
x4
x5
)
(
x3
x4
x5
)
)
⟶
x0
x1
x3
=
x0
x1
x2
)
⟶
unpack_r_o
(
pack_r
x1
x2
)
x0
=
x0
x1
x2
(proof)
Param
encode_c
encode_c
:
ι
→
(
(
ι
→
ο
) →
ο
) →
ι
Definition
pack_c
pack_c
:=
λ x0 .
λ x1 :
(
ι → ο
)
→ ο
.
lam
2
(
λ x2 .
If_i
(
x2
=
0
)
x0
(
encode_c
x0
x1
)
)
Theorem
pack_c_0_eq
pack_c_0_eq
:
∀ x0 x1 .
∀ x2 :
(
ι → ο
)
→ ο
.
x0
=
pack_c
x1
x2
⟶
x1
=
ap
x0
0
(proof)
Theorem
pack_c_0_eq2
pack_c_0_eq2
:
∀ x0 .
∀ x1 :
(
ι → ο
)
→ ο
.
x0
=
ap
(
pack_c
x0
x1
)
0
(proof)
Param
decode_c
decode_c
:
ι
→
(
ι
→
ο
) →
ο
Known
decode_encode_c
decode_encode_c
:
∀ x0 .
∀ x1 :
(
ι → ο
)
→ ο
.
∀ x2 :
ι → ο
.
(
∀ x3 .
x2
x3
⟶
x3
∈
x0
)
⟶
decode_c
(
encode_c
x0
x1
)
x2
=
x1
x2
Theorem
pack_c_1_eq
pack_c_1_eq
:
∀ x0 x1 .
∀ x2 :
(
ι → ο
)
→ ο
.
x0
=
pack_c
x1
x2
⟶
∀ x3 :
ι → ο
.
(
∀ x4 .
x3
x4
⟶
x4
∈
x1
)
⟶
x2
x3
=
decode_c
(
ap
x0
1
)
x3
(proof)
Theorem
pack_c_1_eq2
pack_c_1_eq2
:
∀ x0 .
∀ x1 :
(
ι → ο
)
→ ο
.
∀ x2 :
ι → ο
.
(
∀ x3 .
x2
x3
⟶
x3
∈
x0
)
⟶
x1
x2
=
decode_c
(
ap
(
pack_c
x0
x1
)
1
)
x2
(proof)
Theorem
pack_c_inj
pack_c_inj
:
∀ x0 x1 .
∀ x2 x3 :
(
ι → ο
)
→ ο
.
pack_c
x0
x2
=
pack_c
x1
x3
⟶
and
(
x0
=
x1
)
(
∀ x4 :
ι → ο
.
(
∀ x5 .
x4
x5
⟶
x5
∈
x0
)
⟶
x2
x4
=
x3
x4
)
(proof)
Known
encode_c_ext
encode_c_ext
:
∀ x0 .
∀ x1 x2 :
(
ι → ο
)
→ ο
.
(
∀ x3 :
ι → ο
.
(
∀ x4 .
x3
x4
⟶
x4
∈
x0
)
⟶
iff
(
x1
x3
)
(
x2
x3
)
)
⟶
encode_c
x0
x1
=
encode_c
x0
x2
Theorem
pack_c_ext
pack_c_ext
:
∀ x0 .
∀ x1 x2 :
(
ι → ο
)
→ ο
.
(
∀ x3 :
ι → ο
.
(
∀ x4 .
x3
x4
⟶
x4
∈
x0
)
⟶
iff
(
x1
x3
)
(
x2
x3
)
)
⟶
pack_c
x0
x1
=
pack_c
x0
x2
(proof)
Definition
struct_c
struct_c
:=
λ x0 .
∀ x1 :
ι → ο
.
(
∀ x2 .
∀ x3 :
(
ι → ο
)
→ ο
.
x1
(
pack_c
x2
x3
)
)
⟶
x1
x0
Theorem
pack_struct_c_I
pack_struct_c_I
:
∀ x0 .
∀ x1 :
(
ι → ο
)
→ ο
.
struct_c
(
pack_c
x0
x1
)
(proof)
Theorem
struct_c_eta
struct_c_eta
:
∀ x0 .
struct_c
x0
⟶
x0
=
pack_c
(
ap
x0
0
)
(
decode_c
(
ap
x0
1
)
)
(proof)
Definition
unpack_c_i
unpack_c_i
:=
λ x0 .
λ x1 :
ι →
(
(
ι → ο
)
→ ο
)
→ ι
.
x1
(
ap
x0
0
)
(
decode_c
(
ap
x0
1
)
)
Theorem
unpack_c_i_eq
unpack_c_i_eq
:
∀ x0 :
ι →
(
(
ι → ο
)
→ ο
)
→ ι
.
∀ x1 .
∀ x2 :
(
ι → ο
)
→ ο
.
(
∀ x3 :
(
ι → ο
)
→ ο
.
(
∀ x4 :
ι → ο
.
(
∀ x5 .
x4
x5
⟶
x5
∈
x1
)
⟶
iff
(
x2
x4
)
(
x3
x4
)
)
⟶
x0
x1
x3
=
x0
x1
x2
)
⟶
unpack_c_i
(
pack_c
x1
x2
)
x0
=
x0
x1
x2
(proof)
Definition
unpack_c_o
unpack_c_o
:=
λ x0 .
λ x1 :
ι →
(
(
ι → ο
)
→ ο
)
→ ο
.
x1
(
ap
x0
0
)
(
decode_c
(
ap
x0
1
)
)
Theorem
unpack_c_o_eq
unpack_c_o_eq
:
∀ x0 :
ι →
(
(
ι → ο
)
→ ο
)
→ ο
.
∀ x1 .
∀ x2 :
(
ι → ο
)
→ ο
.
(
∀ x3 :
(
ι → ο
)
→ ο
.
(
∀ x4 :
ι → ο
.
(
∀ x5 .
x4
x5
⟶
x5
∈
x1
)
⟶
iff
(
x2
x4
)
(
x3
x4
)
)
⟶
x0
x1
x3
=
x0
x1
x2
)
⟶
unpack_c_o
(
pack_c
x1
x2
)
x0
=
x0
x1
x2
(proof)