SLIDE 1 Pattern matching without K
Jesper Cockx Dominique Devriese Frank Piessens
DistriNet – KU Leuven
13 May 2014
SLIDE 2 How can we recognize definitions by pattern matching that do not depend on K? By taking identity proofs into account during unification of the indices!
1 / 20
SLIDE 3 How can we recognize definitions by pattern matching that do not depend on K? By taking identity proofs into account during unification of the indices!
1 / 20
SLIDE 4
Pattern matching without K
1 Dependent pattern matching 2 The K axiom 3 Translation to eliminators 4 Proof-relevant unification
SLIDE 5
Pattern matching without K
1 Dependent pattern matching 2 The K axiom 3 Translation to eliminators 4 Proof-relevant unification
SLIDE 6 Simple pattern matching
data N : Set where z : N s : N → N min : N → N → N min x y = ?
2 / 20
SLIDE 7 Simple pattern matching
data N : Set where z : N s : N → N min : N → N → N min z y = z min (s x) y = ?
2 / 20
SLIDE 8 Simple pattern matching
data N : Set where z : N s : N → N min : N → N → N min z y = z min (s x) z = z min (s x) (s y) = s (min x y)
2 / 20
SLIDE 9 Dependent pattern matching
data ≤ : N → N → Set where lz : (n : N) → z ≤ n ls : (m n : N) → m ≤ n → s m ≤ s n antisym : (x y : N) → x ≤ y → y ≤ x → x ≡ y antisym x y p q = ?
3 / 20
SLIDE 10 Dependent pattern matching
data ≤ : N → N → Set where lz : (n : N) → z ≤ n ls : (m n : N) → m ≤ n → s m ≤ s n antisym : (x y : N) → x ≤ y → y ≤ x → x ≡ y antisym ⌊z⌋ ⌊y⌋ (lz y) q = ? antisym ⌊s x⌋ ⌊s y⌋ (ls x y p) q = ?
3 / 20
SLIDE 11 Dependent pattern matching
data ≤ : N → N → Set where lz : (n : N) → z ≤ n ls : (m n : N) → m ≤ n → s m ≤ s n antisym : (x y : N) → x ≤ y → y ≤ x → x ≡ y antisym ⌊z⌋ ⌊z⌋ (lz ⌊z⌋) (lz ⌊z⌋) = refl antisym ⌊s x⌋ ⌊s y⌋ (ls x y p) q = ?
3 / 20
SLIDE 12 Dependent pattern matching
data ≤ : N → N → Set where lz : (n : N) → z ≤ n ls : (m n : N) → m ≤ n → s m ≤ s n antisym : (x y : N) → x ≤ y → y ≤ x → x ≡ y antisym ⌊z⌋ ⌊z⌋ (lz ⌊z⌋) (lz ⌊z⌋) = refl antisym ⌊s x⌋ ⌊s y⌋ (ls x y p) (ls ⌊y⌋ ⌊x⌋ q) = cong s (antisym x y p q)
3 / 20
SLIDE 13
Pattern matching without K
1 Dependent pattern matching 2 The K axiom 3 Translation to eliminators 4 Proof-relevant unification
SLIDE 14 The identity type as an inductive family
data ≡ (x : A) : A → Set where refl : x ≡ x trans : (x y z : A) → x ≡ y → y ≡ z → x ≡ z trans x ⌊x⌋ ⌊x⌋ refl refl = refl
4 / 20
SLIDE 15 The identity type as an inductive family
data ≡ (x : A) : A → Set where refl : x ≡ x trans : (x y z : A) → x ≡ y → y ≡ z → x ≡ z trans x ⌊x⌋ ⌊x⌋ refl refl = refl
4 / 20
SLIDE 16 K follows from pattern matching
K : (P : a ≡ a → Set) → (p : P refl) → (e : a ≡ a) → P e K P p refl = p
5 / 20
SLIDE 17 We don’t always want to assume K
K is incompatible with univalence: K implies that subst e true = true for all e : Bool ≡ Bool Univalence gives swap : Bool ≡ Bool such that subst swap true = false hence true = false!
6 / 20
SLIDE 18 The –without-K flag in Agda
When making a case split, the indices must be applications of constructors to distinct variables (constructor parameters are treated as other arguments). These distinct variables must not be free in the parameters.
7 / 20
SLIDE 19 New specification of –without-K
It is not allowed to delete reflexive equations. When applying injectivity on an equation c ¯ s = c ¯ t of type D ¯ u, the indices ¯ u should be self-unifiable.
8 / 20
SLIDE 20
Pattern matching without K
1 Dependent pattern matching 2 The K axiom 3 Translation to eliminators 4 Proof-relevant unification
SLIDE 21 Eliminating dependent pattern matching
1 Basic case analysis:
Translate each case split to an eliminator.
2 Specialization by unification:
Solve the equations on the indices.
3 Structural recursion:
Fill in the recursive calls.
9 / 20
SLIDE 22 Specialization by unification
x ≃ x, ∆ ⇒ ∆ (Deletion) t ≃ x, ∆ ⇒ ∆[x → t] (Solution) c ¯ s ≃ c ¯ t, ∆ ⇒ ¯ s ≃ ¯ t, ∆ (Injectivity) c1 ¯ s ≃ c2 ¯ t, ∆ ⇒ ⊥ (Conflict) x ≃ c ¯ p[x], ∆ ⇒ ⊥ (Cycle)
10 / 20
SLIDE 23 antisym : (m n : N) → m ≤ n → n ≤ m → m ≡ n antisym = elim≤ (λm; n; . n ≤ m → m ≡ n) (λn; e. elim≤ (λn; m; . m ≡ z → m ≡ n) (λn; e. e) (λk; l; ; ; e. elim⊥(λ . s l ≡ s k) (noConfN (s l) z e)) n z e refl) (λm; n; ; H; q. cong s (H (elim≤ (λk; l; . k ≡ s n → l ≡ s m → n ≤ m) (λ ; e; . elim⊥ (λ . n ≤ m) (noConfN z (s n) e)) (λk; l; e; ; p; q. subst (λn. n ≤ m) (noConfN (s k) (s n) p) (subst (λm. k ≤ m) (noConfN (s l) (s m) q) e)) (s n) (s m) q refl refl)))
11 / 20
SLIDE 24
Pattern matching without K
1 Dependent pattern matching 2 The K axiom 3 Translation to eliminators 4 Proof-relevant unification
SLIDE 25 Heterogeneous equality
a : A b : B a ≃ b : Set a : A refl : a ≃ a eqElim : (x y : A) → (e : x ≃ y) → D x refl → D y e This elimination rule is equivalent with K . . .
12 / 20
SLIDE 26 Homogeneous telescopic equality
We can use the first equality proof to fix the types of the following equations. a1, a2 ≡ b1, b2 ⇓ (e1 : a1 ≡ b1)(e2 : subst e1 a2 ≡ b2)
13 / 20
SLIDE 27 Deletion
x ≃ x, ∆ ⇒ ∆ ⇓ e : x ≡ x, ∆ ⇒ ∆[e → refl]
14 / 20
SLIDE 28 Solution
t ≃ x, ∆ ⇒ ∆[x → t] ⇓ e : t ≡ x, ∆ ⇒ ∆[x → t, e → refl]
15 / 20
SLIDE 29 Injectivity
c ¯ s ≃ c ¯ t, ∆ ⇒ ¯ s ≃ ¯ t, ∆ ⇓ e : c ¯ s ≡ c ¯ t, ∆ ⇒ ¯ e : ¯ s ≡ ¯ t, ∆[e → conf ¯ e]
16 / 20
SLIDE 30 Conflict
c1 ¯ u ≃ c2 ¯ v, ∆ ⇒ ⊥ ⇓ e : c1 ¯ s ≡ c2 ¯ t, ∆ ⇒ ⊥
17 / 20
SLIDE 31 Cycle
x ≃ c ¯ p[x], ∆ ⇒ ⊥ ⇓ e : x ≡ c ¯ p[x], ∆ ⇒ ⊥
18 / 20
SLIDE 32 Future work
Detecting types that satisfy K (i.e. sets) Implementing the translation to eliminators Extending pattern matching to higher inductive types
19 / 20
SLIDE 33 Future work
Detecting types that satisfy K (i.e. sets) Implementing the translation to eliminators Extending pattern matching to higher inductive types
19 / 20
SLIDE 34 Future work
Detecting types that satisfy K (i.e. sets) Implementing the translation to eliminators Extending pattern matching to higher inductive types
19 / 20
SLIDE 35 Conclusion
By restricting the unification algorithm, we can make sure that K is never used. You no longer have to worry when using pattern matching for HoTT!
20 / 20
SLIDE 36
http://people.cs.kuleuven.be/ ∼ jesper.cockx/Without-K/
SLIDE 37 Standard library without K Fixable errors: 16
Module Functions Algebra.RingSolver
?
=H,
?
=N Data.Fin.Properties drop-suc Data.Vec.Equality trans,
?
= Data.Vec.Properties ::-injective, . . . Relation.Binary.Vec.Pointwise head, tail Data.Fin.Subset.Properties drop-there, ∈⊥, . . . Data.Fin.Dec ∈? Data.List.Countdown drop-suc
SLIDE 38
Unfixable/unknown errors: 20
Module Functions Relation.Binary. HeterogeneousEquality ∼ =-to-≡, subst, cong, . . . PropositionalEquality proof-irrelevance Sigma.Pointwise Rel↔≡, inverse Data. Colist Any-cong, ⊑-Poset Covec setoid Container.Indexed setoid, natural, ◦-correct List.Any.BagAndSetEquality drop-cons Star.Decoration gmapAll, ⊳ ⊳ ⊳ Star.Pointer lookup Vec.Properties proof-irrelevance-[]=
SLIDE 39
Why deletion has to be disabled
UIP : (e : a ≡ a) → e ≡ refl UIP refl = refl Couldn’t solve reflexive equation a = a of type A because K has been disabled.
SLIDE 40
Why injectivity has to be restricted
UIP′ : (e : refl ≡a≡a refl) → e ≡ refl UIP′ refl = refl Couldn’t solve reflexive equation a = a of type A because K has been disabled.