diff options
author | Chloe Brown <chloe.brown.00@outlook.com> | 2021-04-05 14:31:57 +0100 |
---|---|---|
committer | Chloe Brown <chloe.brown.00@outlook.com> | 2021-04-05 14:31:57 +0100 |
commit | da429008d25ac87ec67a4fb18a5cbee0ba756bcf (patch) | |
tree | 9ee94c5a3231f28146b22b9fb1bad15c6e411bfe /src/Cfe/Function | |
parent | 13e0839831a528d26478a3a94c7470204460cce4 (diff) |
Clean-up Language hierarchy.
Diffstat (limited to 'src/Cfe/Function')
-rw-r--r-- | src/Cfe/Function/Power.agda | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/Cfe/Function/Power.agda b/src/Cfe/Function/Power.agda new file mode 100644 index 0000000..da3b335 --- /dev/null +++ b/src/Cfe/Function/Power.agda @@ -0,0 +1,37 @@ +{-# OPTIONS --without-K --safe #-} + +module Cfe.Function.Power where + +open import Data.Nat using (ℕ) +open import Data.Product using (∃-syntax; _×_) +open import Function using (id; _∘_) +open import Level using (Level; _⊔_) +open import Relation.Binary using (Rel; REL) +open import Relation.Binary.PropositionalEquality using (cong; _≡_) + +private + variable + a : Level + A : Set a + +infix 10 _^_ + +------------------------------------------------------------------------ +-- Definition + +_^_ : (A → A) → ℕ → A → A +f ^ ℕ.zero = id +f ^ ℕ.suc n = f ∘ f ^ n + +------------------------------------------------------------------------ +-- Properties + +f∼g⇒fⁿ∼gⁿ : + ∀ {a b ℓ} {A : Set a} {B : Set b} (_∼_ : REL A B ℓ) {f g 0A 0B} → + 0A ∼ 0B → (∀ {x y} → x ∼ y → f x ∼ g y) → ∀ n → (f ^ n) 0A ∼ (g ^ n) 0B +f∼g⇒fⁿ∼gⁿ _ refl ext ℕ.zero = refl +f∼g⇒fⁿ∼gⁿ ∼ refl ext (ℕ.suc n) = ext (f∼g⇒fⁿ∼gⁿ ∼ refl ext n) + +fⁿf≡fⁿ⁺¹ : ∀ (f : A → A) n → (f ^ n) ∘ f ≡ f ^ (ℕ.suc n) +fⁿf≡fⁿ⁺¹ f ℕ.zero = _≡_.refl +fⁿf≡fⁿ⁺¹ f (ℕ.suc n) = cong (f ∘_) (fⁿf≡fⁿ⁺¹ f n) |