From d7b9fc814d0fcb296156143a5d9bc3f5d9ad9ad1 Mon Sep 17 00:00:00 2001 From: Josh Chen Date: Tue, 11 Sep 2018 19:23:21 +0200 Subject: Add the univalence axiom --- Univalence.thy | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 64 insertions(+), 4 deletions(-) (limited to 'Univalence.thy') diff --git a/Univalence.thy b/Univalence.thy index e16ea03..80325f3 100644 --- a/Univalence.thy +++ b/Univalence.thy @@ -76,7 +76,8 @@ section \idtoeqv and the univalence axiom\ definition idtoeqv :: Term where "idtoeqv \ \<^bold>\p. = (\A. <\x. refl x>, \x. refl x>>) p>" -text "Equal types are equivalent. The proof uses universes." + +text "We prove that equal types are equivalent. The proof is long and uses universes." theorem assumes "A: U i" and "B: U i" @@ -95,7 +96,7 @@ proof show "\x. x: U i \ x: U S i" by (elim U_cumulative) standard show "U i: U S i" by (rule U_hierarchy) standard qed fact+ - + show "ind\<^sub>= (\A. <\x. refl x>, \x. refl x>>) p: isequiv (transport p)" proof (rule Equal_elim[where ?C="\_ _ p. isequiv (transport p)"]) fix A assume asm: "A: U i" @@ -108,8 +109,67 @@ proof show "<\x. refl x>, \x. refl x>>: (\g:A \ A. g \ (transport (refl A)) ~ id) \ (\g:A \ A. (transport (refl A)) \ g ~ id)" - proof (derive lems: asm homotopic_def transport_def) - show "id: A \ A" by (routine lems: asm) + proof (subst (1 2) transport_comp) + show "U i: U S i" by (rule U_hierarchy) standard + show "U i: U S i" by (rule U_hierarchy) standard + + show "<\x. refl x>, \x. refl x>>: + (\g:A \ A. g \ id ~ id) \ (\g:A \ A. id \ g ~ id)" + proof + show "\g:A \ A. id \ g ~ id: U i" + proof (derive lems: asm homotopic_def) + fix g assume asm': "g: A \ A" + show *: "id \ g: A \ A" by (derive lems: asm asm' compose_def) + show "\x:A. ((id \ g)`x) =\<^sub>A (id`x): U i" by (derive lems: asm *) + qed (routine lems: asm) + + show "\x. refl x>: \g:A \ A. id \ g ~ id" + proof + fix g assume asm': "g: A \ A" + show "id \ g ~ id: U i" + proof (derive lems: homotopic_def) + show *: "id \ g: A \ A" by (derive lems: asm asm' compose_def) + show "\x:A. ((id \ g)`x) =\<^sub>A (id`x): U i" by (derive lems: asm *) + qed (routine lems: asm) + next + show "\<^bold>\x. refl x: id \ id ~ id" + proof compute + show "\<^bold>\x. refl x: id ~ id" by (subst homotopic_def) (derive lems: asm) + qed (rule asm) + qed (routine lems: asm) + + show "\x. refl x>: \g:A \ A. g \ id ~ id" + proof + fix g assume asm': "g: A \ A" + show "g \ id ~ id: U i" by (derive lems: asm asm' homotopic_def compose_def) + next + show "\<^bold>\x. refl x: id \ id ~ id" + proof compute + show "\<^bold>\x. refl x: id ~ id" by (subst homotopic_def) (derive lems: asm) + qed (rule asm) + qed (routine lems: asm) + qed + qed fact+ + qed + next + + fix A' B' p' assume asm: "A': U i" "B': U i" "p': A' =[U i] B'" + show "isequiv (transport p'): U i" + proof (rule isequiv_type) + show "transport p': A' \ B'" by (derive lems: asm transport_def) + qed fact+ + qed fact+ + qed + next + + show "A =[U i] B: U (S i)" by (derive lems: assms | rule U_hierarchy)+ +qed + + +text "The univalence axiom:" + +axiomatization univalence :: Term where + ua: "univalence: isequiv idtoeqv" end -- cgit v1.2.3