pattern matching without k
play

Pattern matching without K Jesper Cockx Dominique Devriese Frank - PowerPoint PPT Presentation

Pattern matching without K Jesper Cockx Dominique Devriese Frank Piessens DistriNet KU Leuven 3 September 2014 How can we recognize definitions by pattern matching that do not depend on K? By taking identity proofs into account during


  1. Pattern matching without K Jesper Cockx Dominique Devriese Frank Piessens DistriNet – KU Leuven 3 September 2014

  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 / 1

  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 / 1

  4. Pattern matching without K

  5. Pattern matching without K

  6. Simple pattern matching data N : Set where z : N s : N → N min : N → N → N y = ? x min 2 / 1

  7. Simple pattern matching data N : Set where z : N s : N → N min : N → N → N y = z min z ( s x ) y = ? min 2 / 1

  8. Simple pattern matching data N : Set where z : N s : N → N min : N → N → N = z y min z ( s x ) z = z min ( s x ) ( s y ) = s ( min x y ) min 2 / 1

  9. Dependent pattern matching data ≤ : N → N → Set where lz : ( x : N ) → z ≤ x ls : ( x y : N ) → x ≤ y → s x ≤ s y antisym : ( x y : N ) → x ≤ y → y ≤ x → x ≡ y = ? x y p q antisym 3 / 1

  10. Dependent pattern matching data ≤ : N → N → Set where lz : ( x : N ) → z ≤ x ls : ( x y : N ) → x ≤ y → s x ≤ s y antisym : ( x y : N ) → x ≤ y → y ≤ x → x ≡ y ⌊ z ⌋ ⌊ y ⌋ ( lz y ) = ? q antisym ⌊ s x ⌋ ⌊ s y ⌋ ( ls x y p ) q = ? antisym 3 / 1

  11. Dependent pattern matching data ≤ : N → N → Set where lz : ( x : N ) → z ≤ x ls : ( x y : N ) → x ≤ y → s x ≤ s y antisym : ( x y : N ) → x ≤ y → y ≤ x → x ≡ y ⌊ z ⌋ ⌊ z ⌋ ( lz ⌊ z ⌋ ) ( lz ⌊ z ⌋ ) = refl antisym ⌊ s x ⌋ ⌊ s y ⌋ ( ls x y p ) q = ? antisym 3 / 1

  12. Dependent pattern matching data ≤ : N → N → Set where lz : ( x : N ) → z ≤ x ls : ( x y : N ) → x ≤ y → s x ≤ s y antisym : ( x y : N ) → x ≤ y → y ≤ x → x ≡ y ⌊ z ⌋ ⌊ z ⌋ ( lz ⌊ z ⌋ ) ( lz ⌊ z ⌋ ) = refl antisym ⌊ s x ⌋ ⌊ s y ⌋ ( ls x y p ) ( ls ⌊ y ⌋ ⌊ x ⌋ q ) antisym = cong s ( antisym x y p q ) 3 / 1

  13. 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 ) ( noConf N ( 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 ) ( noConf N z ( s n ) e )) ( λ k ; l ; e ; ; p ; q . subst ( λ n . n ≤ m ) ( noConf N ( s k ) ( s n ) p ) ( subst ( λ m . k ≤ m ) ( noConf N ( s l ) ( s m ) q ) e )) ( s n ) ( s m ) q refl refl ))) 4 / 1

  14. The identity type as an inductive family ≡ ( x : A ) : A → Set where data refl : x ≡ x trans : ( x y z : A ) → x ≡ y → y ≡ z → x ≡ z trans x ⌊ x ⌋ ⌊ x ⌋ refl refl = refl 5 / 1

  15. The identity type as an inductive family ≡ ( x : A ) : A → Set where data refl : x ≡ x trans : ( x y z : A ) → x ≡ y → y ≡ z → x ≡ z trans x ⌊ x ⌋ ⌊ x ⌋ refl refl = refl 5 / 1

  16. K follows from pattern matching K : ( P : a ≡ a → Set ) → ( p : P refl ) → ( e : a ≡ a ) → P e P p refl = p K 6 / 1

  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 ! 7 / 1

  18. Pattern matching without K

  19. Unification of the indices x ≃ x , ∆ ⇒ ∆ (Deletion) t ≃ x , ∆ ⇒ ∆[ x �→ t ] (Solution) s ≃ c ¯ s ≃ ¯ c ¯ t , ∆ ⇒ ¯ t , ∆ (Injectivity) s ≃ c 2 ¯ c 1 ¯ t , ∆ ⇒ ⊥ (Conflict) x ≃ c ¯ p [ x ] , ∆ ⇒ ⊥ (Cycle) 8 / 1

  20. The criterium It is not allowed to delete reflexive equations. When applying injectivity on an equation s = c ¯ c ¯ t of type D ¯ u , the indices ¯ u should be self-unifiable . 9 / 1

  21. Why deletion has to be disabled UIP : ( e : a ≡ a ) → e ≡ refl refl = refl UIP Couldn’t solve reflexive equation a = a of type A because K has been disabled. 10 / 1

  22. 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. 11 / 1

  23. Pattern matching without K

  24. 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. 12 / 1

  25. Heterogeneous equality a : A a : A b : B refl : a ≃ a a ≃ b : Set eqElim : ( x y : A ) → ( e : x ≃ y ) → D x refl → D y e This elimination rule is equivalent with K . . . 13 / 1

  26. Homogeneous telescopic equality We can use the first equality proof to fix the types of the following equations. a 1 , a 2 ≡ b 1 , b 2 ⇓ ( e 1 : a 1 ≡ b 1 )( e 2 : subst e 1 a 2 ≡ b 2 ) 14 / 1

  27. Deletion x ≃ x , ∆ ⇒ ∆ ⇓ e : x ≡ x , ∆ ⇒ ∆[ e �→ refl ] This is exactly the K axiom! 15 / 1

  28. Solution t ≃ x , ∆ ⇒ ∆[ x �→ t ] ⇓ e : t ≡ x , ∆ ⇒ ∆[ x �→ t , e �→ refl ] 16 / 1

  29. Injectivity s ≃ c ¯ s ≃ ¯ t , ∆ ⇒ c ¯ ¯ t , ∆ ⇓ s ≡ c ¯ s ≡ ¯ e : c ¯ t , ∆ ⇒ ¯ e : ¯ t , ∆[ e �→ conf ¯ e ] s and c ¯ Indices of c ¯ t should be unifiable 17 / 1

  30. Conflict c 1 ¯ u ≃ c 2 ¯ v , ∆ ⇒ ⊥ ⇓ s ≡ c 2 ¯ e : c 1 ¯ t , ∆ ⇒ ⊥ 18 / 1

  31. Cycle x ≃ c ¯ p [ x ] , ∆ ⇒ ⊥ ⇓ e : x ≡ c ¯ p [ x ] , ∆ ⇒ ⊥ 19 / 1

  32. Possible extensions Detecting types that satisfy K (i.e. sets) Implementing the translation to eliminators Extending pattern matching to higher inductive types 20 / 1

  33. Possible extensions Detecting types that satisfy K (i.e. sets) Implementing the translation to eliminators Extending pattern matching to higher inductive types 20 / 1

  34. Possible extensions Detecting types that satisfy K (i.e. sets) Implementing the translation to eliminators Extending pattern matching to higher inductive types 20 / 1

  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! 21 / 1

  36. http://people.cs.kuleuven.be/ ∼ jesper.cockx/Without-K/

  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

  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-[]=

Recommend


More recommend