proposition: Lemma model_uniqueness: extensionalityA -> [/\ forall x, uniqueness (unionA_pr x), forall x, uniqueness (powersetA_pr x), forall x p, (uniqueness (comprehensionA_pr x p)), forall x p f, (uniqueness (replacementA_pr x p f)) & uniqueness emptysetA_pr /\ forall a b, uniqueness (pairA_pr a b)].
proof: Proof. move => ea. have pa: forall x, uniqueness (unionA_pr x). move => x y1 y2 [u1 p1] [u2 p2]; apply ea => // z uz; split. by move /(p1 _ uz) => [t [ta tb tc]]; apply /(p2 _ uz); exists t. by move /(p2 _ uz) => [t [ta tb tc]]; apply /(p1 _ uz); exists t. have pb: forall x, uniqueness (powersetA_pr x). move => x y1 y2 [u1 p1] [u2 p2]; apply ea => // z uz; split. by move /(p1 _ uz) => h; apply /(p2 _ uz). by move /(p2 _ uz) => h; apply /(p1 _ uz). have pc: forall x p, (uniqueness (comprehensionA_pr x p)). move => x p y1 y2 [u1 p1] [u2 p2]; apply ea => // z uz; split. by move /(p1 _ uz) => h; apply /(p2 _ uz). by move /(p2 _ uz) => h; apply /(p1 _ uz). have pd: forall x p f, (uniqueness (replacementA_pr x p f)). move => x p f y1 y2 [u1 p1] [u2 p2]; apply ea => // z uz; split. by move /(p1 _ uz) => h; apply /(p2 _ uz). by move /(p2 _ uz) => h; apply /(p1 _ uz). have pe: uniqueness emptysetA_pr. move => e e' [u1 p1] [u2 p2]; apply: ea => // z uz; split => h. by case: (p1 _ uz). by case: (p2 _ uz). have pf: forall a b, uniqueness (pairA_pr a b). move => a b y1 y2 [u1 p1] [u2 p2]; apply ea => // z uz; split. by move /(p1 _ uz) => h; apply /(p2 _ uz). by move /(p2 _ uz) => h; apply /(p1 _ uz). split => //. Qed.
imports: mathcomp(ssreflect ssrfun ssrbool eqtype ssrnat)