@@ -9,12 +9,18 @@ require open Stdlib.Set Stdlib.Prop Stdlib.FOL Stdlib.Eq Stdlib.Impred Stdlib.Cl
99
1010symbol 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 π ((x ∨ y ) = (y ∨ x )) ≔
1925begin
2026 assume x y ;
4753 {assume h ; refine ∧ᵢ (∧ₑ₂ h ) (∧ₑ₁ h )}
4854end ;
4955
56+ opaque symbol ∨_assoc x y z :
57+ π (((x ∨ y ) ∨ z ) = (x ∨ (y ∨ z )))≔
58+ begin
59+ assume x y z ;
60+ refine propExt ((x ∨ y ) ∨ z ) (x ∨ (y ∨ z )) _ _
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+ π (((x ∧ y ) ∧ z ) = (x ∧ (y ∧ z )))≔
76+ begin
77+ assume x y z ;
78+ refine propExt ((x ∧ y ) ∧ z ) (x ∧ (y ∧ z )) _ _
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+ π (((x ∧ y ) ∨ z ) = ((x ∨ z ) ∧ (y ∨ z )))≔
87+ begin
88+ assume x y z ;
89+ refine propExt ((x ∧ y ) ∨ z ) ((x ∨ z ) ∧ (y ∨ z )) _ _
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 ∨ (x ∧ y )) = ((z ∨ x ) ∧ (z ∨ y )))≔
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+
50129opaque symbol =_sym [T ] (x y : τ T ) :
51130 π((x = y ) = (y = x ))≔
52131begin
@@ -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+ π (¬(x ∧ y ) = (¬ x ∨ ¬ y ))≔
653+ begin
654+ assume x y ;
655+ refine propExt (¬(x ∧ y )) (¬ 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+ π (¬(x ∨ y ) = (¬ x ∧ ¬ y ))≔
668+ begin
669+ assume x y ;
670+ refine propExt (¬(x ∨ y )) (¬ 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+ π ((x ⇒ y ) = (¬ x ∨ y ))≔
682+ begin
683+ assume x y ;
684+ refine propExt (x ⇒ y ) (¬ x ∨ y ) _ _
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+ π (¬(x ⇒ y ) = (x ∧ ¬ y ))≔
697+ begin
698+ assume x y ;
699+ refine propExt (¬(x ⇒ y )) (x ∧ ¬ y ) _ _
700+ {assume h ;
701+ refine ∧ᵢ _ _
702+ {refine ∨ₑ (em x ) _ _
703+ {assume hx ; refine hx }
704+ {assume hnx ; refine ⊥ₑ (h (λ z , ⊥ₑ (hnx z )))}}
705+ {assume hy ; refine h (λ _, hy )}}
706+ {assume h himp ;
707+ refine (∧ₑ₂ h ) (himp (∧ₑ₁ h ))}
565708end ;
0 commit comments