{-# OPTIONS --without-K --safe #-}
open import Polynomial.Parameters
module Polynomial.Homomorphism.Semantics
{r₁ r₂ r₃}
(homo : Homomorphism r₁ r₂ r₃)
where
open import Data.Product using (_,_)
open import Data.List using ([])
open import Data.Vec as Vec using (Vec)
open import Data.Fin using (Fin)
open import Function
open import Polynomial.Homomorphism.Lemmas homo
open import Polynomial.NormalForm homo
open Homomorphism homo
open import Polynomial.Reasoning ring
open import Polynomial.Exponentiation rawRing
κ-hom : ∀ {n}
→ (x : Raw.Carrier)
→ (Ρ : Vec Carrier n)
→ ⟦ κ x ⟧ Ρ ≈ ⟦ x ⟧ᵣ
κ-hom x _ = refl
ι-hom : ∀ {n} → (i : Fin n) → (Ρ : Vec Carrier n) → ⟦ ι i ⟧ Ρ ≈ Vec.lookup Ρ i
ι-hom i Ρ′ =
let (ρ , Ρ) = drop-1 (Fin⇒≤ i) Ρ′
in
begin
⟦ (κ Raw.1# Δ 1 ∷↓ []) Π↓ Fin⇒≤ i ⟧ Ρ′
≈⟨ Π↓-hom (κ Raw.1# Δ 1 ∷↓ []) (Fin⇒≤ i) Ρ′ ⟩
Σ?⟦ κ Raw.1# Δ 1 ∷↓ [] ⟧ (ρ , Ρ)
≈⟨ ∷↓-hom-s (κ Raw.1#) 0 [] ρ Ρ ⟩
ρ * ⟦ κ Raw.1# ⟧ Ρ
≈⟨ *≫ 1-homo ⟩
ρ * 1#
≈⟨ *-identityʳ ρ ⟩
ρ
≡⟨ drop-1⇒lookup i Ρ′ ⟩
Vec.lookup Ρ′ i
∎