From 3922e24270518be67192ad6928bb839132c74c07 Mon Sep 17 00:00:00 2001 From: Josh Chen Date: Wed, 23 Sep 2020 17:03:42 +0200 Subject: Basic experiments adding reduction to the type checker --- hott/Equivalence.thy | 48 ++++++------------------------------------------ 1 file changed, 6 insertions(+), 42 deletions(-) (limited to 'hott/Equivalence.thy') diff --git a/hott/Equivalence.thy b/hott/Equivalence.thy index a57ed44..99300a0 100644 --- a/hott/Equivalence.thy +++ b/hott/Equivalence.thy @@ -144,8 +144,6 @@ Lemma (def) commute_homotopy: apply (transport eq: pathcomp_refl, transport eq: refl_pathcomp) by refl -\ \TODO: *Really* need normalization during type-checking and better equality - type rewriting to do the proof below properly\ Corollary (def) commute_homotopy': assumes "A: U i" @@ -154,21 +152,18 @@ Corollary (def) commute_homotopy': "H: f ~ (id A)" shows "H (f x) = f [H x]" proof - + (*FIXME: Bug; if the following type declaration isn't made then bad things + happen on the next lines.*) from \H: f ~ id A\ have [type]: "H: \x: A. f x = x" by (reduce add: homotopy_def) - have *: "(id A)[H x]: f x = x" - by (rewrite at "\ = _" id_comp[symmetric], - rewrite at "_ = \" id_comp[symmetric]) - have "H (f x) \ H x = H (f x) \ (id A)[H x]" - by (rule left_whisker, fact *, transport eq: ap_id) (reduce+, refl) + by (rule left_whisker, transport eq: ap_id, refl) also have [simplified id_comp]: "H (f x) \ (id A)[H x] = f[H x] \ H x" by (rule commute_homotopy) - finally have *: "{}" using * by this + finally have "{}" by this - show "H (f x) = f [H x]" - by pathcomp_cancelr (fact, typechk+) + thus "H (f x) = f [H x]" by pathcomp_cancelr (fact, typechk+) qed @@ -309,23 +304,11 @@ Lemma (def) is_qinv_if_is_biinv: assumes "A: U i" "B: U i" "f: A \ B" shows "is_biinv f \ is_qinv f" apply intro - - text \Split the hypothesis \<^term>\is_biinv f\ into its components and name them.\ unfolding is_biinv_def apply elims focus vars _ _ _ g H1 h H2 - text \Need to give the required function and homotopies.\ apply (rule is_qinvI) - text \We claim that \<^term>\g\ is a quasi-inverse to \<^term>\f\.\ \<^item> by (fact \g: _\) - - text \The first part \<^prop>\?H1: g \ f ~ id A\ is given by \<^term>\H1\.\ \<^item> by (fact \H1: _\) - - text \ - It remains to prove \<^prop>\?H2: f \ g ~ id B\. First show that \g ~ h\, - then the result follows from @{thm \H2: f \ h ~ id B\}. Here a proof - block is used for calculational reasoning. - \ \<^item> proof - have "g ~ g \ (id B)" by reduce refl also have ".. ~ g \ f \ h" by rhtpy (rule \H2:_\[symmetric]) @@ -437,7 +420,7 @@ Lemma (def) equiv_if_equal: by (rule lift_universe_codomain, rule Ui_in_USi) \<^enum> vars A using [[solve_side_conds=1]] - apply (subst transport_comp) + apply (rewrite transport_comp) \ by (rule Ui_in_USi) \ by reduce (rule in_USi_if_in_Ui) \ by reduce (rule id_is_biinv) @@ -452,24 +435,5 @@ Lemma (def) equiv_if_equal: by (rule lift_universe_codomain, rule Ui_in_USi) done -(*Uncomment this to see all implicits from here on. -no_translations - "f x" \ "f `x" - "x = y" \ "x =\<^bsub>A\<^esub> y" - "g \ f" \ "g \\<^bsub>A\<^esub> f" - "p\" \ "CONST pathinv A x y p" - "p \ q" \ "CONST pathcomp A x y z p q" - "fst" \ "CONST Spartan.fst A B" - "snd" \ "CONST Spartan.snd A B" - "f[p]" \ "CONST ap A B x y f p" - "trans P p" \ "CONST transport A P x y p" - "trans_const B p" \ "CONST transport_const A B x y p" - "lift P p u" \ "CONST pathlift A P x y p u" - "apd f p" \ "CONST Identity.apd A P f x y p" - "f ~ g" \ "CONST homotopy A B f g" - "is_qinv f" \ "CONST Equivalence.is_qinv A B f" - "is_biinv f" \ "CONST Equivalence.is_biinv A B f" -*) - end -- cgit v1.2.3