Module mathcomp.classical.contra
From mathcomp Require Import ssreflect ssrfun ssrbool eqtype ssrnat seq.From mathcomp Require Import boolp.
Set SsrOldRewriteGoalsOrder.
Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.
Variant move_view S T := MoveView of S -> T.
Definition
Internals.move_viewP : forall {S T : Type}, Internals.move_view S T -> S -> T Internals.move_viewP is not universe polymorphic Arguments Internals.move_viewP {S T}%_type_scope mv _ Internals.move_viewP is transparent Expands to: Constant mathcomp.classical.contra.Internals.move_viewP Declared in library mathcomp.classical.contra, line 64, characters 11-21
Hint View for move/ move_viewP|2.
Variant equivT S T := EquivT of S -> T & T -> S.
Definition
Internals.equivT_refl : forall S : Type, Internals.equivT S S Internals.equivT_refl is not universe polymorphic Arguments Internals.equivT_refl S%_type_scope Internals.equivT_refl is transparent Expands to: Constant mathcomp.classical.contra.Internals.equivT_refl Declared in library mathcomp.classical.contra, line 73, characters 11-22
Definition
Internals.equivT_transl : forall {S T U : Type}, Internals.equivT S T -> Internals.equivT S U -> Internals.equivT T U Internals.equivT_transl is not universe polymorphic Arguments Internals.equivT_transl {S T U}%_type_scope _ _ Internals.equivT_transl is transparent Expands to: Constant mathcomp.classical.contra.Internals.equivT_transl Declared in library mathcomp.classical.contra, line 74, characters 11-24
fun (st : equivT S T) (su : equivT S U) =>
let: EquivT S_T T_S := st in
let: EquivT S_U U_S := su in
EquivT (S_U \o T_S) (S_T \o U_S).
Definition
Internals.equivT_sym : forall {S T : Type}, Internals.equivT S T -> Internals.equivT T S Internals.equivT_sym is not universe polymorphic Arguments Internals.equivT_sym {S T}%_type_scope _ Internals.equivT_sym is transparent Expands to: Constant mathcomp.classical.contra.Internals.equivT_sym Declared in library mathcomp.classical.contra, line 79, characters 11-21
equivT_transl^~ (equivT_refl S).
Definition
Internals.equivT_trans : forall {S T U : Type}, Internals.equivT S T -> Internals.equivT T U -> Internals.equivT S U Internals.equivT_trans is not universe polymorphic Arguments Internals.equivT_trans {S T U}%_type_scope _ _ Internals.equivT_trans is transparent Expands to: Constant mathcomp.classical.contra.Internals.equivT_trans Declared in library mathcomp.classical.contra, line 81, characters 11-23
equivT_transl \o equivT_sym.
Definition
Internals.equivT_transr : forall {S T U : Type}, Internals.equivT S T -> Internals.equivT U S -> Internals.equivT U T Internals.equivT_transr is not universe polymorphic Arguments Internals.equivT_transr {S T U}%_type_scope eqST _ Internals.equivT_transr is transparent Expands to: Constant mathcomp.classical.contra.Internals.equivT_transr Declared in library mathcomp.classical.contra, line 83, characters 11-24
equivT_trans^~ eqST.
Definition
Internals.equivT_Prop : forall P Q : Prop, Internals.equivT P Q <-> Internals.equivT P Q Internals.equivT_Prop is not universe polymorphic Arguments Internals.equivT_Prop (P Q)%_type_scope Internals.equivT_Prop is transparent Expands to: Constant mathcomp.classical.contra.Internals.equivT_Prop Declared in library mathcomp.classical.contra, line 85, characters 11-22
Proof.
Internals.equivT_LR : forall {S T : Type}, Internals.equivT S T -> S -> T Internals.equivT_LR is not universe polymorphic Arguments Internals.equivT_LR {S T}%_type_scope eq _ Internals.equivT_LR is transparent Expands to: Constant mathcomp.classical.contra.Internals.equivT_LR Declared in library mathcomp.classical.contra, line 87, characters 11-20
let: EquivT S_T _ := eq in S_T.
Definition
Internals.equivT_RL : forall {S T : Type}, Internals.equivT S T -> T -> S Internals.equivT_RL is not universe polymorphic Arguments Internals.equivT_RL {S T}%_type_scope eq _ Internals.equivT_RL is transparent Expands to: Constant mathcomp.classical.contra.Internals.equivT_RL Declared in library mathcomp.classical.contra, line 89, characters 11-20
let: EquivT _ T_S := eq in T_S.
Hint View for move/ equivT_LR|2 equivT_RL|2.
Hint View for apply/ equivT_RL|2 equivT_LR|2.
Structure forallSort A :=
ForallSort {forall_sort :> Type; _ : (A -> forall_sort) -> forall_sort}.
Notation mkForallSort A S := (@ForallSort A S (fun T => forall x, T x)).
Polymorphic Definition
Internals.TypeForall@{u u0} : forall A : Type, Internals.forallSort A Internals.TypeForall is universe polymorphic Arguments Internals.TypeForall A%_type_scope Internals.TypeForall is transparent Expands to: Constant mathcomp.classical.contra.Internals.TypeForall Declared in library mathcomp.classical.contra, line 127, characters 23-33
Canonical TypeForall.
Canonical
Internals.PropForall : forall A : Type, Internals.forallSort A Internals.PropForall is not universe polymorphic Arguments Internals.PropForall A%_type_scope Internals.PropForall is transparent Expands to: Constant mathcomp.classical.contra.Internals.PropForall Declared in library mathcomp.classical.contra, line 130, characters 10-20
Canonical
Internals.SetForall : forall A : Set, Internals.forallSort A Internals.SetForall is not universe polymorphic Arguments Internals.SetForall A%_type_scope Internals.SetForall is transparent Expands to: Constant mathcomp.classical.contra.Internals.SetForall Declared in library mathcomp.classical.contra, line 134, characters 10-19
Definition
Internals.Forall : forall {A : Type} {S : Internals.forallSort A}, (A -> Internals.forall_sort S) -> Internals.forall_sort S Internals.Forall is not universe polymorphic Arguments Internals.Forall {A}%_type_scope {S} _%_function_scope Internals.Forall is transparent Expands to: Constant mathcomp.classical.contra.Internals.Forall Declared in library mathcomp.classical.contra, line 136, characters 11-17
let: ForallSort _ F := S return (A -> S) -> S in F.
Notation "\Forall x .. z , T" :=
(Forall (fun x => .. (Forall (fun z => T)) ..))
(at level 200, x binder, z binder, T at level 200,
format "'[hv' '\Forall' '[' x .. z , ']' '/ ' T ']'") : type_scope.
Tactic Notation "ForallI" ssrpatternarg(pat) :=
let F := fresh "F" in ssrmatching.ssrpattern pat => F;
case: F / (@erefl _ F : Forall _ = _).
Tactic Notation "ForallI" := ForallI (forall x, _).
Structure wrappedProp := WrapProp {unwrap_Prop :> Prop}.
Definition
Internals.wrap4Prop : Prop -> Internals.wrappedProp Internals.wrap4Prop is not universe polymorphic Arguments Internals.wrap4Prop unwrap_Prop%_type_scope Internals.wrap4Prop is transparent Expands to: Constant mathcomp.classical.contra.Internals.wrap4Prop Declared in library mathcomp.classical.contra, line 172, characters 11-20
Definition
Internals.wrap3Prop : Prop -> Internals.wrappedProp Internals.wrap3Prop is not universe polymorphic Arguments Internals.wrap3Prop unwrap_Prop%_type_scope Internals.wrap3Prop is transparent Expands to: Constant mathcomp.classical.contra.Internals.wrap3Prop Declared in library mathcomp.classical.contra, line 173, characters 11-20
Definition
Internals.wrap2Prop : Prop -> Internals.wrappedProp Internals.wrap2Prop is not universe polymorphic Arguments Internals.wrap2Prop unwrap_Prop%_type_scope Internals.wrap2Prop is transparent Expands to: Constant mathcomp.classical.contra.Internals.wrap2Prop Declared in library mathcomp.classical.contra, line 174, characters 11-20
Canonical
Internals.wrap1Prop : Prop -> Internals.wrappedProp Internals.wrap1Prop is not universe polymorphic Arguments Internals.wrap1Prop P%_type_scope Internals.wrap1Prop is transparent Expands to: Constant mathcomp.classical.contra.Internals.wrap1Prop Declared in library mathcomp.classical.contra, line 175, characters 10-19
Polymorphic Structure wrappedType@{i} := WrapType {unwrap_Type :> Type@{i}}.
Polymorphic Definition
Internals.wrap4Type@{i} : Type -> Internals.wrappedType Internals.wrap4Type is universe polymorphic Arguments Internals.wrap4Type unwrap_Type%_type_scope Internals.wrap4Type is transparent Expands to: Constant mathcomp.classical.contra.Internals.wrap4Type Declared in library mathcomp.classical.contra, line 178, characters 23-32
Polymorphic Definition
Internals.wrap3Type@{i} : Type -> Internals.wrappedType Internals.wrap3Type is universe polymorphic Arguments Internals.wrap3Type unwrap_Type%_type_scope Internals.wrap3Type is transparent Expands to: Constant mathcomp.classical.contra.Internals.wrap3Type Declared in library mathcomp.classical.contra, line 179, characters 23-32
Polymorphic Definition
Internals.wrap2Type@{i} : Type -> Internals.wrappedType Internals.wrap2Type is universe polymorphic Arguments Internals.wrap2Type unwrap_Type%_type_scope Internals.wrap2Type is transparent Expands to: Constant mathcomp.classical.contra.Internals.wrap2Type Declared in library mathcomp.classical.contra, line 180, characters 23-32
Polymorphic Definition
Internals.wrap1Type@{i} : Type -> Internals.wrappedType Internals.wrap1Type is universe polymorphic Arguments Internals.wrap1Type T%_type_scope Internals.wrap1Type is transparent Expands to: Constant mathcomp.classical.contra.Internals.wrap1Type Declared in library mathcomp.classical.contra, line 181, characters 23-32
Canonical wrap1Type.
Lemma generic_forall_extensionality {A} {S : forallSort A} {P Q : A -> S} :
P =1 Q -> Forall P = Forall Q.
Proof.
Structure negatedProp (trivial : bool) nP :=
NegatedProp {negated_Prop :> wrappedProp; _ : (~ negated_Prop) = nP}.
Structure properNegatedProp nP := ProperNegatedProp {
proper_negated_Prop :> Prop; _ : (~ proper_negated_Prop) = nP}.
Local Notation nProp t nP P := (unwrap_Prop (@negated_Prop t nP P)).
Local Notation nPred t nP P x := (nProp t (nP x) (P x)).
Local Notation pnProp nP P := (@proper_negated_Prop nP P).
Lemma lax_notE {t nP} P : (~ nProp t nP P) = nP
Proof.
Proof.
Internals.lax_notI : forall {t : bool} {nP : Prop} (P : Internals.negatedProp t nP), Internals.unwrap_Prop (Internals.negated_Prop P) = (~ nP) Internals.lax_notI is not universe polymorphic Arguments Internals.lax_notI {t}%_bool_scope {nP}%_type_scope P Internals.lax_notI is transparent Expands to: Constant mathcomp.classical.contra.Internals.lax_notI Declared in library mathcomp.classical.contra, line 270, characters 11-19
#[warn(note="A different `notE` used to be provided by `boolp.v` before MathComp-Analysis 1.15.0.")]
Definition
Internals.notE : forall {nP : Prop} (P : Internals.negatedProp false nP), (~ Internals.unwrap_Prop (Internals.negated_Prop P)) = nP Internals.notE is not universe polymorphic Arguments Internals.notE {nP}%_type_scope P Internals.notE is transparent Expands to: Constant mathcomp.classical.contra.Internals.notE Declared in library mathcomp.classical.contra, line 273, characters 11-15
#[warn(note="A different `notP` used to be provided by `boolp.v` before MathComp-Analysis 1.15.0.")]
Definition
Internals.notP : forall {nP : Prop} {P : Internals.negatedProp false nP}, Internals.move_view (~ Internals.unwrap_Prop (Internals.negated_Prop P)) nP Internals.notP is not universe polymorphic Arguments Internals.notP {nP}%_type_scope {P} Internals.notP is transparent Expands to: Constant mathcomp.classical.contra.Internals.notP Declared in library mathcomp.classical.contra, line 275, characters 11-15
Fact proper_nPropP nP P : (~ pnProp nP P) = nP
Proof.
Internals.notI : forall {nP : Prop} (P : Internals.properNegatedProp nP), Internals.proper_negated_Prop P = (~ nP) Internals.notI is not universe polymorphic Arguments Internals.notI {nP}%_type_scope P Internals.notI is transparent Expands to: Constant mathcomp.classical.contra.Internals.notI Declared in library mathcomp.classical.contra, line 278, characters 11-15
Internals.proper_nProp : forall [nP : Prop], Internals.properNegatedProp nP -> Internals.negatedProp false nP Internals.proper_nProp is not universe polymorphic Arguments Internals.proper_nProp [nP]%_type_scope P Internals.proper_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.proper_nProp Declared in library mathcomp.classical.contra, line 281, characters 10-22
@NegatedProp false nP (wrap1Prop (pnProp nP P)) (proper_nPropP P).
Internals.trivial_nProp : forall P : Prop, Internals.negatedProp true (~ P) Internals.trivial_nProp is not universe polymorphic Arguments Internals.trivial_nProp P%_type_scope Internals.trivial_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.trivial_nProp Declared in library mathcomp.classical.contra, line 287, characters 10-23
Canonical
Internals.True_nProp : Internals.properNegatedProp False Internals.True_nProp is not universe polymorphic Internals.True_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.True_nProp Declared in library mathcomp.classical.contra, line 291, characters 10-20
Canonical
Internals.False_nProp : Internals.properNegatedProp True Internals.False_nProp is not universe polymorphic Internals.False_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.False_nProp Declared in library mathcomp.classical.contra, line 292, characters 10-21
Canonical
Internals.not_nProp : forall P : Prop, Internals.properNegatedProp P Internals.not_nProp is not universe polymorphic Arguments Internals.not_nProp P%_type_scope Internals.not_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.not_nProp Declared in library mathcomp.classical.contra, line 293, characters 10-19
Fact and_nPropP P tQ nQ Q : (~ (P /\ nProp tQ nQ Q)) = (P -> nQ).
Canonical
Internals.and_nProp : forall (P : Prop) [tQ : bool] [nQ : Prop], Internals.negatedProp tQ nQ -> Internals.properNegatedProp (P -> nQ) Internals.and_nProp is not universe polymorphic Arguments Internals.and_nProp P%_type_scope [tQ]%_bool_scope [nQ]%_type_scope Q Internals.and_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.and_nProp Declared in library mathcomp.classical.contra, line 297, characters 10-19
ProperNegatedProp (@and_nPropP P tQ nQ Q).
Fact and3_nPropP P Q tR nR R : (~ [/\ P, Q & nProp tR nR R]) = (P -> Q -> nR).
Canonical
Internals.and3_nProp : forall (P Q : Prop) [tR : bool] [nR : Prop], Internals.negatedProp tR nR -> Internals.properNegatedProp (P -> Q -> nR) Internals.and3_nProp is not universe polymorphic Arguments Internals.and3_nProp (P Q)%_type_scope [tR]%_bool_scope [nR]%_type_scope R Internals.and3_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.and3_nProp Declared in library mathcomp.classical.contra, line 302, characters 10-20
ProperNegatedProp (@and3_nPropP P Q tR nR R).
Fact and4_nPropP P Q R tS nS S :
(~ [/\ P, Q, R & nProp tS nS S]) = (P -> Q -> R -> nS).
Canonical
Internals.and4_nProp : forall (P Q R : Prop) [tS : bool] [nS : Prop], Internals.negatedProp tS nS -> Internals.properNegatedProp (P -> Q -> R -> nS) Internals.and4_nProp is not universe polymorphic Arguments Internals.and4_nProp (P Q R)%_type_scope [tS]%_bool_scope [nS]%_type_scope S Internals.and4_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.and4_nProp Declared in library mathcomp.classical.contra, line 308, characters 10-20
ProperNegatedProp (@and4_nPropP P Q R tS nS S).
Fact and5_nPropP P Q R S tT nT T :
(~ [/\ P, Q, R, S & nProp tT nT T]) = (P -> Q -> R -> S -> nT).
Canonical
Internals.and5_nProp : forall (P Q R S : Prop) [tT : bool] [nT : Prop], Internals.negatedProp tT nT -> Internals.properNegatedProp (P -> Q -> R -> S -> nT) Internals.and5_nProp is not universe polymorphic Arguments Internals.and5_nProp (P Q R S)%_type_scope [tT]%_bool_scope [nT]%_type_scope T Internals.and5_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.and5_nProp Declared in library mathcomp.classical.contra, line 314, characters 10-20
ProperNegatedProp (@and5_nPropP P Q R S tT nT T).
Fact or_nPropP tP nP P tQ nQ Q :
(~ (nProp tP nP P \/ nProp tQ nQ Q)) = (nP /\ nQ).
Canonical
Internals.or_nProp : forall [tP : bool] [nP : Prop], Internals.negatedProp tP nP -> forall [tQ : bool] [nQ : Prop], Internals.negatedProp tQ nQ -> Internals.properNegatedProp (nP /\ nQ) Internals.or_nProp is not universe polymorphic Arguments Internals.or_nProp [tP]%_bool_scope [nP]%_type_scope P [tQ]%_bool_scope [nQ]%_type_scope Q Internals.or_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.or_nProp Declared in library mathcomp.classical.contra, line 320, characters 10-18
ProperNegatedProp (@or_nPropP tP nP P tQ nQ Q).
Fact or3_nPropP tP nP P tQ nQ Q tR nR R :
(~ [\/ nProp tP nP P, nProp tQ nQ Q | nProp tR nR R]) = [/\ nP, nQ & nR].
Canonical
Internals.or3_nProp : forall [tP : bool] [nP : Prop], Internals.negatedProp tP nP -> forall [tQ : bool] [nQ : Prop], Internals.negatedProp tQ nQ -> forall [tR : bool] [nR : Prop], Internals.negatedProp tR nR -> Internals.properNegatedProp [/\ nP, nQ & nR] Internals.or3_nProp is not universe polymorphic Arguments Internals.or3_nProp [tP]%_bool_scope [nP]%_type_scope P [tQ]%_bool_scope [nQ]%_type_scope Q [tR]%_bool_scope [nR]%_type_scope R Internals.or3_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.or3_nProp Declared in library mathcomp.classical.contra, line 326, characters 10-19
ProperNegatedProp (@or3_nPropP tP nP P tQ nQ Q tR nR R).
Fact or4_nPropP tP nP P tQ nQ Q tR nR R tS nS S :
(~ [\/ nProp tP nP P, nProp tQ nQ Q, nProp tR nR R | nProp tS nS S])
= [/\ nP, nQ, nR & nS].
Canonical
Internals.or4_nProp : forall [tP : bool] [nP : Prop], Internals.negatedProp tP nP -> forall [tQ : bool] [nQ : Prop], Internals.negatedProp tQ nQ -> forall [tR : bool] [nR : Prop], Internals.negatedProp tR nR -> forall [tS : bool] [nS : Prop], Internals.negatedProp tS nS -> Internals.properNegatedProp [/\ nP, nQ, nR & nS] Internals.or4_nProp is not universe polymorphic Arguments Internals.or4_nProp [tP]%_bool_scope [nP]%_type_scope P [tQ]%_bool_scope [nQ]%_type_scope Q [tR]%_bool_scope [nR]%_type_scope R [tS]%_bool_scope [nS]%_type_scope S Internals.or4_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.or4_nProp Declared in library mathcomp.classical.contra, line 333, characters 10-19
ProperNegatedProp (@or4_nPropP tP nP P tQ nQ Q tR nR R tS nS S).
Notation and_def binary P Q PQ := (PQ = if binary then P /\ Q else Q)%type.
Structure andRHS binary P Q PQ :=
AndRHS {and_RHS :> Prop; _ : (P /\ and_RHS) = PQ; _ : and_def binary P Q PQ}.
Canonical
Internals.unary_and_rhs : forall P : Prop, Internals.andRHS false P P P Internals.unary_and_rhs is not universe polymorphic Arguments Internals.unary_and_rhs P%_type_scope Internals.unary_and_rhs is transparent Expands to: Constant mathcomp.classical.contra.Internals.unary_and_rhs Declared in library mathcomp.classical.contra, line 347, characters 10-23
Canonical
Internals.binary_and_rhs : forall P Q : Prop, Internals.andRHS true P Q (P /\ Q) Internals.binary_and_rhs is not universe polymorphic Arguments Internals.binary_and_rhs (P Q)%_type_scope Internals.binary_and_rhs is transparent Expands to: Constant mathcomp.classical.contra.Internals.binary_and_rhs Declared in library mathcomp.classical.contra, line 348, characters 10-24
Fact imply_nPropP b P nQ PnQ tR (nR : andRHS b P nQ PnQ) R :
(~ (P -> nProp tR nR R)) = PnQ.
Canonical
Internals.imply_nProp : forall [b : bool] [P nQ PnQ : Prop] [tR : bool] [nR : Internals.andRHS b P nQ PnQ], Internals.negatedProp tR (Internals.and_RHS nR) -> Internals.properNegatedProp PnQ Internals.imply_nProp is not universe polymorphic Arguments Internals.imply_nProp [b]%_bool_scope [P nQ PnQ]%_type_scope [tR]%_bool_scope [nR] R Internals.imply_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.imply_nProp Declared in library mathcomp.classical.contra, line 353, characters 10-21
ProperNegatedProp (@imply_nPropP b P nQ PnQ tR nR R).
Fact exists_nPropP A tP nP P :
(~ exists x : A, nPred tP nP P x) = (forall x : A, nP x).
Proof.
Internals.exists_nProp : forall [A : Type] [tP : bool] [nP : A -> Prop], (forall x : A, Internals.negatedProp tP (nP x)) -> Internals.properNegatedProp (forall x : A, nP x) Internals.exists_nProp is not universe polymorphic Arguments Internals.exists_nProp [A]%_type_scope [tP]%_bool_scope [nP]%_function_scope P%_function_scope Internals.exists_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.exists_nProp Declared in library mathcomp.classical.contra, line 362, characters 10-22
ProperNegatedProp (@exists_nPropP A tP nP P).
Fact exists2_nPropP A P tQ nQ Q :
(~ exists2 x : A, P x & nPred tQ nQ Q x) = (forall x : A, P x -> nQ x).
Canonical
Internals.exists2_nProp : forall [A : Type] (P : A -> Prop) [tQ : bool] [nQ : A -> Prop], (forall x : A, Internals.negatedProp tQ (nQ x)) -> Internals.properNegatedProp (forall x : A, P x -> nQ x) Internals.exists2_nProp is not universe polymorphic Arguments Internals.exists2_nProp [A]%_type_scope P%_function_scope [tQ]%_bool_scope [nQ]%_function_scope Q%_function_scope Internals.exists2_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.exists2_nProp Declared in library mathcomp.classical.contra, line 368, characters 10-23
ProperNegatedProp (@exists2_nPropP A P tQ nQ Q).
Fact inhabited_nPropP T : (~ inhabited T) = (T -> False).
Proof.
Internals.inhabited_nProp : forall T : Type, Internals.properNegatedProp (T -> False) Internals.inhabited_nProp is not universe polymorphic Arguments Internals.inhabited_nProp T%_type_scope Internals.inhabited_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.inhabited_nProp Declared in library mathcomp.classical.contra, line 373, characters 10-25
Structure negatedForallBody bounded P nQ tR nR := NegatedForallBody {
negated_forall_body :> negatedProp tR nR; _ : and_def bounded P nQ nR}.
Structure properNegatedForallBody b P nQ nR := ProperNegatedForallBody {
proper_negated_forall_body :> properNegatedProp nR; _ : and_def b P nQ nR}.
Notation nBody b P nQ t nR x := (negatedForallBody b (P x) (nQ x) t (nR x)).
Fact forall_nPropP A b P nQ tR nR (R : forall x, nBody b P nQ tR nR x) :
(~ forall x : A, R x) = if b then exists2 x, P x & nQ x else exists x, nQ x.
Proof.
Internals.forall_nProp : forall [A : Type] [b : bool] [P nQ : A -> Prop] [tR : bool] [nR : A -> Prop], (forall x : A, Internals.nBody b P nQ tR nR x) -> Internals.negatedProp false (if b then exists2 x : A, P x & nQ x else exists x : A, nQ x) Internals.forall_nProp is not universe polymorphic Arguments Internals.forall_nProp [A]%_type_scope [b]%_bool_scope [P nQ]%_function_scope [tR]%_bool_scope [nR]%_function_scope R%_function_scope Internals.forall_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.forall_nProp Declared in library mathcomp.classical.contra, line 409, characters 10-22
@NegatedProp false _ (wrap2Prop (forall x : A, R x)) (forall_nPropP R).
Fact proper_nBodyP b P nQ nR :
properNegatedForallBody b P nQ nR -> and_def b P nQ nR.
Proof.
Internals.proper_nBody : forall [b : bool] [P nQ nR : Prop], Internals.properNegatedForallBody b P nQ nR -> Internals.negatedForallBody b P nQ false nR Internals.proper_nBody is not universe polymorphic Arguments Internals.proper_nBody [b]%_bool_scope [P nQ nR]%_type_scope R Internals.proper_nBody is transparent Expands to: Constant mathcomp.classical.contra.Internals.proper_nBody Declared in library mathcomp.classical.contra, line 415, characters 10-22
let def_nR := @proper_nBodyP b P nQ nR R in
@NegatedForallBody b P nQ false nR (proper_nProp R) def_nR.
Canonical
Internals.nonproper_nBody : forall [tP : bool] [nP : Prop], Internals.negatedProp tP nP -> Internals.negatedForallBody false True nP tP nP Internals.nonproper_nBody is not universe polymorphic Arguments Internals.nonproper_nBody [tP]%_bool_scope [nP]%_type_scope P Internals.nonproper_nBody is transparent Expands to: Constant mathcomp.classical.contra.Internals.nonproper_nBody Declared in library mathcomp.classical.contra, line 418, characters 10-25
@NegatedForallBody false True nP tP nP P erefl.
Fact andRHS_def b P Q PQ : andRHS b P Q PQ -> and_def b P Q PQ.
Proof.
Internals.bounded_nBody : forall [b : bool] [P nQ PnQ : Prop] [tR : bool] [nR : Internals.andRHS b P nQ PnQ], Internals.negatedProp tR (Internals.and_RHS nR) -> Internals.properNegatedForallBody b P nQ PnQ Internals.bounded_nBody is not universe polymorphic Arguments Internals.bounded_nBody [b]%_bool_scope [P nQ PnQ]%_type_scope [tR]%_bool_scope [nR] R Internals.bounded_nBody is transparent Expands to: Constant mathcomp.classical.contra.Internals.bounded_nBody Declared in library mathcomp.classical.contra, line 423, characters 10-23
ProperNegatedForallBody (@imply_nProp b P nQ PnQ tR nR R) (andRHS_def nR).
Canonical
Internals.unbounded_nBody : forall [nQ : Prop], Internals.properNegatedProp nQ -> Internals.properNegatedForallBody false True nQ nQ Internals.unbounded_nBody is not universe polymorphic Arguments Internals.unbounded_nBody [nQ]%_type_scope Q Internals.unbounded_nBody is transparent Expands to: Constant mathcomp.classical.contra.Internals.unbounded_nBody Declared in library mathcomp.classical.contra, line 425, characters 10-25
@ProperNegatedForallBody false True nQ nQ Q erefl.
Structure negatedBool nP :=
NegatedBool {negated_bool :> bool; _ : (~ negated_bool) = nP}.
Structure positedBool P :=
PositedBool {posited_bool :> bool; _ : is_true posited_bool = P}.
Local Fact is_true_nPropP nP (b : negatedBool nP) : (~ b) = nP.
Proof.
Internals.is_true_nProp : forall [nP : Prop], Internals.negatedBool nP -> Internals.properNegatedProp nP Internals.is_true_nProp is not universe polymorphic Arguments Internals.is_true_nProp [nP]%_type_scope b Internals.is_true_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.is_true_nProp Declared in library mathcomp.classical.contra, line 448, characters 10-23
Local Fact true_negP : (~ true) = False
Proof.
Proof.
Proof.
Proof.
Internals.true_neg : Internals.negatedBool False Internals.true_neg is not universe polymorphic Internals.true_neg is transparent Expands to: Constant mathcomp.classical.contra.Internals.true_neg Declared in library mathcomp.classical.contra, line 454, characters 10-18
Canonical
Internals.true_pos : Internals.positedBool True Internals.true_pos is not universe polymorphic Internals.true_pos is transparent Expands to: Constant mathcomp.classical.contra.Internals.true_pos Declared in library mathcomp.classical.contra, line 455, characters 10-18
Canonical
Internals.false_neg : Internals.negatedBool True Internals.false_neg is not universe polymorphic Internals.false_neg is transparent Expands to: Constant mathcomp.classical.contra.Internals.false_neg Declared in library mathcomp.classical.contra, line 456, characters 10-19
Canonical
Internals.false_pos : Internals.positedBool False Internals.false_pos is not universe polymorphic Internals.false_pos is transparent Expands to: Constant mathcomp.classical.contra.Internals.false_pos Declared in library mathcomp.classical.contra, line 457, characters 10-19
Local Fact id_negP (b : bool) : (~ b) = ~~ b
Proof.
Internals.id_neg : forall b : bool, Internals.negatedBool (~~ b) Internals.id_neg is not universe polymorphic Arguments Internals.id_neg b%_bool_scope Internals.id_neg is transparent Expands to: Constant mathcomp.classical.contra.Internals.id_neg Declared in library mathcomp.classical.contra, line 460, characters 10-16
Canonical
Internals.id_pos : forall b : bool, Internals.positedBool b Internals.id_pos is not universe polymorphic Arguments Internals.id_pos b%_bool_scope Internals.id_pos is transparent Expands to: Constant mathcomp.classical.contra.Internals.id_pos Declared in library mathcomp.classical.contra, line 461, characters 10-16
Local Fact negb_negP P (b : positedBool P) : (~ ~~ b) = P.
Proof.
Internals.negb_neg : forall [P : Prop], Internals.positedBool P -> Internals.negatedBool P Internals.negb_neg is not universe polymorphic Arguments Internals.negb_neg [P]%_type_scope b Internals.negb_neg is transparent Expands to: Constant mathcomp.classical.contra.Internals.negb_neg Declared in library mathcomp.classical.contra, line 465, characters 10-18
Local Fact negb_posP nP (b : negatedBool nP) : (~~ b = nP :> Prop).
Proof.
Internals.negb_pos : forall [nP : Prop], Internals.negatedBool nP -> Internals.positedBool nP Internals.negb_pos is not universe polymorphic Arguments Internals.negb_pos [nP]%_type_scope b Internals.negb_pos is transparent Expands to: Constant mathcomp.classical.contra.Internals.negb_pos Declared in library mathcomp.classical.contra, line 468, characters 10-18
Structure negatedLeqLHS n lt_nm :=
NegatedLeqLHS {negated_leq_LHS :> nat; _ : (n < negated_leq_LHS) = lt_nm}.
Canonical
Internals.neg_ltn_LHS : forall n m : nat, Internals.negatedLeqLHS n (n <= m) Internals.neg_ltn_LHS is not universe polymorphic Arguments Internals.neg_ltn_LHS (n m)%_nat_scope Internals.neg_ltn_LHS is transparent Expands to: Constant mathcomp.classical.contra.Internals.neg_ltn_LHS Declared in library mathcomp.classical.contra, line 479, characters 10-21
Canonical
Internals.neg_leq_LHS : forall n m : nat, Internals.negatedLeqLHS n (n < m) Internals.neg_leq_LHS is not universe polymorphic Arguments Internals.neg_leq_LHS (n m)%_nat_scope Internals.neg_leq_LHS is transparent Expands to: Constant mathcomp.classical.contra.Internals.neg_leq_LHS Declared in library mathcomp.classical.contra, line 480, characters 10-21
Local Fact leq_negP n lt_nm (m : negatedLeqLHS n lt_nm) : (~ m <= n) = lt_nm.
Canonical
Internals.leq_neg : forall [n : nat] [lt_nm : bool], Internals.negatedLeqLHS n lt_nm -> Internals.negatedBool lt_nm Internals.leq_neg is not universe polymorphic Arguments Internals.leq_neg [n]%_nat_scope [lt_nm]%_bool_scope m Internals.leq_neg is transparent Expands to: Constant mathcomp.classical.contra.Internals.leq_neg Declared in library mathcomp.classical.contra, line 484, characters 10-17
Structure neqRHS nP T x :=
NeqRHS {neq_RHS :> wrapped T; _ : (x <> unwrap neq_RHS) = nP}.
Structure boolNeqRHS nP (x : bool) :=
BoolNeqRHS {bool_neq_RHS; _ : (x <> bool_neq_RHS) = nP}.
Local Fact eq_nPropP nP T x (y : neqRHS nP x) : (x <> unwrap y :> T) = nP.
Proof.
Internals.eq_nProp : forall [nP : Prop] [T : Type] [x : T], Internals.neqRHS nP x -> Internals.properNegatedProp nP Internals.eq_nProp is not universe polymorphic Arguments Internals.eq_nProp [nP T]%_type_scope [x] y Internals.eq_nProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.eq_nProp Declared in library mathcomp.classical.contra, line 505, characters 10-18
Local Fact bool_neqP nP x y : (x <> @bool_neq_RHS nP x y) = nP.
Proof.
Internals.bool_neq : forall [nP : Prop] [x : bool], Internals.boolNeqRHS nP x -> Internals.neqRHS nP x Internals.bool_neq is not universe polymorphic Arguments Internals.bool_neq [nP]%_type_scope [x]%_bool_scope y Internals.bool_neq is transparent Expands to: Constant mathcomp.classical.contra.Internals.bool_neq Declared in library mathcomp.classical.contra, line 509, characters 10-18
Canonical
Internals.true_neq : forall [nP : Prop] (b : Internals.negatedBool nP), Internals.boolNeqRHS nP (Internals.negated_bool b) Internals.true_neq is not universe polymorphic Arguments Internals.true_neq [nP]%_type_scope b Internals.true_neq is transparent Expands to: Constant mathcomp.classical.contra.Internals.true_neq Declared in library mathcomp.classical.contra, line 510, characters 10-18
Local Fact false_neqP P (b : positedBool P) : (b <> false :> bool) = P.
Proof.
Internals.false_neq : forall [P : Prop] (b : Internals.positedBool P), Internals.boolNeqRHS P (Internals.posited_bool b) Internals.false_neq is not universe polymorphic Arguments Internals.false_neq [P]%_type_scope b Internals.false_neq is transparent Expands to: Constant mathcomp.classical.contra.Internals.false_neq Declared in library mathcomp.classical.contra, line 513, characters 10-19
Local Fact eqType_neqP (T : eqType) (x y : T) : (x <> y) = (x != y).
Proof.
Internals.eqType_neq : forall [T : eqType] (x y : T), Internals.neqRHS (x != y) x Internals.eqType_neq is not universe polymorphic Arguments Internals.eqType_neq [T] x y Internals.eqType_neq is transparent Expands to: Constant mathcomp.classical.contra.Internals.eqType_neq Declared in library mathcomp.classical.contra, line 517, characters 10-20
@NeqRHS (x != y) T x (Wrap y) (eqType_neqP x y).
Local Fact eq_op_posP (T : eqType) x y : (x == y :> T : Prop) = (x = y).
Proof.
Internals.eq_op_pos : forall [T : eqType] (x y : T), Internals.positedBool (x = y) Internals.eq_op_pos is not universe polymorphic Arguments Internals.eq_op_pos [T] x y Internals.eq_op_pos is transparent Expands to: Constant mathcomp.classical.contra.Internals.eq_op_pos Declared in library mathcomp.classical.contra, line 521, characters 10-19
Structure witnessedType P := WitnessedType {
witnessed_Type :> wrappedType; _ : inhabited witnessed_Type = P}.
Structure properWitnessedType P := ProperWitnessedType {
proper_witnessed_Type :> Type; _ : inhabited proper_witnessed_Type = P}.
Local Notation wType P T := (unwrap_Type (@witnessed_Type P T)).
Local Notation wTycon P T x := (wType (P x) (T x)).
Lemma witnessedType_intro {P : Prop} T : P -> wType P T.
Proof.
Lemma witnessedType_elim {P} T : wType P T -> P.
Proof.
Local Fact eq_inhabited T (P : Prop) : (T -> P) -> (P -> T) -> inhabited T = P.
Proof.
Internals.Prop_wType : forall P : Prop, Internals.witnessedType P Internals.Prop_wType is not universe polymorphic Arguments Internals.Prop_wType P%_type_scope Internals.Prop_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.Prop_wType Declared in library mathcomp.classical.contra, line 568, characters 10-20
@WitnessedType P (wrap1Type P) (eq_inhabited (@id P) id).
Proof.
Internals.proper_wType : forall [P : Prop], Internals.properWitnessedType P -> Internals.witnessedType P Internals.proper_wType is not universe polymorphic Arguments Internals.proper_wType [P]%_type_scope T Internals.proper_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.proper_wType Declared in library mathcomp.classical.contra, line 575, characters 10-22
@WitnessedType P (wrap2Type _) (@proper_wTypeP P T).
inhabited (forall x : A, wTycon P T x) = (forall x : A, P x) .
Proof.
Internals.forall_wType : forall [A : Type] [P : A -> Prop], (forall x : A, Internals.witnessedType (P x)) -> Internals.witnessedType (forall x : A, P x) Internals.forall_wType is not universe polymorphic Arguments Internals.forall_wType [A]%_type_scope [P]%_function_scope T%_function_scope Internals.forall_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.forall_wType Declared in library mathcomp.classical.contra, line 582, characters 10-22
@WitnessedType _ (wrap3Type _) (@forall_wTypeP A P T).
Internals.inhabited_wType : forall T : Type, Internals.witnessedType (inhabited T) Internals.inhabited_wType is not universe polymorphic Arguments Internals.inhabited_wType T%_type_scope Internals.inhabited_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.inhabited_wType Declared in library mathcomp.classical.contra, line 586, characters 10-25
Local Fact void_wTypeP : inhabited void = False
Proof.
Internals.void_wType : Internals.properWitnessedType False Internals.void_wType is not universe polymorphic Internals.void_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.void_wType Declared in library mathcomp.classical.contra, line 591, characters 10-20
Local Fact unit_wTypeP : inhabited unit = True
Proof.
Internals.unit_wType : Internals.properWitnessedType True Internals.unit_wType is not universe polymorphic Internals.unit_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.unit_wType Declared in library mathcomp.classical.contra, line 594, characters 10-20
Local Fact pair_wTypeP P Q S T : inhabited (wType P S * wType Q T) = (P /\ Q).
Canonical
Internals.pair_wType : forall [P Q : Prop], Internals.witnessedType P -> Internals.witnessedType Q -> Internals.properWitnessedType (P /\ Q) Internals.pair_wType is not universe polymorphic Arguments Internals.pair_wType [P Q]%_type_scope S T Internals.pair_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.pair_wType Declared in library mathcomp.classical.contra, line 598, characters 10-20
Local Fact sum_wTypeP P Q S T : inhabited (wType P S + wType Q T) = (P \/ Q).
Canonical
Internals.sum_wType : forall [P Q : Prop], Internals.witnessedType P -> Internals.witnessedType Q -> Internals.properWitnessedType (P \/ Q) Internals.sum_wType is not universe polymorphic Arguments Internals.sum_wType [P Q]%_type_scope S T Internals.sum_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.sum_wType Declared in library mathcomp.classical.contra, line 602, characters 10-19
Local Fact sumbool_wTypeP P Q : inhabited ({P} + {Q}) = (P \/ Q).
Proof.
Internals.sumbool_wType : forall P Q : Prop, Internals.properWitnessedType (P \/ Q) Internals.sumbool_wType is not universe polymorphic Arguments Internals.sumbool_wType (P Q)%_type_scope Internals.sumbool_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.sumbool_wType Declared in library mathcomp.classical.contra, line 606, characters 10-23
Local Fact sumor_wTypeP P Q T : inhabited (wType P T + {Q}) = (P \/ Q).
Canonical
Internals.sumor_wType : forall [P : Prop] (Q : Prop), Internals.witnessedType P -> Internals.properWitnessedType (P \/ Q) Internals.sumor_wType is not universe polymorphic Arguments Internals.sumor_wType [P]%_type_scope Q%_type_scope T Internals.sumor_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.sumor_wType Declared in library mathcomp.classical.contra, line 610, characters 10-21
Local Fact sig1_wTypeP T P : inhabited {x : T | P x} = (exists x : T, P x).
Proof.
Internals.sig1_wType : forall [T : Type] (P : T -> Prop), Internals.properWitnessedType (exists x : T, P x) Internals.sig1_wType is not universe polymorphic Arguments Internals.sig1_wType [T]%_type_scope P%_function_scope Internals.sig1_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.sig1_wType Declared in library mathcomp.classical.contra, line 614, characters 10-20
Local Fact sig2_wTypeP T P Q :
inhabited {x : T | P x & Q x} = exists2 x : T, P x & Q x.
Proof.
Internals.sig2_wType : forall [T : Type] (P Q : T -> Prop), Internals.properWitnessedType (exists2 x : T, P x & Q x) Internals.sig2_wType is not universe polymorphic Arguments Internals.sig2_wType [T]%_type_scope (P Q)%_function_scope Internals.sig2_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.sig2_wType Declared in library mathcomp.classical.contra, line 619, characters 10-20
Local Fact sigT_wTypeP A P T :
inhabited {x : A & wTycon P T x} = (exists x : A, P x).
Canonical
Internals.sigT_wType : forall [A : Type] [P : A -> Prop], (forall x : A, Internals.witnessedType (P x)) -> Internals.properWitnessedType (exists x : A, P x) Internals.sigT_wType is not universe polymorphic Arguments Internals.sigT_wType [A]%_type_scope [P]%_function_scope T%_function_scope Internals.sigT_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.sigT_wType Declared in library mathcomp.classical.contra, line 624, characters 10-20
Local Fact sigT2_wTypeP A P Q S T :
inhabited {x : A & wTycon P S x & wTycon Q T x} = (exists2 x : A, P x & Q x).
Canonical
Internals.sigT2_wType : forall [A : Type] [P Q : A -> Prop], (forall x : A, Internals.witnessedType (P x)) -> (forall x : A, Internals.witnessedType (Q x)) -> Internals.properWitnessedType (exists2 x : A, P x & Q x) Internals.sigT2_wType is not universe polymorphic Arguments Internals.sigT2_wType [A]%_type_scope [P Q]%_function_scope (S T)%_function_scope Internals.sigT2_wType is transparent Expands to: Constant mathcomp.classical.contra.Internals.sigT2_wType Declared in library mathcomp.classical.contra, line 629, characters 10-21
ProperWitnessedType (@sigT2_wTypeP A P Q S T).
Structure witnessProp (trivial : bool) (P0 : Prop) (T : Type) :=
WitnessProp {witness_Prop :> wrappedProp; _ : witness_Prop -> T * P0}.
Structure properWitnessProp T :=
ProperWitnessProp {proper_witness_Prop :> Prop; _ : proper_witness_Prop -> T}.
Local Notation wProp t T P0 P := (unwrap_Prop (@witness_Prop t P0 T P)).
Local Notation wPred t T P0 P x := (wProp t (T x) (P0 x) (P x)).
Local Fact wPropP t T P0 P : wProp t T P0 P -> T * P0
Proof.
Proof.
Internals.witness : forall {T : Type} {P0 : Prop} {P : Internals.witnessProp false P0 T}, Internals.move_view (Internals.unwrap_Prop (Internals.witness_Prop P)) T Internals.witness is not universe polymorphic Arguments Internals.witness {T P0}%_type_scope {P} Internals.witness is transparent Expands to: Constant mathcomp.classical.contra.Internals.witness Declared in library mathcomp.classical.contra, line 691, characters 11-18
Proof.
Internals.proper_wProp : forall [T : Type], Internals.properWitnessProp T -> Internals.witnessProp false True T Internals.proper_wProp is not universe polymorphic Arguments Internals.proper_wProp [T]%_type_scope P Internals.proper_wProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.proper_wProp Declared in library mathcomp.classical.contra, line 697, characters 10-22
wrap2Prop (forall x : A, wPred false T P0 P x) -> (forall x, T x) * True.
Proof.
Internals.forall_wProp : forall [A : Type] [T : A -> Type] [P0 : A -> Prop], (forall x : A, Internals.witnessProp false (P0 x) (T x)) -> Internals.witnessProp false True (forall x : A, T x) Internals.forall_wProp is not universe polymorphic Arguments Internals.forall_wProp [A]%_type_scope [T P0]%_function_scope P%_function_scope Internals.forall_wProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.forall_wProp Declared in library mathcomp.classical.contra, line 704, characters 10-22
Internals.trivial_wProp : forall P : Prop, Internals.witnessProp true P P Internals.trivial_wProp is not universe polymorphic Arguments Internals.trivial_wProp P%_type_scope Internals.trivial_wProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.trivial_wProp Declared in library mathcomp.classical.contra, line 707, characters 10-23
WitnessProp true (fun p : wrap3Prop P => (p, p) : P * P).
Canonical
Internals.inhabited_wProp : forall T : Type, Internals.properWitnessProp T Internals.inhabited_wProp is not universe polymorphic Arguments Internals.inhabited_wProp T%_type_scope Internals.inhabited_wProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.inhabited_wProp Declared in library mathcomp.classical.contra, line 712, characters 10-25
Structure nandBool b := NandBool {nand_bool :> bool; _ : ~~ (nand_bool && b)}.
Canonical
Internals.nand_false_bool : forall b : bool, Internals.nandBool b Internals.nand_false_bool is not universe polymorphic Arguments Internals.nand_false_bool b%_bool_scope Internals.nand_false_bool is transparent Expands to: Constant mathcomp.classical.contra.Internals.nand_false_bool Declared in library mathcomp.classical.contra, line 724, characters 10-25
Canonical
Internals.nand_true_bool : Internals.nandBool false Internals.nand_true_bool is not universe polymorphic Internals.nand_true_bool is transparent Expands to: Constant mathcomp.classical.contra.Internals.nand_true_bool Declared in library mathcomp.classical.contra, line 725, characters 10-24
Local Fact and_wPropP s S P0 P (t : nandBool s) T Q0 Q :
wProp s S P0 P /\ wProp t T Q0 Q -> S * T.
Proof.
Internals.and_wProp : forall [s : bool] [S : Type] [P0 : Prop], Internals.witnessProp s P0 S -> forall [t : Internals.nandBool s] [T : Type] [Q0 : Prop], Internals.witnessProp (Internals.nand_bool t) Q0 T -> Internals.properWitnessProp (S * T) Internals.and_wProp is not universe polymorphic Arguments Internals.and_wProp [s]%_bool_scope [S P0]%_type_scope P [t] [T Q0]%_type_scope Q Internals.and_wProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.and_wProp Declared in library mathcomp.classical.contra, line 730, characters 10-19
ProperWitnessProp (@and_wPropP s S P0 P t T Q0 Q).
Local Fact or_wPropP s S P0 P t T Q0 Q :
wProp s S P0 P \/ wProp t T Q0 Q ->
if t then if s then {P0} + {Q0} : Type else S + {Q0} else S + T : Type.
Canonical
Internals.or_wProp : forall [s : bool] [S : Type] [P0 : Prop], Internals.witnessProp s P0 S -> forall [t : bool] [T : Type] [Q0 : Prop], Internals.witnessProp t Q0 T -> Internals.properWitnessProp (if t then if s then {P0} + {Q0} : Type else S + {Q0} else S + T : Type) Internals.or_wProp is not universe polymorphic Arguments Internals.or_wProp [s]%_bool_scope [S P0]%_type_scope P [t]%_bool_scope [T Q0]%_type_scope Q Internals.or_wProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.or_wProp Declared in library mathcomp.classical.contra, line 742, characters 10-18
ProperWitnessProp (@or_wPropP s S P0 P t T Q0 Q).
Local Fact exists_wPropP A t T P0 P :
(exists x : A, wPred t T P0 P x) -> if t then {x | P0 x} else {x & T x}.
Canonical
Internals.exists_wProp : forall [A : Type] [t : bool] [T : A -> Type] [P0 : A -> Prop], (forall x : A, Internals.witnessProp t (P0 x) (T x)) -> Internals.properWitnessProp (if t then {x : A | P0 x} else {x : A & T x}) Internals.exists_wProp is not universe polymorphic Arguments Internals.exists_wProp [A]%_type_scope [t]%_bool_scope [T P0]%_function_scope P%_function_scope Internals.exists_wProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.exists_wProp Declared in library mathcomp.classical.contra, line 748, characters 10-22
ProperWitnessProp (@exists_wPropP A t T P0 P).
Local Fact exists2_wPropP A s S P0 P t T Q0 Q (st := if s then t else false) :
(exists2 x : A, wPred s S P0 P x & wPred t T Q0 Q x) ->
if st then {x | P0 x & Q0 x} else {x : A & S x & T x}.
Canonical
Internals.exists2_wProp : forall [A : Type] [s : bool] [S : A -> Type] [P0 : A -> Prop], (forall x : A, Internals.witnessProp s (P0 x) (S x)) -> forall [t : bool] [T : A -> Type] [Q0 : A -> Prop], (forall x : A, Internals.witnessProp t (Q0 x) (T x)) -> Internals.properWitnessProp (if if s then t else false then {x : A | P0 x & Q0 x} else {x : A & S x & T x}) Internals.exists2_wProp is not universe polymorphic Arguments Internals.exists2_wProp [A]%_type_scope [s]%_bool_scope [S P0]%_function_scope P%_function_scope [t]%_bool_scope [T Q0]%_function_scope Q%_function_scope Internals.exists2_wProp is transparent Expands to: Constant mathcomp.classical.contra.Internals.exists2_wProp Declared in library mathcomp.classical.contra, line 757, characters 10-23
ProperWitnessProp (@exists2_wPropP A s S P0 P t T Q0 Q).
Local Fact push_goal_copy {T} : ((T -> T) -> T) -> T
Proof.
Proof.
Local Fact absurdW {S T} : (S -> False) -> S -> T
Proof.
Local Fact contra_Type {P Q S T} : (~ Q -> ~ P) -> wType P S -> wType Q T.
Local Fact contra_notP tP tQ (nP nQ : Prop) P Q :
(nP -> nQ) -> (~ nProp tP nP P -> ~ nProp tQ nQ Q).
Proof.
End Internals.
Import Internals.
#[warnings="-user-warn"] Definition
notP : forall {nP : Prop} {P : negatedProp false nP}, move_view (~ P) nP notP is not universe polymorphic Arguments notP {nP}%_type_scope {P} notP is transparent Expands to: Constant mathcomp.classical.contra.Internals.notP Declared in library mathcomp.classical.contra, line 275, characters 11-15
Hint View for move/ move_viewP|2.
Hint View for move/ Internals.equivT_LR|2 Internals.equivT_RL|2.
Hint View for apply/ Internals.equivT_RL|2 Internals.equivT_LR|2.
Export (canonicals) Internals.
Lemma assume_not {P} : (~ P -> P) -> P
Ltac assume_not :=
apply: Internals.push_goal_copy; apply: Internals.assume_not_with
=> /Internals.lax_notP-/Internals.lax_witness.
Ltac absurd_not := assume_not; apply: Internals.absurdW.
Ltac contrapose :=
apply: Internals.contra_Type;
apply: Internals.contra_notP => /Internals.lax_witness.
Tactic Notation "contra" := contrapose.
Tactic Notation "contra" ":" constr(H) := move: (H); contra.
Tactic Notation "contra" ":" ident(H) := move: H; contra.
Tactic Notation "contra" ":" "{" hyp_list(Hs) "}" constr(H) :=
contra: (H); clear Hs.
Tactic Notation "contra" ":" "{" hyp_list(Hs) "}" ident(H) :=
contra: H; clear Hs.
Tactic Notation "contra" ":" "{" "-" "}" constr(H) := contra: (H).
Lemma absurd T : False -> T
Proof.
Tactic Notation (at level 0) "absurd" constr(P) := have []: ~ P.
Tactic Notation "absurd" ":" constr(H) := absurd; contra: (H) => _.
Tactic Notation "absurd" ":" ident(H) := absurd; contra: H => _.
Tactic Notation "absurd" ":" "{" hyp_list(Hs) "}" constr(H) :=
absurd: (H) => _; clear Hs.
Tactic Notation "absurd" ":" "{" hyp_list(Hs) "}" ident(H) :=
absurd: H => _; clear Hs.