From f39f927579dfac2fc363d4eb9c4777c191143fb3 Mon Sep 17 00:00:00 2001 From: Josh Chen Date: Mon, 18 Feb 2019 11:38:59 +0100 Subject: Partway through associativity proof. Lots to work on to make this more usable. --- Equal.thy | 86 ++++++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 58 insertions(+), 28 deletions(-) (limited to 'Equal.thy') diff --git a/Equal.thy b/Equal.thy index c10e1c2..17c1c99 100644 --- a/Equal.thy +++ b/Equal.thy @@ -23,33 +23,33 @@ translations "a =[A] b" \ "(CONST Eq) A a b" axiomatization where - Equal_form: "\A: U i; a: A; b: A\ \ a =[A] b: U i" and + Eq_form: "\A: U i; a: A; b: A\ \ a =[A] b: U i" and - Equal_intro: "a: A \ (refl a): a =[A] a" and + Eq_intro: "a: A \ (refl a): a =[A] a" and - Equal_elim: "\ + Eq_elim: "\ p: x =[A] y; - x: A; - y: A; + a: A; + b: A; \x. x: A \ f x: C x x (refl x); - \x y. \x: A; y: A\ \ C x y: x =[A] y \ U i \ \ indEq C f x y p : C x y p" and + \x y. \x: A; y: A\ \ C x y: x =[A] y \ U i \ \ indEq C f a b p : C a b p" and - Equal_comp: "\ + Eq_comp: "\ a: A; \x. x: A \ f x: C x x (refl x); \x y. \x: A; y: A\ \ C x y: x =[A] y \ U i \ \ indEq C f a a (refl a) \ f a" -lemmas Equal_form [form] -lemmas Equal_routine [intro] = Equal_form Equal_intro Equal_elim -lemmas Equal_comp [comp] +lemmas Eq_form [form] +lemmas Eq_routine [intro] = Eq_form Eq_intro Eq_elim +lemmas Eq_comp [comp] section \Path induction\ text \We set up rudimentary automation of path induction:\ -method path_ind for x y p :: t = - (rule Equal_elim[where ?x=x and ?y=y and ?p=p]; (fact | assumption)?) +method path_ind for a b p :: t = + (rule Eq_elim[where ?a=a and ?b=b and ?p=p]; (fact | assumption)?) section \Properties of equality\ @@ -120,14 +120,13 @@ lemma pathcomp_type: shows "pathcomp A x y z p q: x =[A] z" unfolding pathcomp_def by (routine add: transitivity assms) -lemma pathcomp_comp: +lemma pathcomp_cmp: assumes "A: U i" and "a: A" shows "pathcomp A a a a (refl a) (refl a) \ refl a" unfolding pathcomp_def by (derive lems: assms) -declare - pathcomp_type [intro] - pathcomp_comp [comp] +lemmas pathcomp_type [intro] +lemmas pathcomp_comp [comp] = pathcomp_cmp section \Higher groupoid structure of types\ @@ -148,23 +147,23 @@ proof (path_ind x y p) by (derive lems: assms) qed (routine add: assms) -schematic_goal pathcomp_invl: +schematic_goal pathcomp_invr: assumes "A: U i" "x: A" "y: A" "p: x =[A] y" - shows "?a: pathcomp A y x y (inv A x y p) p =[y =[A] y] refl(y)" + shows "?a: pathcomp A x y x p (inv A x y p) =[x =[A] x] (refl x)" proof (path_ind x y p) show "\x. x: A \ refl(refl x): - pathcomp A x x x (inv A x x (refl x)) (refl x) =[x =[A] x] (refl x)" + pathcomp A x x x (refl x) (inv A x x (refl x)) =[x =[A] x] (refl x)" by (derive lems: assms) qed (routine add: assms) -schematic_goal pathcomp_right_inv: +schematic_goal pathcomp_invl: assumes "A: U i" "x: A" "y: A" "p: x =[A] y" - shows "?a: pathcomp A x y x p (inv A x y p) =[x =[A] x] (refl x)" + shows "?a: pathcomp A y x y (inv A x y p) p =[y =[A] y] refl(y)" proof (path_ind x y p) show "\x. x: A \ refl(refl x): - pathcomp A x x x (refl x) (inv A x x (refl x)) =[x =[A] x] (refl x)" + pathcomp A x x x (inv A x x (refl x)) (refl x) =[x =[A] x] (refl x)" by (derive lems: assms) qed (routine add: assms) @@ -176,14 +175,45 @@ proof (path_ind x y p) by (derive lems: assms) qed (routine add: assms) +declare[[pretty_pathcomp=false]] + schematic_goal pathcomp_assoc: - fixes x y p - assumes "A: U i" "x: A" "y: A" "z: A" "w: A" and "p: x =[A] y" "q: y =[A] z" "r: z =[A] w" - shows - "?a: + assumes "A: U i" "x: A" "y: A" "z: A" "w: A" "p: x =[A] y" + shows + "?a: \q: y =[A] z. \r: z =[A] w. pathcomp A x y w p (pathcomp A y z w q r) =[x =[A] w] pathcomp A x z w (pathcomp A x y z p q) r" -proof - fix x y p +proof (path_ind x y p) + oops + schematic_goal l: + assumes "A: U i" "x: A" "z: A" "w: A" "q: x =[A] z" + shows + "?a: \r: z =[A] w. pathcomp A x x w (refl x) (pathcomp A y z w q r) =[x =[A] w] + pathcomp A x z w (pathcomp A x x z (refl x) q) r" + proof (path_ind x z q) + oops + schematic_goal l': + assumes "A: U i" "x: A" "w: A" "r: x =[A] w" + shows + "?a: pathcomp A x x w (refl x) (pathcomp A x x w (refl x) r) =[x =[A] w] + pathcomp A x x w (pathcomp A x x x (refl x) (refl x)) r" + proof (path_ind x w r) + show "\x. x: A \ refl(refl x): + pathcomp A x x x (refl x) (pathcomp A x x x (refl x) (refl x)) =[x =[A] x] + pathcomp A x x x (pathcomp A x x x (refl x) (refl x)) (refl x)" + by (derive lems: assms) + qed (routine add: assms) + +(* Possible todo: + implement a custom version of schematic_goal/theorem that exports the derived proof term. +*) + +definition l'_prftm :: "[t, t, t, t] \ t" +where "l'_prftm A x w r\ + indEq + (\a b c. pathcomp A a a b (refl a) (pathcomp A a a b (refl a) c) =[a =[A] b] + pathcomp A a a b (pathcomp A a a a (refl a) (refl a)) c) + (\x. refl (refl x)) x w r" + end -- cgit v1.2.3