From 962fc96123039b53b9c6946796e909fb50ec9004 Mon Sep 17 00:00:00 2001 From: Josh Chen Date: Mon, 13 Aug 2018 10:37:20 +0200 Subject: rcompose done --- EqualProps.thy | 78 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 60 insertions(+), 18 deletions(-) (limited to 'EqualProps.thy') diff --git a/EqualProps.thy b/EqualProps.thy index 9d23a99..d645fb6 100644 --- a/EqualProps.thy +++ b/EqualProps.thy @@ -15,20 +15,20 @@ begin section \Symmetry / Path inverse\ -definition inv :: "[Term, Term] \ (Term \ Term)" ("(1inv[_,/ _])") - where "inv[x,y] \ \p. ind\<^sub>= (\x. refl(x)) x y p" +axiomatization inv :: "Term \ Term" ("_\" [1000] 1000) + where inv_def: "inv \ \p. ind\<^sub>= (\x. refl(x)) p" lemma inv_type: - assumes "A : U(i)" and "x : A" and "y : A" and "p: x =\<^sub>A y" shows "inv[x,y](p): y =\<^sub>A x" + assumes "A : U(i)" and "x : A" and "y : A" and "p: x =\<^sub>A y" shows "p\: y =\<^sub>A x" unfolding inv_def -proof +proof (rule Equal_elim[where ?x=x and ?y=y]) \ \Path induction\ show "\x y. \x: A; y: A\ \ y =\<^sub>A x: U(i)" using assms(1) .. show "\x. x: A \ refl x: x =\<^sub>A x" .. qed (fact assms)+ -lemma inv_comp: assumes "A : U(i)" and "a : A" shows "inv[a,a](refl(a)) \ refl(a)" +lemma inv_comp: assumes "A : U(i)" and "a : A" shows "(refl a)\ \ refl(a)" unfolding inv_def proof show "\x. x: A \ refl x: x =\<^sub>A x" .. @@ -38,24 +38,66 @@ qed (fact assms) section \Transitivity / Path composition\ -text "``Raw'' composition function, of type \\x,y:A. x =\<^sub>A y \ (\z:A. y =\<^sub>A z \ x =\<^sub>A z)\." +text " + Raw composition function, of type \\x:A. \y:A. x =\<^sub>A y \ (\z:A. y =\<^sub>A z \ x =\<^sub>A z)\ polymorphic over the type \A\. +" + +axiomatization rcompose :: Term where + rcompose_def: "rcompose \ \<^bold>\x y p. ind\<^sub>= (\_. \<^bold>\z q. ind\<^sub>= (\x. refl(x)) q) p" + -definition rcompose :: "Term \ Term" ("(1rcompose[_])") - where "rcompose[A] \ \<^bold>\x:A. \<^bold>\y:A. \<^bold>\p:(x =\<^sub>A y). indEqual[A] - (\x y _. \z:A. y =\<^sub>A z \ x =\<^sub>A z) - (\x. \<^bold>\z:A. \<^bold>\p:(x =\<^sub>A z). indEqual[A](\x z _. x =\<^sub>A z) (\x. refl(x)) x z p) - x y p" +lemma rcompose_type: + assumes "A: U(i)" + shows "rcompose: \x:A. \y:A. x =\<^sub>A y \ (\z:A. y =\<^sub>A z \ x =\<^sub>A z)" +unfolding rcompose_def +proof + show "\x. x: A \ + \<^bold>\y p. ind\<^sub>= (\_. \<^bold>\z p. ind\<^sub>= refl p) p: \y:A. x =\<^sub>A y \ (\z:A. y =\<^sub>A z \ x =\<^sub>A z)" + proof + show "\x y. \x: A ; y: A\ \ + \<^bold>\p. ind\<^sub>= (\_. \<^bold>\z p. ind\<^sub>= refl p) p: x =\<^sub>A y \ (\z:A. y =\<^sub>A z \ x =\<^sub>A z)" + proof + { fix x y p assume asm: "x: A" "y: A" "p: x =\<^sub>A y" + show "ind\<^sub>= (\_. \<^bold>\z p. ind\<^sub>= refl p) p: \z:A. y =[A] z \ x =[A] z" + proof (rule Equal_elim[where ?x=x and ?y=y]) + show "\x y. \x: A; y: A\ \ \z:A. y =\<^sub>A z \ x =\<^sub>A z: U(i)" + proof + show "\x y z. \x: A; y: A; z: A\ \ y =\<^sub>A z \ x =\<^sub>A z: U(i)" + by (rule Prod_form Equal_form assms | assumption)+ + qed (rule assms) + + show "\x. x: A \ \<^bold>\z p. ind\<^sub>= refl p: \z:A. x =\<^sub>A z \ x =\<^sub>A z" + proof + show "\x z. \x: A; z: A\ \ \<^bold>\p. ind\<^sub>= refl p: x =\<^sub>A z \ x =\<^sub>A z" + proof + { fix x z p assume asm: "x: A" "z: A" "p: x =\<^sub>A z" + show "ind\<^sub>= refl p: x =[A] z" + proof (rule Equal_elim[where ?x=x and ?y=z]) + show "\x y. \x: A; y: A\ \ x =\<^sub>A y: U(i)" by standard (rule assms) + show "\x. x: A \ refl x: x =\<^sub>A x" .. + qed (fact asm)+ } + show "\x z. \x: A; z: A\ \ x =\<^sub>A z: U(i)" by standard (rule assms) + qed + qed (rule assms) + qed (rule asm)+ } + show "\x y. \x: A; y: A\ \ x =\<^sub>A y: U(i)" by standard (rule assms) + qed + qed (rule assms) +qed (fact assms) +corollary + assumes "A: U(i)" "x: A" "y: A" "z: A" "p: x =\<^sub>A y" "q: y =\<^sub>A z" + shows "rcompose`x`y`p`z`q: x =\<^sub>A z" + by standard+ (rule rcompose_type assms)+ -definition compose :: "[Term, Term, Term] \ [Term, Term] \ Term" ("(1compose[ _,/ _,/ _])") - where "compose[x,y,z] \ \p." +axiomatization compose :: "[Term, Term] \ Term" (infixl "\" 60) where + compose_comp: "\ + A: U(i); + x: A; y: A; z: A; + p: x =\<^sub>A y; q: y =\<^sub>A z + \ \ p \ q \ rcompose`x`y`p`z`q" -lemma compose_type: - assumes "A : U(i)" and "x : A" and "y : A" and "z : A" - shows "compose[A,x,y,z] : x =\<^sub>A y \ y =\<^sub>A z \ x =\<^sub>A z" - unfolding rcompose_def - by (derive lems: assms) lemma compose_comp: assumes "A : U(i)" and "a : A" shows "compose[A,a,a,a]`refl(a)`refl(a) \ refl(a)" -- cgit v1.2.3