@@ -10,6 +10,7 @@ Module Type REL.
10
10
Parameter inter : forall n, R n -> R n -> R n.
11
11
Parameter times : forall m n, R m -> R n -> R (m + n).
12
12
Parameter sum : forall m n, R m -> (T m -> T n) -> R n.
13
+ Parameter rsum : forall m n, R m -> (T m -> R n) -> R n.
13
14
Parameter sel : forall n, R n -> (T n -> bool) -> R n.
14
15
Parameter flat : forall n, R n -> R n.
15
16
Parameter supp : forall n, R n -> list (T n).
@@ -20,15 +21,21 @@ Module Type REL.
20
21
Implicit Arguments inter [n].
21
22
Implicit Arguments times [m n].
22
23
Implicit Arguments sum [m n].
24
+ Implicit Arguments rsum [m n].
23
25
Implicit Arguments sel [n].
24
26
Implicit Arguments flat [n].
25
27
Implicit Arguments supp [n].
26
28
27
29
Definition card := fun n S => memb (@sum n 0 S (fun _ => Vector.nil _)) (Vector.nil _).
28
30
Implicit Arguments card [n].
29
31
30
- Parameter Rnil : R 0 .
32
+ Parameter Rnil : forall n, R n .
31
33
Parameter Rone : R 0.
34
+ Parameter Rsingle : forall n, T n -> R n.
35
+
36
+ Implicit Arguments Rnil [n].
37
+ Implicit Arguments Rsingle [n].
38
+
32
39
(* generalized cartesian product of m relations, each taken with its arity n *)
33
40
Fixpoint prod (Rl : list { n : nat & R n })
34
41
: R (list_sum (List.map (projT1 (P := fun n => R n)) Rl)) :=
@@ -46,16 +53,8 @@ Module Type REL.
46
53
Hypothesis V_dec : forall (v w : V), {v = w} + {v <> w}.
47
54
Hypothesis V_eqb_eq : forall (v w : V), V_eqb v w = true <-> v = w.
48
55
Parameter T_dec : forall n, forall (x y : T n), {x = y} + {x <> y}.
49
- (*
50
- Proof.
51
- intros. eapply Vector.eq_dec. apply V_eqb_eq.
52
- Qed.
53
- *)
56
+
54
57
Parameter T_eqb_eq : forall n, forall (v w : T n), T_eqb v w = true <-> v = w.
55
- (* Proof.
56
- intros. eapply Vector.eqb_eq. apply V_eqb_eq.
57
- Qed.
58
- *)
59
58
60
59
Parameter p_fs : forall n, forall r : R n, forall t, memb r t > 0 -> List.In t (supp r).
61
60
Parameter p_fs_r : forall n, forall r : R n, forall t, List.In t (supp r) -> memb r t > 0.
@@ -67,11 +66,15 @@ Module Type REL.
67
66
t = Vector.append t1 t2 -> memb (times r1 r2) t = memb r1 t1 * memb r2 t2.
68
67
Parameter p_sum : forall m n, forall r : R m, forall f : T m -> T n, forall t,
69
68
memb (sum r f) t = list_sum (List.map (memb r) (filter (fun x => T_eqb (f x) t) (supp r))).
69
+ Parameter p_rsum : forall m n, forall r : R m, forall f : T m -> R n, forall t,
70
+ memb (rsum r f) t = list_sum (List.map (fun t0 => memb r t0 * memb (f t0) t) (supp r)).
70
71
Parameter p_self : forall n, forall r : R n, forall p t, p t = false -> memb (sel r p) t = 0.
71
72
Parameter p_selt : forall n, forall r : R n, forall p t, p t = true -> memb (sel r p) t = memb r t.
72
73
Parameter p_flat : forall n, forall r : R n, forall t, memb (flat r) t = flatnat (memb r t).
73
- Parameter p_nil : forall r, memb Rnil r = 0.
74
- Parameter p_one : forall r, memb Rone r = 1.
74
+ Parameter p_nil : forall n (t : T n), memb Rnil t = 0.
75
+ Parameter p_one : forall t, memb Rone t = 1.
76
+ Parameter p_single : forall n (t : T n), memb (Rsingle t) t = 1.
77
+ Parameter p_single_neq : forall n (t1 t2 : T n), t1 <> t2 -> memb (Rsingle t1) t2 = 0.
75
78
76
79
Parameter p_ext : forall n, forall r s : R n, (forall t, memb r t = memb s t) -> r = s.
77
80
0 commit comments