module CombinatoryLogic.Forest where
open import Data.Product using (_,_)
open import Function using (_$_)
open import Mockingbird.Forest using (Forest)
open import CombinatoryLogic.Equality as Equality using (isEquivalence; cong)
open import CombinatoryLogic.Semantics as ⊢ using (_≈_)
open import CombinatoryLogic.Syntax as Syntax using (Combinator)
forest : Forest
forest = record
{ Bird = Combinator
; _≈_ = _≈_
; _∙_ = Syntax._∙_
; isForest = record
{ isEquivalence = isEquivalence
; cong = cong
}
}
open Forest forest
open import Mockingbird.Forest.Birds forest
open import Mockingbird.Forest.Extensionality forest
import Mockingbird.Problems.Chapter11 forest as Chapter₁₁
import Mockingbird.Problems.Chapter12 forest as Chapter₁₂
instance
hasWarbler : HasWarbler
hasWarbler = record
{ W = Syntax.W
; isWarbler = λ _ _ → ⊢.W
}
hasKestrel : HasKestrel
hasKestrel = record
{ K = Syntax.K
; isKestrel = λ _ _ → ⊢.K
}
hasBluebird : HasBluebird
hasBluebird = record
{ B = Syntax.B
; isBluebird = λ _ _ _ → ⊢.B
}
hasIdentity : HasIdentity
hasIdentity = record
{ I = Syntax.I
; isIdentity = λ _ → Equality.prop₉
}
hasMockingbird : HasMockingbird
hasMockingbird = Chapter₁₁.problem₁₄
hasLark : HasLark
hasLark = Chapter₁₂.problem₃
hasComposition : HasComposition
hasComposition = Chapter₁₁.problem₁