Skip to content

Commit fa5fd7c

Browse files
Additional encodings for PropExt.lp (Deducteam#38)
Some of the encodings I am using to verify clausification steps may be useful for other people too, so I propose adding them to the standard library.
1 parent fd72eb5 commit fa5fd7c

File tree

1 file changed

+145
-2
lines changed

1 file changed

+145
-2
lines changed

PropExt.lp

Lines changed: 145 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,18 @@ require open Stdlib.Set Stdlib.Prop Stdlib.FOL Stdlib.Eq Stdlib.Impred Stdlib.Cl
99

1010
symbol propExt x y : (π x → π y) → (π y → π x) → π (x = y);
1111

12+
opaque symbol =⇒ [a b] : π (a = b) → π a → π b
13+
begin
14+
assume a b h0 h1;
15+
refine ind_eq (eq_sym h0) (λ x, x) h1
16+
end;
17+
1218

1319
/******************************************************************************
14-
* Commutativity, symmetry and polarity
20+
* Commutativity, associativity and distributivity
1521
******************************************************************************/
1622

17-
opaque symbol ∨_com x y:
23+
opaque symbol ∨_com x y:
1824
π ((xy) = (yx)) ≔
1925
begin
2026
assume x y;
@@ -47,6 +53,79 @@ begin
4753
{assume h; refine ∧ᵢ (∧ₑ₂ h) (∧ₑ₁ h)}
4854
end;
4955

56+
opaque symbol ∨_assoc x y z :
57+
π (((xy) ∨ z) = (x ∨ (yz)))≔
58+
begin
59+
assume x y z;
60+
refine propExt ((xy) ∨ z) (x ∨ (yz)) _ _
61+
{assume h0;
62+
refine ∨ₑ h0 _ _
63+
{assume h1; refine ∨ₑ h1 _ _
64+
{assume h2; refine ∨ᵢ₁ h2}
65+
{assume h2; refine ∨ᵢ₂ (∨ᵢ₁ h2)}}
66+
{assume h1; refine ∨ᵢ₂ (∨ᵢ₂ h1)}}
67+
{assume h0; refine ∨ₑ h0 _ _
68+
{assume h1; refine ∨ᵢ₁ (∨ᵢ₁ h1)}
69+
{assume h1; refine ∨ₑ h1 _ _
70+
{assume h2; refine ∨ᵢ₁ (∨ᵢ₂ h2)}
71+
{assume h2; refine ∨ᵢ₂ h2}}}
72+
end;
73+
74+
opaque symbol ∧_assoc x y z :
75+
π (((xy) ∧ z) = (x ∧ (yz)))≔
76+
begin
77+
assume x y z;
78+
refine propExt ((xy) ∧ z) (x ∧ (yz)) _ _
79+
{assume h;
80+
refine ∧ᵢ (∧ₑ₁ (∧ₑ₁ h)) (∧ᵢ (∧ₑ₂ (∧ₑ₁ h)) (∧ₑ₂ h))}
81+
{assume h;
82+
refine ∧ᵢ (∧ᵢ (∧ₑ₁ h) (∧ₑ₁ (∧ₑ₂ h))) (∧ₑ₂ (∧ₑ₂ h))}
83+
end;
84+
85+
opaque symbol ∧∨_dist_l x y z :
86+
π (((xy) ∨ z) = ((xz) ∧ (yz)))≔
87+
begin
88+
assume x y z;
89+
refine propExt ((xy) ∨ z) ((xz) ∧ (yz)) _ _
90+
{assume h;
91+
refine ∧ᵢ _ _
92+
{refine ∨ₑ h _ _
93+
{assume hxy; refine ∨ᵢ₁ (∧ₑ₁ hxy)}
94+
{assume hz; refine ∨ᵢ₂ hz}}
95+
{refine ∨ₑ h _ _
96+
{assume hxy; refine ∨ᵢ₁ (∧ₑ₂ hxy)}
97+
{assume hz; refine ∨ᵢ₂ hz}}}
98+
{assume h;
99+
refine ∨ₑ (em z) _ _
100+
{assume hz; refine ∨ᵢ₂ hz}
101+
{assume hnz;
102+
have hx : π x
103+
{refine ∨ₑ (∧ₑ₁ h) _ _
104+
{assume hx; refine hx}
105+
{assume hz; refine ⊥ₑ (hnz hz)}};
106+
have hy : π y
107+
{refine ∨ₑ (∧ₑ₂ h) _ _
108+
{assume hy; refine hy}
109+
{assume hz; refine ⊥ₑ (hnz hz)}};
110+
refine ∨ᵢ₁ (∧ᵢ hx hy)}}
111+
end;
112+
113+
opaque symbol ∧∨_dist_r x y z :
114+
π ((z ∨ (xy)) = ((zx) ∧ (zy)))≔
115+
begin
116+
assume x y z;
117+
rewrite ∨_com;
118+
rewrite ∧∨_dist_l;
119+
rewrite ∨_com z x;
120+
rewrite ∨_com z y;
121+
reflexivity
122+
end;
123+
124+
125+
/******************************************************************************
126+
* Symmetry and polarity
127+
******************************************************************************/
128+
50129
opaque symbol =_sym [T] (x y : τ T) :
51130
π((x = y) = (y = x))≔
52131
begin
@@ -562,4 +641,68 @@ begin
562641
refine propExt (¬ ¬ x) x _ _
563642
{assume h1; refine ¬¬ₑ x h1}
564643
{assume h1 h2; refine h2 h1}
644+
end;
645+
646+
647+
/******************************************************************************
648+
* Clausification Rules
649+
******************************************************************************/
650+
651+
opaque symbol deMorgan_x y :
652+
π (¬(xy) = (¬ x ∨ ¬ y))≔
653+
begin
654+
assume x y;
655+
refine propExt (¬(xy)) (¬ x ∨ ¬ y) _ _
656+
{assume h;
657+
refine ∨ₑ (em x) _ _
658+
{assume hx; refine ∨ᵢ₂ (λ hy, h (∧ᵢ hx hy))}
659+
{assume hx; refine ∨ᵢ₁ hx}}
660+
{assume h hxy;
661+
refine ∨ₑ h _ _
662+
{assume hnx; refine hnx (∧ₑ₁ hxy)}
663+
{assume hny; refine hny (∧ₑ₂ hxy)}}
664+
end;
665+
666+
opaque symbol deMorgan_x y :
667+
π (¬(xy) = (¬ x ∧ ¬ y))≔
668+
begin
669+
assume x y;
670+
refine propExt (¬(xy)) (¬ x ∧ ¬ y) _ _
671+
{assume h; refine ∧ᵢ _ _
672+
{assume hx; refine h (∨ᵢ₁ hx)}
673+
{assume hy; refine h (∨ᵢ₂ hy)}}
674+
{assume h hxy;
675+
refine ∨ₑ hxy _ _
676+
{assume hx; refine (∧ₑ₁ h) hx}
677+
{assume hy; refine (∧ₑ₂ h) hy}}
678+
end;
679+
680+
opaque symbol ⇒=∨ x y :
681+
π ((xy) = (¬ xy))≔
682+
begin
683+
assume x y;
684+
refine propExt (xy) (¬ xy) _ _
685+
{assume h;
686+
refine ∨ₑ (em x) _ _
687+
{assume hx; refine ∨ᵢ₂ (h hx)}
688+
{assume hnx; refine ∨ᵢ₁ hnx}}
689+
{assume h hx;
690+
refine ∨ₑ h _ _
691+
{assume hnx; refine ⊥ₑ (hnx hx)}
692+
{assume hy; refine hy}}
693+
end;
694+
695+
opaque symbol ¬⇒=∧¬ x y :
696+
π (¬(xy) = (x ∧ ¬ y))≔
697+
begin
698+
assume x y;
699+
refine propExt (¬(xy)) (x ∧ ¬ y) _ _
700+
{assume h;
701+
refine ∧ᵢ _ _
702+
{refine ∨ₑ (em x) _ _
703+
{assume hx; refine hx}
704+
{assume hnx; refine ⊥ₑ (hz, ⊥ₑ (hnx z)))}}
705+
{assume hy; refine h (λ _, hy)}}
706+
{assume h himp;
707+
refine (∧ₑ₂ h) (himp (∧ₑ₁ h))}
565708
end;

0 commit comments

Comments
 (0)