aboutsummaryrefslogtreecommitdiff
path: root/Sum.thy
blob: a1c0d34479aeb35673577c09bc561d0b7a09dd4b (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
(********
Isabelle/HoTT: Dependent sum (dependent pair)
Feb 2019

********)

theory Sum
imports HoTT_Base

begin

axiomatization
  Sum    :: "[t, t ⇒ t] ⇒ t" and
  pair   :: "[t, t] ⇒ t"  ("(2<_,/ _>)") and
  indSum :: "[t ⇒ t, [t, t] ⇒ t, t] ⇒ t"

syntax
  "_Sum"  :: "[idt, t, t] ⇒ t"  ("(2∑'(_: _')./ _)" 20)
  "_Sum'" :: "[idt, t, t] ⇒ t"  ("(2∑_: _./ _)" 20)
translations
  "∑(x: A). B"  "(CONST Sum) A (λx. B)"
  "∑x: A. B"  "(CONST Sum) A (λx. B)"

abbreviation Pair :: "[t, t] ⇒ t"  (infixr "×" 50)
  where "A × B ≡ ∑_: A. B"

axiomatization where
 ‹Type rules›

  Sum_form: "⟦A: U i; ⋀x. x: A ⟹ B x: U i⟧ ⟹ ∑x: A. B x: U i" and

  Sum_intro: "⟦⋀x. x: A ⟹ B x: U i; a: A; b: B a⟧ ⟹ <a, b>: ∑x: A. B x" and

  Sum_elim: "⟦
    p: ∑x: A. B x;
    C: ∑x: A. B x ↝ U i;
    ⋀x y. ⟦x: A; y: B x⟧ ⟹ f x y: C <x,y> ⟧ ⟹ indSum C f p: C p" and

  Sum_cmp: "⟦
    a: A;
    b: B a;
    B: A ↝ U i;
    C: ∑x: A. B x ↝ U i;
    ⋀x y. ⟦x: A; y: B x⟧ ⟹ f x y: C <x,y> ⟧ ⟹ indSum C f <a, b> ≡ f a b" and

 ‹Congruence rules›

  Sum_form_eq: "⟦A: U i; B: A ↝ U i; C: A ↝ U i; ⋀x. x: A ⟹ B x ≡ C x⟧
    ⟹ ∑x: A. B x ≡ ∑x: A. C x"

lemmas Sum_form [form]
lemmas Sum_routine [intro] = Sum_form Sum_intro Sum_elim
lemmas Sum_comp [comp] = Sum_cmp
lemmas Sum_cong [cong] = Sum_form_eq

end