summaryrefslogtreecommitdiff
path: root/tests/hol4/misc-constants
diff options
context:
space:
mode:
Diffstat (limited to 'tests/hol4/misc-constants')
-rw-r--r--tests/hol4/misc-constants/Holmakefile5
-rw-r--r--tests/hol4/misc-constants/constantsScript.sml225
-rw-r--r--tests/hol4/misc-constants/constantsTheory.sig548
3 files changed, 778 insertions, 0 deletions
diff --git a/tests/hol4/misc-constants/Holmakefile b/tests/hol4/misc-constants/Holmakefile
new file mode 100644
index 00000000..3c4b8973
--- /dev/null
+++ b/tests/hol4/misc-constants/Holmakefile
@@ -0,0 +1,5 @@
+# This file was automatically generated - modify ../Holmakefile.template instead
+INCLUDES = ../../../backends/hol4
+
+all: $(DEFAULT_TARGETS)
+.PHONY: all
diff --git a/tests/hol4/misc-constants/constantsScript.sml b/tests/hol4/misc-constants/constantsScript.sml
new file mode 100644
index 00000000..324d553d
--- /dev/null
+++ b/tests/hol4/misc-constants/constantsScript.sml
@@ -0,0 +1,225 @@
+(** THIS FILE WAS AUTOMATICALLY GENERATED BY AENEAS *)
+(** [constants] *)
+open primitivesLib divDefLib
+
+val _ = new_theory "constants"
+
+
+(** [constants::X0] *)
+Definition x0_body_def:
+ x0_body : u32 result = Return (int_to_u32 0)
+End
+Definition x0_c_def:
+ x0_c : u32 = get_return_value x0_body
+End
+
+(** [core::num::u32::{9}::MAX] *)
+Definition core_num_u32_max_body_def:
+ core_num_u32_max_body : u32 result = Return (int_to_u32 4294967295)
+End
+Definition core_num_u32_max_c_def:
+ core_num_u32_max_c : u32 = get_return_value core_num_u32_max_body
+End
+
+(** [constants::X1] *)
+Definition x1_body_def:
+ x1_body : u32 result = Return core_num_u32_max_c
+End
+Definition x1_c_def:
+ x1_c : u32 = get_return_value x1_body
+End
+
+(** [constants::X2] *)
+Definition x2_body_def:
+ x2_body : u32 result = Return (int_to_u32 3)
+End
+Definition x2_c_def:
+ x2_c : u32 = get_return_value x2_body
+End
+
+val incr_fwd_def = Define ‘
+ (** [constants::incr] *)
+ incr_fwd (n : u32) : u32 result =
+ u32_add n (int_to_u32 1)
+’
+
+(** [constants::X3] *)
+Definition x3_body_def:
+ x3_body : u32 result = incr_fwd (int_to_u32 32)
+End
+Definition x3_c_def:
+ x3_c : u32 = get_return_value x3_body
+End
+
+val mk_pair0_fwd_def = Define ‘
+ (** [constants::mk_pair0] *)
+ mk_pair0_fwd (x : u32) (y : u32) : (u32 # u32) result =
+ Return (x, y)
+’
+
+Datatype:
+ (** [constants::Pair] *)
+ pair_t = <| pair_x : 't1; pair_y : 't2; |>
+End
+
+val mk_pair1_fwd_def = Define ‘
+ (** [constants::mk_pair1] *)
+ mk_pair1_fwd (x : u32) (y : u32) : (u32, u32) pair_t result =
+ Return (<| pair_x := x; pair_y := y |>)
+’
+
+(** [constants::P0] *)
+Definition p0_body_def:
+ p0_body : (u32 # u32) result = mk_pair0_fwd (int_to_u32 0) (int_to_u32 1)
+End
+Definition p0_c_def:
+ p0_c : (u32 # u32) = get_return_value p0_body
+End
+
+(** [constants::P1] *)
+Definition p1_body_def:
+ p1_body : (u32, u32) pair_t result =
+ mk_pair1_fwd (int_to_u32 0) (int_to_u32 1)
+End
+Definition p1_c_def:
+ p1_c : (u32, u32) pair_t = get_return_value p1_body
+End
+
+(** [constants::P2] *)
+Definition p2_body_def:
+ p2_body : (u32 # u32) result = Return (int_to_u32 0, int_to_u32 1)
+End
+Definition p2_c_def:
+ p2_c : (u32 # u32) = get_return_value p2_body
+End
+
+(** [constants::P3] *)
+Definition p3_body_def:
+ p3_body : (u32, u32) pair_t result =
+ Return (<| pair_x := (int_to_u32 0); pair_y := (int_to_u32 1) |>)
+End
+Definition p3_c_def:
+ p3_c : (u32, u32) pair_t = get_return_value p3_body
+End
+
+Datatype:
+ (** [constants::Wrap] *)
+ wrap_t = <| wrap_val : 't; |>
+End
+
+val wrap_new_fwd_def = Define ‘
+ (** [constants::Wrap::{0}::new] *)
+ wrap_new_fwd (val : 't) : 't wrap_t result =
+ Return (<| wrap_val := val |>)
+’
+
+(** [constants::Y] *)
+Definition y_body_def:
+ y_body : i32 wrap_t result = wrap_new_fwd (int_to_i32 2)
+End
+Definition y_c_def:
+ y_c : i32 wrap_t = get_return_value y_body
+End
+
+val unwrap_y_fwd_def = Define ‘
+ (** [constants::unwrap_y] *)
+ unwrap_y_fwd : i32 result =
+ Return y_c.wrap_val
+’
+
+(** [constants::YVAL] *)
+Definition yval_body_def:
+ yval_body : i32 result = unwrap_y_fwd
+End
+Definition yval_c_def:
+ yval_c : i32 = get_return_value yval_body
+End
+
+(** [constants::get_z1::Z1] *)
+Definition get_z1_z1_body_def:
+ get_z1_z1_body : i32 result = Return (int_to_i32 3)
+End
+Definition get_z1_z1_c_def:
+ get_z1_z1_c : i32 = get_return_value get_z1_z1_body
+End
+
+val get_z1_fwd_def = Define ‘
+ (** [constants::get_z1] *)
+ get_z1_fwd : i32 result =
+ Return get_z1_z1_c
+’
+
+val add_fwd_def = Define ‘
+ (** [constants::add] *)
+ add_fwd (a : i32) (b : i32) : i32 result =
+ i32_add a b
+’
+
+(** [constants::Q1] *)
+Definition q1_body_def:
+ q1_body : i32 result = Return (int_to_i32 5)
+End
+Definition q1_c_def:
+ q1_c : i32 = get_return_value q1_body
+End
+
+(** [constants::Q2] *)
+Definition q2_body_def:
+ q2_body : i32 result = Return q1_c
+End
+Definition q2_c_def:
+ q2_c : i32 = get_return_value q2_body
+End
+
+(** [constants::Q3] *)
+Definition q3_body_def:
+ q3_body : i32 result = add_fwd q2_c (int_to_i32 3)
+End
+Definition q3_c_def:
+ q3_c : i32 = get_return_value q3_body
+End
+
+val get_z2_fwd_def = Define ‘
+ (** [constants::get_z2] *)
+ get_z2_fwd : i32 result =
+ do
+ i <- get_z1_fwd;
+ i0 <- add_fwd i q3_c;
+ add_fwd q1_c i0
+ od
+’
+
+(** [constants::S1] *)
+Definition s1_body_def:
+ s1_body : u32 result = Return (int_to_u32 6)
+End
+Definition s1_c_def:
+ s1_c : u32 = get_return_value s1_body
+End
+
+(** [constants::S2] *)
+Definition s2_body_def:
+ s2_body : u32 result = incr_fwd s1_c
+End
+Definition s2_c_def:
+ s2_c : u32 = get_return_value s2_body
+End
+
+(** [constants::S3] *)
+Definition s3_body_def:
+ s3_body : (u32, u32) pair_t result = Return p3_c
+End
+Definition s3_c_def:
+ s3_c : (u32, u32) pair_t = get_return_value s3_body
+End
+
+(** [constants::S4] *)
+Definition s4_body_def:
+ s4_body : (u32, u32) pair_t result =
+ mk_pair1_fwd (int_to_u32 7) (int_to_u32 8)
+End
+Definition s4_c_def:
+ s4_c : (u32, u32) pair_t = get_return_value s4_body
+End
+
+val _ = export_theory ()
diff --git a/tests/hol4/misc-constants/constantsTheory.sig b/tests/hol4/misc-constants/constantsTheory.sig
new file mode 100644
index 00000000..6148221f
--- /dev/null
+++ b/tests/hol4/misc-constants/constantsTheory.sig
@@ -0,0 +1,548 @@
+signature constantsTheory =
+sig
+ type thm = Thm.thm
+
+ (* Definitions *)
+ val add_fwd_def : thm
+ val core_num_u32_max_body_def : thm
+ val core_num_u32_max_c_def : thm
+ val get_z1_fwd_def : thm
+ val get_z1_z1_body_def : thm
+ val get_z1_z1_c_def : thm
+ val get_z2_fwd_def : thm
+ val incr_fwd_def : thm
+ val mk_pair0_fwd_def : thm
+ val mk_pair1_fwd_def : thm
+ val p0_body_def : thm
+ val p0_c_def : thm
+ val p1_body_def : thm
+ val p1_c_def : thm
+ val p2_body_def : thm
+ val p2_c_def : thm
+ val p3_body_def : thm
+ val p3_c_def : thm
+ val pair_t_TY_DEF : thm
+ val pair_t_case_def : thm
+ val pair_t_size_def : thm
+ val q1_body_def : thm
+ val q1_c_def : thm
+ val q2_body_def : thm
+ val q2_c_def : thm
+ val q3_body_def : thm
+ val q3_c_def : thm
+ val recordtype_pair_t_seldef_pair_x_def : thm
+ val recordtype_pair_t_seldef_pair_x_fupd_def : thm
+ val recordtype_pair_t_seldef_pair_y_def : thm
+ val recordtype_pair_t_seldef_pair_y_fupd_def : thm
+ val recordtype_wrap_t_seldef_wrap_val_def : thm
+ val recordtype_wrap_t_seldef_wrap_val_fupd_def : thm
+ val s1_body_def : thm
+ val s1_c_def : thm
+ val s2_body_def : thm
+ val s2_c_def : thm
+ val s3_body_def : thm
+ val s3_c_def : thm
+ val s4_body_def : thm
+ val s4_c_def : thm
+ val unwrap_y_fwd_def : thm
+ val wrap_new_fwd_def : thm
+ val wrap_t_TY_DEF : thm
+ val wrap_t_case_def : thm
+ val wrap_t_size_def : thm
+ val x0_body_def : thm
+ val x0_c_def : thm
+ val x1_body_def : thm
+ val x1_c_def : thm
+ val x2_body_def : thm
+ val x2_c_def : thm
+ val x3_body_def : thm
+ val x3_c_def : thm
+ val y_body_def : thm
+ val y_c_def : thm
+ val yval_body_def : thm
+ val yval_c_def : thm
+
+ (* Theorems *)
+ val EXISTS_pair_t : thm
+ val EXISTS_wrap_t : thm
+ val FORALL_pair_t : thm
+ val FORALL_wrap_t : thm
+ val datatype_pair_t : thm
+ val datatype_wrap_t : thm
+ val pair_t_11 : thm
+ val pair_t_Axiom : thm
+ val pair_t_accessors : thm
+ val pair_t_accfupds : thm
+ val pair_t_case_cong : thm
+ val pair_t_case_eq : thm
+ val pair_t_component_equality : thm
+ val pair_t_fn_updates : thm
+ val pair_t_fupdcanon : thm
+ val pair_t_fupdcanon_comp : thm
+ val pair_t_fupdfupds : thm
+ val pair_t_fupdfupds_comp : thm
+ val pair_t_induction : thm
+ val pair_t_literal_11 : thm
+ val pair_t_literal_nchotomy : thm
+ val pair_t_nchotomy : thm
+ val pair_t_updates_eq_literal : thm
+ val wrap_t_11 : thm
+ val wrap_t_Axiom : thm
+ val wrap_t_accessors : thm
+ val wrap_t_accfupds : thm
+ val wrap_t_case_cong : thm
+ val wrap_t_case_eq : thm
+ val wrap_t_component_equality : thm
+ val wrap_t_fn_updates : thm
+ val wrap_t_fupdfupds : thm
+ val wrap_t_fupdfupds_comp : thm
+ val wrap_t_induction : thm
+ val wrap_t_literal_11 : thm
+ val wrap_t_literal_nchotomy : thm
+ val wrap_t_nchotomy : thm
+ val wrap_t_updates_eq_literal : thm
+
+ val constants_grammars : type_grammar.grammar * term_grammar.grammar
+(*
+ [divDef] Parent theory of "constants"
+
+ [add_fwd_def] Definition
+
+ ⊢ ∀a b. add_fwd a b = i32_add a b
+
+ [core_num_u32_max_body_def] Definition
+
+ ⊢ core_num_u32_max_body = Return (int_to_u32 4294967295)
+
+ [core_num_u32_max_c_def] Definition
+
+ ⊢ core_num_u32_max_c = get_return_value core_num_u32_max_body
+
+ [get_z1_fwd_def] Definition
+
+ ⊢ get_z1_fwd = Return get_z1_z1_c
+
+ [get_z1_z1_body_def] Definition
+
+ ⊢ get_z1_z1_body = Return (int_to_i32 3)
+
+ [get_z1_z1_c_def] Definition
+
+ ⊢ get_z1_z1_c = get_return_value get_z1_z1_body
+
+ [get_z2_fwd_def] Definition
+
+ ⊢ get_z2_fwd =
+ do i <- get_z1_fwd; i0 <- add_fwd i q3_c; add_fwd q1_c i0 od
+
+ [incr_fwd_def] Definition
+
+ ⊢ ∀n. incr_fwd n = u32_add n (int_to_u32 1)
+
+ [mk_pair0_fwd_def] Definition
+
+ ⊢ ∀x y. mk_pair0_fwd x y = Return (x,y)
+
+ [mk_pair1_fwd_def] Definition
+
+ ⊢ ∀x y. mk_pair1_fwd x y = Return <|pair_x := x; pair_y := y|>
+
+ [p0_body_def] Definition
+
+ ⊢ p0_body = mk_pair0_fwd (int_to_u32 0) (int_to_u32 1)
+
+ [p0_c_def] Definition
+
+ ⊢ p0_c = get_return_value p0_body
+
+ [p1_body_def] Definition
+
+ ⊢ p1_body = mk_pair1_fwd (int_to_u32 0) (int_to_u32 1)
+
+ [p1_c_def] Definition
+
+ ⊢ p1_c = get_return_value p1_body
+
+ [p2_body_def] Definition
+
+ ⊢ p2_body = Return (int_to_u32 0,int_to_u32 1)
+
+ [p2_c_def] Definition
+
+ ⊢ p2_c = get_return_value p2_body
+
+ [p3_body_def] Definition
+
+ ⊢ p3_body = Return <|pair_x := int_to_u32 0; pair_y := int_to_u32 1|>
+
+ [p3_c_def] Definition
+
+ ⊢ p3_c = get_return_value p3_body
+
+ [pair_t_TY_DEF] Definition
+
+ ⊢ ∃rep.
+ TYPE_DEFINITION
+ (λa0'.
+ ∀ $var$('pair_t').
+ (∀a0'.
+ (∃a0 a1.
+ a0' =
+ (λa0 a1.
+ ind_type$CONSTR 0 (a0,a1)
+ (λn. ind_type$BOTTOM)) a0 a1) ⇒
+ $var$('pair_t') a0') ⇒
+ $var$('pair_t') a0') rep
+
+ [pair_t_case_def] Definition
+
+ ⊢ ∀a0 a1 f. pair_t_CASE (pair_t a0 a1) f = f a0 a1
+
+ [pair_t_size_def] Definition
+
+ ⊢ ∀f f1 a0 a1. pair_t_size f f1 (pair_t a0 a1) = 1 + (f a0 + f1 a1)
+
+ [q1_body_def] Definition
+
+ ⊢ q1_body = Return (int_to_i32 5)
+
+ [q1_c_def] Definition
+
+ ⊢ q1_c = get_return_value q1_body
+
+ [q2_body_def] Definition
+
+ ⊢ q2_body = Return q1_c
+
+ [q2_c_def] Definition
+
+ ⊢ q2_c = get_return_value q2_body
+
+ [q3_body_def] Definition
+
+ ⊢ q3_body = add_fwd q2_c (int_to_i32 3)
+
+ [q3_c_def] Definition
+
+ ⊢ q3_c = get_return_value q3_body
+
+ [recordtype_pair_t_seldef_pair_x_def] Definition
+
+ ⊢ ∀t t0. (pair_t t t0).pair_x = t
+
+ [recordtype_pair_t_seldef_pair_x_fupd_def] Definition
+
+ ⊢ ∀f t t0. pair_t t t0 with pair_x updated_by f = pair_t (f t) t0
+
+ [recordtype_pair_t_seldef_pair_y_def] Definition
+
+ ⊢ ∀t t0. (pair_t t t0).pair_y = t0
+
+ [recordtype_pair_t_seldef_pair_y_fupd_def] Definition
+
+ ⊢ ∀f t t0. pair_t t t0 with pair_y updated_by f = pair_t t (f t0)
+
+ [recordtype_wrap_t_seldef_wrap_val_def] Definition
+
+ ⊢ ∀t. (wrap_t t).wrap_val = t
+
+ [recordtype_wrap_t_seldef_wrap_val_fupd_def] Definition
+
+ ⊢ ∀f t. wrap_t t with wrap_val updated_by f = wrap_t (f t)
+
+ [s1_body_def] Definition
+
+ ⊢ s1_body = Return (int_to_u32 6)
+
+ [s1_c_def] Definition
+
+ ⊢ s1_c = get_return_value s1_body
+
+ [s2_body_def] Definition
+
+ ⊢ s2_body = incr_fwd s1_c
+
+ [s2_c_def] Definition
+
+ ⊢ s2_c = get_return_value s2_body
+
+ [s3_body_def] Definition
+
+ ⊢ s3_body = Return p3_c
+
+ [s3_c_def] Definition
+
+ ⊢ s3_c = get_return_value s3_body
+
+ [s4_body_def] Definition
+
+ ⊢ s4_body = mk_pair1_fwd (int_to_u32 7) (int_to_u32 8)
+
+ [s4_c_def] Definition
+
+ ⊢ s4_c = get_return_value s4_body
+
+ [unwrap_y_fwd_def] Definition
+
+ ⊢ unwrap_y_fwd = Return y_c.wrap_val
+
+ [wrap_new_fwd_def] Definition
+
+ ⊢ ∀val. wrap_new_fwd val = Return <|wrap_val := val|>
+
+ [wrap_t_TY_DEF] Definition
+
+ ⊢ ∃rep.
+ TYPE_DEFINITION
+ (λa0.
+ ∀ $var$('wrap_t').
+ (∀a0.
+ (∃a. a0 =
+ (λa. ind_type$CONSTR 0 a (λn. ind_type$BOTTOM))
+ a) ⇒
+ $var$('wrap_t') a0) ⇒
+ $var$('wrap_t') a0) rep
+
+ [wrap_t_case_def] Definition
+
+ ⊢ ∀a f. wrap_t_CASE (wrap_t a) f = f a
+
+ [wrap_t_size_def] Definition
+
+ ⊢ ∀f a. wrap_t_size f (wrap_t a) = 1 + f a
+
+ [x0_body_def] Definition
+
+ ⊢ x0_body = Return (int_to_u32 0)
+
+ [x0_c_def] Definition
+
+ ⊢ x0_c = get_return_value x0_body
+
+ [x1_body_def] Definition
+
+ ⊢ x1_body = Return core_num_u32_max_c
+
+ [x1_c_def] Definition
+
+ ⊢ x1_c = get_return_value x1_body
+
+ [x2_body_def] Definition
+
+ ⊢ x2_body = Return (int_to_u32 3)
+
+ [x2_c_def] Definition
+
+ ⊢ x2_c = get_return_value x2_body
+
+ [x3_body_def] Definition
+
+ ⊢ x3_body = incr_fwd (int_to_u32 32)
+
+ [x3_c_def] Definition
+
+ ⊢ x3_c = get_return_value x3_body
+
+ [y_body_def] Definition
+
+ ⊢ y_body = wrap_new_fwd (int_to_i32 2)
+
+ [y_c_def] Definition
+
+ ⊢ y_c = get_return_value y_body
+
+ [yval_body_def] Definition
+
+ ⊢ yval_body = unwrap_y_fwd
+
+ [yval_c_def] Definition
+
+ ⊢ yval_c = get_return_value yval_body
+
+ [EXISTS_pair_t] Theorem
+
+ ⊢ ∀P. (∃p. P p) ⇔ ∃t0 t. P <|pair_x := t0; pair_y := t|>
+
+ [EXISTS_wrap_t] Theorem
+
+ ⊢ ∀P. (∃w. P w) ⇔ ∃u. P <|wrap_val := u|>
+
+ [FORALL_pair_t] Theorem
+
+ ⊢ ∀P. (∀p. P p) ⇔ ∀t0 t. P <|pair_x := t0; pair_y := t|>
+
+ [FORALL_wrap_t] Theorem
+
+ ⊢ ∀P. (∀w. P w) ⇔ ∀u. P <|wrap_val := u|>
+
+ [datatype_pair_t] Theorem
+
+ ⊢ DATATYPE (record pair_t pair_x pair_y)
+
+ [datatype_wrap_t] Theorem
+
+ ⊢ DATATYPE (record wrap_t wrap_val)
+
+ [pair_t_11] Theorem
+
+ ⊢ ∀a0 a1 a0' a1'. pair_t a0 a1 = pair_t a0' a1' ⇔ a0 = a0' ∧ a1 = a1'
+
+ [pair_t_Axiom] Theorem
+
+ ⊢ ∀f. ∃fn. ∀a0 a1. fn (pair_t a0 a1) = f a0 a1
+
+ [pair_t_accessors] Theorem
+
+ ⊢ (∀t t0. (pair_t t t0).pair_x = t) ∧
+ ∀t t0. (pair_t t t0).pair_y = t0
+
+ [pair_t_accfupds] Theorem
+
+ ⊢ (∀p f. (p with pair_y updated_by f).pair_x = p.pair_x) ∧
+ (∀p f. (p with pair_x updated_by f).pair_y = p.pair_y) ∧
+ (∀p f. (p with pair_x updated_by f).pair_x = f p.pair_x) ∧
+ ∀p f. (p with pair_y updated_by f).pair_y = f p.pair_y
+
+ [pair_t_case_cong] Theorem
+
+ ⊢ ∀M M' f.
+ M = M' ∧ (∀a0 a1. M' = pair_t a0 a1 ⇒ f a0 a1 = f' a0 a1) ⇒
+ pair_t_CASE M f = pair_t_CASE M' f'
+
+ [pair_t_case_eq] Theorem
+
+ ⊢ pair_t_CASE x f = v ⇔ ∃t t0. x = pair_t t t0 ∧ f t t0 = v
+
+ [pair_t_component_equality] Theorem
+
+ ⊢ ∀p1 p2. p1 = p2 ⇔ p1.pair_x = p2.pair_x ∧ p1.pair_y = p2.pair_y
+
+ [pair_t_fn_updates] Theorem
+
+ ⊢ (∀f t t0. pair_t t t0 with pair_x updated_by f = pair_t (f t) t0) ∧
+ ∀f t t0. pair_t t t0 with pair_y updated_by f = pair_t t (f t0)
+
+ [pair_t_fupdcanon] Theorem
+
+ ⊢ ∀p g f.
+ p with <|pair_y updated_by f; pair_x updated_by g|> =
+ p with <|pair_x updated_by g; pair_y updated_by f|>
+
+ [pair_t_fupdcanon_comp] Theorem
+
+ ⊢ (∀g f.
+ pair_y_fupd f ∘ pair_x_fupd g = pair_x_fupd g ∘ pair_y_fupd f) ∧
+ ∀h g f.
+ pair_y_fupd f ∘ pair_x_fupd g ∘ h =
+ pair_x_fupd g ∘ pair_y_fupd f ∘ h
+
+ [pair_t_fupdfupds] Theorem
+
+ ⊢ (∀p g f.
+ p with <|pair_x updated_by f; pair_x updated_by g|> =
+ p with pair_x updated_by f ∘ g) ∧
+ ∀p g f.
+ p with <|pair_y updated_by f; pair_y updated_by g|> =
+ p with pair_y updated_by f ∘ g
+
+ [pair_t_fupdfupds_comp] Theorem
+
+ ⊢ ((∀g f. pair_x_fupd f ∘ pair_x_fupd g = pair_x_fupd (f ∘ g)) ∧
+ ∀h g f.
+ pair_x_fupd f ∘ pair_x_fupd g ∘ h = pair_x_fupd (f ∘ g) ∘ h) ∧
+ (∀g f. pair_y_fupd f ∘ pair_y_fupd g = pair_y_fupd (f ∘ g)) ∧
+ ∀h g f. pair_y_fupd f ∘ pair_y_fupd g ∘ h = pair_y_fupd (f ∘ g) ∘ h
+
+ [pair_t_induction] Theorem
+
+ ⊢ ∀P. (∀t t0. P (pair_t t t0)) ⇒ ∀p. P p
+
+ [pair_t_literal_11] Theorem
+
+ ⊢ ∀t01 t1 t02 t2.
+ <|pair_x := t01; pair_y := t1|> = <|pair_x := t02; pair_y := t2|> ⇔
+ t01 = t02 ∧ t1 = t2
+
+ [pair_t_literal_nchotomy] Theorem
+
+ ⊢ ∀p. ∃t0 t. p = <|pair_x := t0; pair_y := t|>
+
+ [pair_t_nchotomy] Theorem
+
+ ⊢ ∀pp. ∃t t0. pp = pair_t t t0
+
+ [pair_t_updates_eq_literal] Theorem
+
+ ⊢ ∀p t0 t.
+ p with <|pair_x := t0; pair_y := t|> =
+ <|pair_x := t0; pair_y := t|>
+
+ [wrap_t_11] Theorem
+
+ ⊢ ∀a a'. wrap_t a = wrap_t a' ⇔ a = a'
+
+ [wrap_t_Axiom] Theorem
+
+ ⊢ ∀f. ∃fn. ∀a. fn (wrap_t a) = f a
+
+ [wrap_t_accessors] Theorem
+
+ ⊢ ∀t. (wrap_t t).wrap_val = t
+
+ [wrap_t_accfupds] Theorem
+
+ ⊢ ∀w f. (w with wrap_val updated_by f).wrap_val = f w.wrap_val
+
+ [wrap_t_case_cong] Theorem
+
+ ⊢ ∀M M' f.
+ M = M' ∧ (∀a. M' = wrap_t a ⇒ f a = f' a) ⇒
+ wrap_t_CASE M f = wrap_t_CASE M' f'
+
+ [wrap_t_case_eq] Theorem
+
+ ⊢ wrap_t_CASE x f = v ⇔ ∃t. x = wrap_t t ∧ f t = v
+
+ [wrap_t_component_equality] Theorem
+
+ ⊢ ∀w1 w2. w1 = w2 ⇔ w1.wrap_val = w2.wrap_val
+
+ [wrap_t_fn_updates] Theorem
+
+ ⊢ ∀f t. wrap_t t with wrap_val updated_by f = wrap_t (f t)
+
+ [wrap_t_fupdfupds] Theorem
+
+ ⊢ ∀w g f.
+ w with <|wrap_val updated_by f; wrap_val updated_by g|> =
+ w with wrap_val updated_by f ∘ g
+
+ [wrap_t_fupdfupds_comp] Theorem
+
+ ⊢ (∀g f. wrap_val_fupd f ∘ wrap_val_fupd g = wrap_val_fupd (f ∘ g)) ∧
+ ∀h g f.
+ wrap_val_fupd f ∘ wrap_val_fupd g ∘ h = wrap_val_fupd (f ∘ g) ∘ h
+
+ [wrap_t_induction] Theorem
+
+ ⊢ ∀P. (∀t. P (wrap_t t)) ⇒ ∀w. P w
+
+ [wrap_t_literal_11] Theorem
+
+ ⊢ ∀u1 u2. <|wrap_val := u1|> = <|wrap_val := u2|> ⇔ u1 = u2
+
+ [wrap_t_literal_nchotomy] Theorem
+
+ ⊢ ∀w. ∃u. w = <|wrap_val := u|>
+
+ [wrap_t_nchotomy] Theorem
+
+ ⊢ ∀ww. ∃t. ww = wrap_t t
+
+ [wrap_t_updates_eq_literal] Theorem
+
+ ⊢ ∀w u. w with wrap_val := u = <|wrap_val := u|>
+
+
+*)
+end