Commit edff0fe3 by Robbert Krebbers

Use Inhabited type class for fixpoint and solver.

parent d9bae949
 ... ... @@ -93,35 +93,36 @@ Section cofe. End cofe. (** Fixpoint *) Program Definition fixpoint_chain `{Cofe A} (f : A → A) `{!Contractive f} (x : A) : chain A := {| chain_car i := Nat.iter i f x |}. Program Definition fixpoint_chain `{Cofe A, Inhabited A} (f : A → A) `{!Contractive f} : chain A := {| chain_car i := Nat.iter i f inhabitant |}. Next Obligation. intros A ???? f ? x n; induction n as [|n IH]; intros i ?; [done|]. destruct i as [|i]; simpl; try lia; apply contractive, IH; auto with lia. Qed. Program Definition fixpoint `{Cofe A} (f : A → A) `{!Contractive f} (x : A) : A := compl (fixpoint_chain f x). Program Definition fixpoint `{Cofe A, Inhabited A} (f : A → A) `{!Contractive f} : A := compl (fixpoint_chain f). Section fixpoint. Context `{Cofe A} (f : A → A) `{!Contractive f}. Lemma fixpoint_unfold x : fixpoint f x ≡ f (fixpoint f x). Context `{Cofe A, Inhabited A} (f : A → A) `{!Contractive f}. Lemma fixpoint_unfold : fixpoint f ≡ f (fixpoint f). Proof. apply equiv_dist; intros n; unfold fixpoint. rewrite (conv_compl (fixpoint_chain f x) n). by rewrite (chain_cauchy (fixpoint_chain f x) n (S n)) at 1 by lia. rewrite (conv_compl (fixpoint_chain f) n). by rewrite (chain_cauchy (fixpoint_chain f) n (S n)) at 1 by lia. Qed. Lemma fixpoint_ne (g : A → A) `{!Contractive g} x y n : (∀ z, f z ={n}= g z) → fixpoint f x ={n}= fixpoint g y. Lemma fixpoint_ne (g : A → A) `{!Contractive g} n : (∀ z, f z ={n}= g z) → fixpoint f ={n}= fixpoint g. Proof. intros Hfg; unfold fixpoint; rewrite (conv_compl (fixpoint_chain f x) n), (conv_compl (fixpoint_chain g y) n). intros Hfg; unfold fixpoint. rewrite (conv_compl (fixpoint_chain f) n),(conv_compl (fixpoint_chain g) n). induction n as [|n IH]; simpl in *; [done|]. rewrite Hfg; apply contractive, IH; auto using dist_S. Qed. Lemma fixpoint_proper (g : A → A) `{!Contractive g} x : (∀ x, f x ≡ g x) → fixpoint f x ≡ fixpoint g x. Lemma fixpoint_proper (g : A → A) `{!Contractive g} : (∀ x, f x ≡ g x) → fixpoint f ≡ fixpoint g. Proof. setoid_rewrite equiv_dist; naive_solver eauto using fixpoint_ne. Qed. End fixpoint. Global Opaque fixpoint. (** Function space *) Structure cofeMor (A B : cofeT) : Type := CofeMor { ... ... @@ -170,6 +171,8 @@ Lemma cofe_mor_ext {A B} (f g : cofeMor A B) : f ≡ g ↔ ∀ x, f x ≡ g x. Proof. done. Qed. Canonical Structure cofe_mor (A B : cofeT) : cofeT := CofeT (cofeMor A B). Infix "-n>" := cofe_mor (at level 45, right associativity). Instance cofe_more_inhabited (A B : cofeT) `{Inhabited B} : Inhabited (A -n> B) := populate (CofeMor (λ _, inhabitant)). (** Identity and composition *) Definition cid {A} : A -n> A := CofeMor id. ... ...
 ... ... @@ -2,7 +2,7 @@ Require Export iris.cofe. Section solver. Context (F : cofeT → cofeT → cofeT). Context (p : F (CofeT unit) (CofeT unit)). Context `{Finhab : Inhabited (F (CofeT unit) (CofeT unit))}. Context (map : ∀ {A1 A2 B1 B2 : cofeT}, ((A2 -n> A1) * (B1 -n> B2)) → (F A1 B1 -n> F A2 B2)). Arguments map {_ _ _ _} _. ... ... @@ -22,7 +22,7 @@ Proof. by rewrite <-!cofe_mor_ext; intros Hf Hg Hx; rewrite Hf, Hg, Hx. Qed. Fixpoint A (k : nat) : cofeT := match k with 0 => CofeT unit | S k => F (A k) (A k) end. Fixpoint f {k} : A k -n> A (S k) := match k with 0 => CofeMor (λ _, p) | S k => map (g,f) end match k with 0 => CofeMor (λ _, inhabitant) | S k => map (g,f) end with g {k} : A (S k) -n> A k := match k with 0 => CofeMor (λ _, () : CofeT ()) | S k => map (f,g) end. Definition f_S k (x : A (S k)) : f x = map (g,f) x := eq_refl. ... ...
 ... ... @@ -74,6 +74,7 @@ Instance uPred_entails {M} : SubsetEq (uPred M) := λ P Q, ∀ x n, Program Definition uPred_const {M} (P : Prop) : uPred M := {| uPred_holds n x := P |}. Solve Obligations with done. Instance uPred_inhabited M : Inhabited (uPred M) := populate (uPred_const True). Program Definition uPred_and {M} (P Q : uPred M) : uPred M := {| uPred_holds n x := P n x ∧ Q n x |}. ... ...
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!