aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Chen2018-08-04 22:59:51 +0200
committerJosh Chen2018-08-04 22:59:51 +0200
commitf0234b685d09a801f83a7db91c94380873832bd5 (patch)
tree9e08023fb343440f926b5fbd4e15225622e20c92
parent0daf45af7c5489c34336a31f5054b9271685dacf (diff)
Coproduct
Diffstat (limited to '')
-rw-r--r--Coprod.thy61
1 files changed, 61 insertions, 0 deletions
diff --git a/Coprod.thy b/Coprod.thy
new file mode 100644
index 0000000..75e621a
--- /dev/null
+++ b/Coprod.thy
@@ -0,0 +1,61 @@
+(* Title: HoTT/Coprod.thy
+ Author: Josh Chen
+ Date: Aug 2018
+
+Coproduct type.
+*)
+
+theory Coprod
+ imports HoTT_Base
+begin
+
+
+section \<open>Constants and type rules\<close>
+
+axiomatization
+ Coprod :: "[Term, Term] \<Rightarrow> Term" (infixr "+" 50) and
+ inl :: "Term \<Rightarrow> Term" ("(1inl'(_'))") and
+ inr :: "Term \<Rightarrow> Term" ("(1inr'(_'))") and
+ indCoprod :: "[Term, Term, Typefam, Term \<Rightarrow> Term, Term \<Rightarrow> Term, Term] \<Rightarrow> Term" ("(1ind\<^sub>+[_,/ _])")
+where
+ Coprod_form: "\<And>i A B. \<lbrakk>A : U(i); B : U(i)\<rbrakk> \<Longrightarrow> A + B : U(i)"
+and
+ Coprod_intro1: "\<And>A B a b. \<lbrakk>a : A; b : B\<rbrakk> \<Longrightarrow> inl(a) : A + B"
+and
+ Coprod_intro2: "\<And>A B a b. \<lbrakk>a : A; b : B\<rbrakk> \<Longrightarrow> inr(b) : A + B"
+and
+ Coprod_elim: "\<And>i A B C c d e. \<lbrakk>
+ C: A + B \<longrightarrow> U(i);
+ \<And>x. x : A \<Longrightarrow> c x : C inl(x);
+ \<And>y. y : B \<Longrightarrow> d y : C inr(y);
+ e : A + B
+ \<rbrakk> \<Longrightarrow> ind\<^sub>+[A,B] C c d e : C e"
+and
+ Coprod_comp1: "\<And>i A B C c d a. \<lbrakk>
+ C: A + B \<longrightarrow> U(i);
+ \<And>x. x : A \<Longrightarrow> c x : C inl(x);
+ \<And>y. y : B \<Longrightarrow> d y : C inr(y);
+ a : A
+ \<rbrakk> \<Longrightarrow> ind\<^sub>+[A,B] C c d inl(a) \<equiv> c a"
+and
+ Coprod_comp2: "\<And>i A B C c d b. \<lbrakk>
+ C: A + B \<longrightarrow> U(i);
+ \<And>x. x : A \<Longrightarrow> c x : C inl(x);
+ \<And>y. y : B \<Longrightarrow> d y : C inr(y);
+ b : B
+ \<rbrakk> \<Longrightarrow> ind\<^sub>+[A,B] C c d inr(b) \<equiv> d b"
+
+text "Admissible formation inference rules:"
+
+axiomatization where
+ Coprod_form_cond1: "\<And>i A B. A + B : U(i) \<Longrightarrow> A : U(i)"
+and
+ Coprod_form_cond2: "\<And>i A B. A + B : U(i) \<Longrightarrow> B : U(i)"
+
+lemmas Coprod_rules [intro] = Coprod_form Coprod_intro1 Coprod_intro2
+ Coprod_elim Coprod_comp1 Coprod_comp2
+lemmas Coprod_form_conds [intro] = Coprod_form_cond1 Coprod_form_cond2
+lemmas Coprod_comps [comp] = Coprod_comp1 Coprod_comp2
+
+
+end \ No newline at end of file