From 710f314a9ccb84cdd9df9bc8bf52482b8d1f5a56 Mon Sep 17 00:00:00 2001 From: Josh Chen Date: Mon, 3 Aug 2020 13:34:53 +0200 Subject: (FEAT) SIDE_CONDS tactical has additional argument specifying how many initial subgoals to skip applying the side condition solver to. (FEAT) `intro`, `intros` methods for "logical introduction rules" (as opposed to typechecking `intr` attribute), only works on conclusions with rigid type. (FEAT) CREPEAT_N bounded repetition tactical, used in `intros n` method. --- hott/Equivalence.thy | 20 ++++++-------------- hott/Identity.thy | 2 +- 2 files changed, 7 insertions(+), 15 deletions(-) (limited to 'hott') diff --git a/hott/Equivalence.thy b/hott/Equivalence.thy index b29a213..a4eea93 100644 --- a/hott/Equivalence.thy +++ b/hott/Equivalence.thy @@ -40,7 +40,7 @@ Lemma (def) homotopy_refl [refl]: "f: \x: A. B x" shows "f ~ f" unfolding homotopy_def - by intros + by intros fact Lemma (def) hsym: assumes @@ -205,11 +205,8 @@ Lemma is_qinv_components [type]: Lemma (def) qinv_is_qinv: assumes "A: U i" "B: U i" "f: A \ B" "pf: is_qinv f" shows "is_qinv (fst pf)" -using [[debug_typechk]] - using [[solve_side_conds=2]] + using \pf:_\[unfolded is_qinv_def] \ \Should be unfolded by the typechecker\ apply (rule is_qinvI) - back \ \Typechecking/inference goes too far here. Problem would likely be - solved with definitional unfolding\ \<^item> by (fact \f:_\) \<^item> by (rule sec_of_is_qinv) \<^item> by (rule ret_of_is_qinv) @@ -233,7 +230,7 @@ Lemma (def) funcomp_is_qinv: also have ".. ~ id A" by reduce fact finally show "{}" by this qed - + show "(g \ f) \ finv \ ginv ~ id C" proof - have "(g \ f) \ finv \ ginv ~ g \ (f \ finv) \ ginv" by reduce refl @@ -363,11 +360,6 @@ Lemma (def) equivalence_refl: show "is_biinv (id A)" by (rule is_biinv_if_is_qinv) (rule id_is_qinv) qed typechk -text \ - The following could perhaps be easier with transport (but then I think we need - univalence?)... -\ - Lemma (def) equivalence_symmetric: assumes "A: U i" "B: U i" shows "A \ B \ B \ A" @@ -408,8 +400,8 @@ Lemma by (eq p) (rule equivalence_refl) text \ - The following proof is wordy because (1) the typechecker doesn't rewrite, and - (2) we don't yet have universe automation. + The following proof is wordy because (1) the typechecker doesn't normalize, + and (2) we don't yet have universe level inference. \ Lemma (def) equiv_if_equal: @@ -417,7 +409,7 @@ Lemma (def) equiv_if_equal: "A: U i" "B: U i" "p: A =\<^bsub>U i\<^esub> B" shows ": A \ B" unfolding equivalence_def - apply intros defer + apply intro defer \<^item> apply (eq p) \<^enum> vars A B apply (rewrite at A in "A \ B" id_comp[symmetric]) diff --git a/hott/Identity.thy b/hott/Identity.thy index b9ebafb..b06604f 100644 --- a/hott/Identity.thy +++ b/hott/Identity.thy @@ -54,7 +54,7 @@ section \Path induction\ method_setup eq = \Args.term >> (fn tm => K (CONTEXT_METHOD ( - CHEADGOAL o SIDE_CONDS ( + CHEADGOAL o SIDE_CONDS 0 ( CONTEXT_SUBGOAL (fn (goal, i) => fn cst as (ctxt, st) => let val facts = Proof_Context.facts_of ctxt -- cgit v1.2.3