Guest User

Untitled

a guest
Jan 21st, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. open import Agda.Builtin.Sigma
  2.  
  3. open import Decidable
  4. open import List
  5.  
  6. module Third (Ω : Set) (_≟_ : Decidable≡ Ω) where
  7.  
  8. data Filter {A : Set} (P : Pred A) : List A → List A → Set where
  9. [] : Filter P [] []
  10. _∷_ : ∀{x xs ys} → P x → Filter P xs ys → Filter P (x ∷ xs) (x ∷ ys)
  11. _-∷_ : ∀{x xs ys} → ¬(P x) → Filter P xs ys → Filter P (x ∷ xs) ys
  12.  
  13. filter : {A : Set} {P : Pred A} → (p : Decidable P) → (xs : List A) → Σ (List A) (Filter P xs)
  14. filter p [] = [] , []
  15. filter p (x ∷ xs) with p x | filter p xs
  16. filter p (x ∷ xs) | yes x₁ | fst₁ , snd₁ = x ∷ fst₁ , (x₁ ∷ snd₁)
  17. filter p (x ∷ xs) | no x₁ | fst₁ , snd₁ = fst₁ , (x₁ -∷ snd₁)
  18.  
  19. data Arrow : Set where
  20. _⇒_ : (α β : Ω) → Arrow
  21.  
  22. postulate arrowEq : Decidable≡ Arrow
  23.  
  24. data _IsPremiseOf_ (α : Ω) : Arrow → Set where
  25. left : ∀ β → α IsPremiseOf (α ⇒ β)
  26.  
  27. postulate _isPremiseOf_ : (α : Ω) → (r : Arrow) → Dec (α IsPremiseOf r)
  28.  
  29.  
  30. data PathUnder_From_To_ (Δ : List Arrow) (α : Ω) : Ω → Set where
  31. ε : PathUnder Δ From α To α
  32. _>_ : ∀{β γ} → PathUnder Δ From α To β → (β ⇒ γ) ∈ Δ → PathUnder Δ From α To γ
  33.  
  34. record ClosureOf_Under_Is_ (Γ : List Ω) (Δ : List Arrow) (Φ : List Ω) : Set where
  35. constructor mkclosure
  36. field
  37. reach : ∀ β → β ∈ Φ → Σ Ω (λ α → Σ (α ∈ Γ) λ _ → PathUnder Δ From α To β)
  38. base : ∀ α → α ∈ Γ → α ∈ Φ
  39. step : ∀ α β → α ∈ Φ → (α ⇒ β) ∈ Δ → β ∈ Φ
  40.  
  41. closure : (Γ : List Ω) → (Δ : List Arrow) → Σ (List Ω) ClosureOf Γ Under Δ Is_
  42. closure [] Δ = [] , mkclosure (λ β ()) (λ α z → z) (λ α β ())
  43. closure (α ∷ Γ) Δ with filter (α isPremiseOf_) Δ
  44. closure (α ∷ Γ) Δ | fst₁ , snd₁ = {! !}
Add Comment
Please, Sign In to add comment