blob: a68f79b9e598a9c1b28c98aaa535ecdfd500caa6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
(* Title: HoTT/ProdProps.thy
Author: Josh Chen
Properties of the dependent product
*)
theory ProdProps
imports
HoTT_Methods
Prod
begin
section ‹Composition›
text "
The proof of associativity needs some guidance; it involves telling Isabelle to use the correct rule for ∏-type definitional equality, and the correct substitutions in the subgoals thereafter.
"
lemma compose_assoc:
assumes "A: U i" and "f: A → B" "g: B → C" "h: ∏x:C. D x"
shows "(h ∘ g) ∘ f ≡ h ∘ (g ∘ f)"
proof (subst (0 1 2 3) compose_def)
show "❙λx. (❙λy. h`(g`y))`(f`x) ≡ ❙λx. h`((❙λy. g`(f`y))`x)"
proof (subst Prod_eq)
― ‹Todo: set the Simplifier (or other simplification methods) up to use ‹Prod_eq›!›
show "⋀x. x: A ⟹ (❙λy. h`(g`y))`(f`x) ≡ h`((❙λy. g`(f`y))`x)"
proof compute
show "⋀x. x: A ⟹ h`(g`(f`x)) ≡ h`((❙λy. g`(f`y))`x)"
proof compute
show "⋀x. x: A ⟹ g`(f`x): C" by (routine lems: assms)
qed
show "⋀x. x: B ⟹ h`(g`x): D (g`x)" by (routine lems: assms)
qed (routine lems: assms)
qed fact
qed
lemma compose_comp:
assumes "A: U i" and "⋀x. x: A ⟹ b x: B" and "⋀x. x: B ⟹ c x: C x"
shows "(❙λx. c x) ∘ (❙λx. b x) ≡ ❙λx. c (b x)"
proof (subst compose_def, subst Prod_eq)
show "⋀a. a: A ⟹ (❙λx. c x)`((❙λx. b x)`a) ≡ (❙λx. c (b x))`a"
proof compute
show "⋀a. a: A ⟹ c ((❙λx. b x)`a) ≡ (❙λx. c (b x))`a"
by (derive lems: assms)
qed (routine lems: assms)
qed (derive lems: assms)
text "Set up the ‹compute› method to automatically simplify function compositions."
lemmas compose_comp [comp]
end
|