Skip to content

Commit 32779d1

Browse files
committed
definition and proofs on <=
1 parent b497f61 commit 32779d1

File tree

5 files changed

+153
-108
lines changed

5 files changed

+153
-108
lines changed

Eq.lp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ require open Stdlib.Set Stdlib.Prop;
44

55
constant symbol = {a} : τ a → τ aProp;
66

7-
notation = infix 1;
7+
notation = infix 10;
88

99
constant symbol eq_refl {a} (xa) : π (x = x);
10-
constant symbol eq_ind {a} {x ya} : π (x = y) → Π p, π (p y) → π (p x);
10+
constant symbol ind_eq {a} {x ya} : π (x = y) → Π p, π (p y) → π (p x);
1111

1212
builtin "eq" ≔ =;
1313
builtin "refl"eq_refl;
14-
builtin "eqind"eq_ind;
14+
builtin "eqind"ind_eq;
1515

1616
// inequality
1717

@@ -21,9 +21,18 @@ notation ≠ infix 1;
2121

2222
// symmetry
2323

24-
opaque symbol eq_sym {a} (x ya) : π (x = y) → π (y = x) ≔
24+
opaque symbol eq_sym {a} (x ya) : π (x = yy = x) ≔
2525
begin
2626
assume a x y xy;
2727
symmetry;
2828
apply xy;
2929
end;
30+
31+
// monotony wrt function application
32+
33+
opaque symbol feq {a b} (fa → τ b) {x ya} : π(x = yf x = f y) ≔
34+
begin
35+
assume a b f x y xy;
36+
apply ind_eq xyz, f z = f y);
37+
reflexivity;
38+
end;

List.lp

Lines changed: 11 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Polymorphic lists
22

3-
require open Stdlib.Set Stdlib.Prop Stdlib.Eq Stdlib.Nat;
3+
require open Stdlib.Set Stdlib.Prop Stdlib.FOL Stdlib.Eq Stdlib.Nat;
44

55
(a:Set) inductive 𝕃:TYPE
66
| □ : 𝕃 a // \Box
@@ -19,13 +19,13 @@ rule τ (list $a) ↪ 𝕃 $a;
1919
symbol length {a} : 𝕃 a → ℕ;
2020

2121
rule length □ ↪ 0
22-
with length (_ ⸬ $l) ↪ suc (length $l);
22+
with length (_ ⸬ $l) ↪ s (length $l);
2323

2424
// Concatenation of two lists
2525

2626
symbol ⋅ {a} : 𝕃 a → 𝕃 a → 𝕃 a;
2727

28-
notationinfix right 5; // \cdot
28+
notationinfix right 15; // \cdot
2929

3030
assert a (x y z:𝕃 a) ⊢ xyzx ⋅ (yz);
3131
assert a x l mxlmx ⸬ (lm);
@@ -40,10 +40,7 @@ begin
4040
// case l = □
4141
reflexivity;
4242
// case l = xl'
43-
assume x l' h;
44-
simplify;
45-
rewrite h;
46-
reflexivity;
43+
assume x l' h; simplify; rewrite h; reflexivity;
4744
end;
4845

4946
rule $m ⋅ □ ↪ $m;
@@ -54,13 +51,9 @@ begin
5451
assume a;
5552
induction;
5653
// case l = □
57-
assume m;
5854
reflexivity;
5955
// case l = xl'
60-
assume x l' h m;
61-
simplify;
62-
rewrite h;
63-
reflexivity;
56+
assume x l' h m; simplify; rewrite h; reflexivity;
6457
end;
6558

6659
rule length ($l ⋅ $m) ↪ length $l + length $m;
@@ -70,13 +63,9 @@ begin
7063
assume a;
7164
induction;
7265
// case l = □
73-
assume m n;
7466
reflexivity;
7567
// case l = xl'
76-
assume x l' h m n;
77-
simplify;
78-
rewrite h;
79-
reflexivity;
68+
assume x l' h m n; simplify; rewrite h; reflexivity;
8069
end;
8170

8271
rule ($l ⋅ $m) ⋅ $n ↪ $l ⋅ ($m ⋅ $n);
@@ -93,14 +82,9 @@ begin
9382
assume a;
9483
induction;
9584
// case l = □
96-
simplify;
97-
assume x;
98-
reflexivity;
85+
simplify; reflexivity;
9986
// case l = ⸬
100-
assume x l' hl' m;
101-
simplify;
102-
rewrite hl';
103-
reflexivity;
87+
assume x l h m; simplify; rewrite h; reflexivity;
10488
end;
10589

10690
rule rev ($l ⋅ $m) ↪ rev $mrev $l;
@@ -112,10 +96,7 @@ begin
11296
// case l = □
11397
reflexivity;
11498
// case l = ⸬
115-
assume x l' hl';
116-
simplify;
117-
rewrite hl';
118-
reflexivity;
99+
assume x l h; simplify; rewrite h; reflexivity;
119100
end;
120101

121102
rule rev (rev $l) ↪ $l;
@@ -125,13 +106,9 @@ begin
125106
assume a;
126107
induction;
127108
// case l = □
128-
simplify;
129-
reflexivity;
109+
simplify; reflexivity;
130110
// case l = ⸬
131-
assume x l' hl';
132-
simplify;
133-
rewrite hl';
134-
reflexivity;
111+
assume x l h; simplify; rewrite h; reflexivity;
135112
end;
136113

137114
rule length (rev $l) ↪ length $l;

0 commit comments

Comments
 (0)