Section FinitePartialMap.
Variable A:Type.
Variable dec_A : EqDec A.
Variable B:Type.
Variable PJ_B: Join B.
Variable Perm_B : Perm_alg B.
Variable Pos_B : Pos_alg B.
Let Rng := option B.
Let Join_Rng := Join_lower PJ_B.
Let Sep_Rng := Sep_lower B.
Let Perm_Rng := Perm_lower B.
Definition finMap (f:A -> Rng) : Prop :=
exists l, forall a:A, ~In a l -> f a = None.
Definition fpm := sig finMap.
Instance Join_fpm : Join fpm :=
Join_prop (A -> option B)  (Join_fun A (option B) Join_Rng) finMap.
Definition PAF: (@Perm_alg (A -> Rng)  (Join_fun A Rng Join_Rng))
:= Perm_fun _ _ _ Perm_Rng.
Instance Perm_fpm : @Perm_alg fpm Join_fpm :=
Perm_prop (A -> Rng) _ _ finMap finMap_join.
Instance Disj_fpm {DA_B: Disj_alg B}: Disj_alg fpm.

Lemma fpm_gso: forall i j v rho,
i <> j -> lookup_fpm (insert_fpm j v rho) i =
lookup_fpm rho i.